Neovim配置美化完整流程

丰富的线上&线下活动,深入探索云世界

做任务,得社区积分和周边

最真实的开发者用云体验

让每位学生受益于普惠算力

让创作激发创新

资深技术专家手把手带教

遇见技术追梦人

技术交流,直击现场

海量开发者使用工具、手册,免费下载

极速、全面、稳定、安全的开源镜像

开发手册、白皮书、案例集等实战精华

为开发者定制的Chrome浏览器插件

环境:Ubuntu20.04

宿主机:windows(windowsterminal)WSL2

NVIM:v0.10.0-dev

配置Neovim需要保证流畅的github环境(以便于快速拉取插件),可以使用代理或是配置GithubSSHkey

本篇博客是学习掘金小册的学习笔记,有兴趣的朋友可以直接点击下文链接了解详情

├──LICENSE├──README.md├──init.lua└──lua├──autocmds.lua├──basic.lua├──colorscheme.lua├──keybindings.lua├──lsp│├──cmp.lua│├──config││├──bash.lua││├──emmet.lua││├──html.lua││├──json.lua││├──lua.lua││├──markdown.lua││├──pyright.lua││├──rust.lua││└──ts.lua│├──formatter.lua│├──null-ls.lua│├──setup.lua│└──ui.lua├──plugin-config│├──bufferline.lua│├──comment.lua│├──dashboard.lua│├──gitsigns.lua│├──indent-blankline.lua│├──lualine.lua│├──nvim-autopairs.lua│├──nvim-tree.lua│├──nvim-treesitter.lua│├──project.lua│├──surround.lua│├──telescope.lua│├──toggleterm.lua│├──vimspector.lua│└──which-key.lua├──plugins.lua└──utils├──fix-yank.lua├──global.lua└──im-select.lua首先init.lua是整个配置的入口文件,负责引用所有其他的模块,基本上想要打开或关闭某个插件只要在这里修改一行代码即可。

是对Neovim内置LSP功能的配置,包括常见编程语言与语法提示等。

下载字体文件FiraCodeNerdFont-Regular.ttf下载之后双击ttf文件点击安装即可添加到系统字体文件中

配置步骤:

最后点击保存

旧版本卸载:sudoapt-getremoveneovim

sudoapt-getinstallsoftware-properties-commonsudoadd-apt-repositoryppa:neovim-ppa/unstablesudoapt-getupdatesudoapt-getinstallneovim执行nvim--version,确保版本必须为0.7及以上。

执行nvim~/.bashrc

aliasvim='nvim'aliasvi='nvim'aliasv='nvim'执行source~/.bashrc重新加载配置文件

~/.config/nvim/init.lua写入如下内容:

--基础设置require('basic')require函数在Lua中用于加载一个模块,而这些模块通常位于runtimepath中的lua/目录下,也就是我们的~/.config/nvim/lua/目录。

所以上边的代码,就是加载~/.config/nvim/lua/basic.lua文件(注意:require里没有.lua扩展名)。当然也可以创建~/.config/nvim/lua/basic/目录,在目录下边创建init.lua文件也是可以成功加载的。

创建基础配置文件~/.config/nvim/lua/basic.lua,并添加如下内容:

创建lua/keybindings.lua

安装步骤(请参照官网步骤):

安装成功后添加配置文件lua/plugins.lua,添加如下内容

localpacker=require("packer")packer.startup(function(use)--Packer可以管理自己本身use'wbthomason/packer.nvim'--你的插件列表...end)init.lua中添加如下内容

--Packer插件管理require("plugins")配置生效后,Neovim会增加以下命令。

通过上边的说明,我们观察到:PackerSync命令包含了:PackerUpdate和:PackerCompile,而:PackerUpdate又包含了:PackerClean和:PackerInstall流程。

所以通常情况下,无论安装还是更新插件,我只需要下边这一条命令就够::PackerSync

每次修改完lua/plugins.lua这个文件后,保存退出,重新打开并调用:PackerSync就可以了

lua/plugins.lua文件,在最后添加

--每次保存plugins.lua自动安装插件pcall(vim.cmd,[[augrouppacker_user_configautocmd!autocmdBufWritePostplugins.luasource|PackerSyncaugroupend]])注意:保证自己可以ping通github的情况下,但是仍旧执行:PackerSync失败,按R多次拉取失败插件,如果依旧失败则在错误插件处点击回车,查看问题,具体问题具体分析,我一般多试几次R就会成功

init.lua中添加如下内容:

--主题设置(新增)require("colorscheme")lua/colorscheme.lua添加

localcolorscheme="tokyonight"localstatus_ok,_=pcall(vim.cmd,"colorscheme"..colorscheme)ifnotstatus_okthenvim.notify("colorscheme"..colorscheme.."没有找到!")returnend安装第三方主题lua/plugins.lua文件

packer.startup({function(use)--Packer可以升级自己use("wbthomason/packer.nvim")---------------------colorschemes----------------------tokyonightuse("folke/tokyonight.nvim")---------------------------------------------------------略...}):w保存p退出

lua/plugins.lua添加插件配置后,修改lua/colorscheme.lua内colorscheme变量为相应的主题即可

lua/plugins.lua中添加

packer.startup({function(use)--Packer可以升级自己use("wbthomason/packer.nvim")--------------------------plugins---------------------------------------------nvim-tree(新增)use({"kyazdani42/nvim-tree.lua",requires="kyazdani42/nvim-web-devicons"})...略配置nvim-treelua/plugin-config/nvim-tree.lua

nvim-tree初始化支持很多参数,如果想知道还有哪些其他的参数,可以运行:hnvim-tree.setup调出帮助文档查看。

lua/keybindings.lua添加

--插件快捷键localpluginKeys={}--nvim-tree--alt+m键打开关闭treemap("n","",":NvimTreeToggle",opt)--列表快捷键pluginKeys.nvimTreeList={--打开文件或文件夹{key={"","o","<2-LeftMouse>"},action="edit"},--分屏打开文件{key="v",action="vsplit"},{key="h",action="split"},--显示隐藏文件{key="i",action="toggle_custom"},--对应filters中的custom(node_modules){key=".",action="toggle_dotfiles"},--Hide(dotfiles)--文件操作{key="",action="refresh"},{key="a",action="create"},{key="d",action="remove"},{key="r",action="rename"},{key="x",action="cut"},{key="c",action="copy"},{key="p",action="paste"},{key="s",action="system_open"},}returnpluginKeysinit.lua添加

表明view.mappingsandremove_keymaps已经启用需要移除

解决方案:

注释掉view.mappings

执行:NvimTreeGenerateOnAttach,复制nvim-tree-on-attach.lua中的内容粘贴到nvim-tree.lua中(需要添加在setup之前)

添加

require("nvim-tree").setup({...on_attach=on_attach,})问题解决~

lua/plugins.lua

packer.startup({function(use)--Packer可以升级自己use("wbthomason/packer.nvim")--------------------------plugins---------------------------------------------nvim-treeuse({"kyazdani42/nvim-tree.lua",requires="kyazdani42/nvim-web-devicons"})--bufferline(新增)use({"akinsho/bufferline.nvim",requires={"kyazdani42/nvim-web-devicons","moll/vim-bbye"}})...略:w保存,自动安装,安装完整按q退出

出现GnuTLSrecverror(-110)问题

新建lua/plugin-config/bufferline.lua文件并添加内容

--bufferline--左右Tab切换map("n","",":BufferLineCyclePrev",opt)map("n","",":BufferLineCycleNext",opt)--关闭--"moll/vim-bbye"map("n","",":Bdelete!",opt)map("n","bl",":BufferLineCloseRight",opt)map("n","bh",":BufferLineCloseLeft",opt)map("n","bc",":BufferLinePickClose",opt)init.lua添加

require("plugin-config.bufferline")底部信息栏lua/plugins.lua

--lualine(新增)use({"nvim-lualine/lualine.nvim",requires={"kyazdani42/nvim-web-devicons"}})use("arkav/lualine-lsp-progress")新建lua/plugin-config/lualine.lua

--telescope(新增)use{'nvim-telescope/telescope.nvim',requires={"nvim-lua/plenary.nvim"}}:checkhealthtelescope检查依赖情况,这里通常会提示ripgrep不存在,因为telescope依赖以下两个项目。

#20.04安装repgrepsudoaptinstallripgrep#18.04安装repgrepsudoadd-apt-repositoryppa:x4121/ripgrepsudoapt-getupdatesudoaptinstallripgrep#安装fdnpminstall-gfd-find配置node环境node配置源,需要哪个版本可以将16替换为相应版本

sudoapt-getupdate-ysudoaptinstall-ynodejs如果不想要自己配置指定版本源的情况下,可以直接执行

gitclonenvm仓库时遇到如下错误

GnuTLSrecverror(-110):TheTLSconnection。。。

我是因为Ipv6的问题,可以gitclone-4指定使用Ipv4连接

但是执行ap-getupdate遇到问题:

这是因为之前我执行过sudoadd-apt-repositoryppa:x4121/ripgrep所以可以直接手动删除

解决方案(自动移除再更新):

sudoapt-add-repository-rppa:x4121/ripgrep#指的是先移除armagetronad-dev这个ppa包,再添加这个ppa包sudoaptupdate-q手动删除

cd/etc/apt/sources.list.drmx4121-ubuntu-ripgrep-focal.list#.save文件是备份,不需要管后面我在使用更新插件包时爆出:Couldnotresolvehostgithub.com

解决1(失败):

我直接ping了下网络,发现不只是github连不上,而是整个WSL网络都不能使用,在宿主机中我查看WSL网络配置,发现未修复之前两个红框中的ip地址是没有的

直接在宿主机上使用管理员权限执行netshwinsockreset重启网络即可(注意:不需要重启)

下面解决方案没有试过,仅作为备用方案

解决3:

#重启WSL指令$wsl--shutdown#之后就重新启动进入即可$wsl自定义启动页与项目列表当我们在命令行中输入nvim不带任何路径并敲击回车的时候,就会打开这个界面,通常我们会在这个界面中配置最常用功能,比如打开最近编辑过的文件,快速打开项目文件夹,快速修改快捷键等。

同样plugins.lua中添加:

--dashboard-nvim(新增)use("glepnir/dashboard-nvim")创建lua/plugin-config/dashboard.lua,并添加:

添加插件

--projectuse("ahmedkhalf/project.nvim")确保lua/plugin-config/nvim-tree.lua文件中有如下代码:

nvim_tree.setup({---上略--projectplugin需要这样设置update_cwd=true,update_focused_file={enable=true,update_cwd=true,},--下略}创建lua/plugin-config/project.lua

localstatus,project=pcall(require,"project_nvim")ifnotstatusthenvim.notify("没有找到project_nvim")returnend--nvim-tree支持vim.g.nvim_tree_respect_buf_cwd=1project.setup({detection_methods={"pattern"},patterns={".git","_darcs",".hg",".bzr",".svn","Makefile","package.json",".sln"},})localstatus,telescope=pcall(require,"telescope")ifnotstatusthenvim.notify("没有找到telescope")returnendpcall(telescope.load_extension,"projects")init.lua

require("plugin-config.dashboard")require("plugin-config.project")手动编辑project_history列表执行:luaprint(require("project_nvim.utils.path").historyfile)

我得到了~/.local/share/nvim/project_nvim/project_history这个文件,直接编辑即可

/root/.config/nvim以后的话可以方便编写nvim项目配置:)

--treesitter(新增)use({"nvim-treesitter/nvim-treesitter",run=":TSUpdate"})手动安装Languageparser运行:TSInstallInfo命令查看languageparsers列表与安装状态

安装::TSInstalljavascript

卸载::TSUninstalljavascript

安装后会在packer中生成相应语言的so文件

lua/plugin-config/nvim-treesitter.lua

localstatus,treesitter=pcall(require,"nvim-treesitter.configs")ifnotstatusthenvim.notify("没有找到nvim-treesitter")returnendtreesitter.setup({--安装languageparser--:TSInstallInfo命令查看支持的语言ensure_installed={"json","html","css","vim","lua","javascript","typescript","tsx"},--启用代码高亮模块highlight={enable=true,additional_vim_regex_highlighting=false,},})init.lua

require("plugin-config.nvim-treesitter")稍微说下里面nvim-treesitter中的配置

当你的光标在一个语法结点上时,可以设置一个增加键和一个减少键,敲击这两个,在表现上为不断外扩和收缩选中代码。

增加和减少结点的快捷键设置成了回车和退格。通过不断的按Enter选择区域会从里层不断外扩,Backspace则相反不断内收。

--启用增量选择模块incremental_selection={enable=true,keymaps={init_selection="",node_incremental="",node_decremental="",scope_incremental="",},},代码缩进在visual模式中按=即可实现代码缩进

--启用代码缩进模块(=)indent={enable=true,},代码折叠快捷键中设置了zc组合键来折叠{}中的内容,还使用zo组合键来打开对应的折叠。

如果出现问题先执行TSUpdate看是否可以解决,无法解决查看官方issues或wiki

目的:实现类似IDE的智能提示、语法检查和解析、悬停文档等交互体验

定义:LSP(LanguageServerProtocol)语言服务协议,该协议定义了在编辑器或IDE与语言服务器之间使用的协议,该语言服务器提供了例如自动补全,转到定义,查找所有引用等的功能;语言服务器索引格式的目标是支持在开发工具中进行丰富的代码导航或者一个无需本地源码副本的WebUI。

执行:hlsp查看quickstart,里面的步骤如下

配置插件:

---------------------LSP--------------------use("williamboman/nvim-lsp-installer")--Lspconfiguse({"neovim/nvim-lspconfig"})安装LSPServer运行:LspInstallInfo,点击i即可安装相应的Server,进入之后安装Luaserver

从最上面的介绍得知作者未来会用mason.nvim取代nvim-lsp-installer,mason.nvim项目支持更多的server安装,不仅仅是LSPServer还支持DAPservers、linters、formatters等等超过150个包,100+种编程语言,并且升级也是非常简单的

但是安装失败,直接重新安装即可成功

但是有时遇到couldnotfindexecutable"unzip"inpath问题,可以使用如下命令

sudoapt-getinstallzipunzip但是安装成功之后发现问题,我从issues中了解到是因为luaserver的仓库地址发生变化

鉴于nvim-lsp-installer出现的各种问题,现在使用mason.nvim代替nvim-lsp-installer

步骤:

执行:Mason即可打开,操作基本和上面的一样,只不过多了1,2,3,4,5是上边TAB快捷键,按2即可切换到LSP

创建lua/lsp/setup.lua

--内置LSP(新增)require("lsp.setup")这里记录下:使用:verbosemap可以查看所有生效的快捷键

像hrsh7th/cmp-nvim-lsp就是Neovim内置LSP提供的补全内容,hrsh7th/cmp-buffer补全当前buffer的内容,hrsh7th/cmp-cmdline是命令行的补全,hrsh7th/cmp-path则是用来补全路径,如果配置了这个,当输入一个路径的时候会补全路径

创建lua/lsp/cmp.lua

localcmp=require("cmp")cmp.setup({--指定snippet引擎snippet={expand=function(args)--For`vsnip`users.vim.fn["vsnip#anonymous"](args.body)--For`luasnip`users.--require('luasnip').lsp_expand(args.body)--For`ultisnips`users.--vim.fn["UltiSnips#Anon"](args.body)--For`snippy`users.--require'snippy'.expand_snippet(args.body)end,},--补全源sources=cmp.config.sources({{name="nvim_lsp"},--Forvsnipusers.{name="vsnip"},--Forluasnipusers.--{name='luasnip'},--Forultisnipsusers.--{name='ultisnips'},----Forsnippyusers.--{name='snippy'},},{{name="buffer"},{name="path"}}),--快捷键设置mapping=require("keybindings").cmp(cmp),})--/查找模式使用buffer源cmp.setup.cmdline("/",{mapping=cmp.mapping.preset.cmdline(),sources={{name="buffer"},},})--:命令行模式中使用path和cmdline源.cmp.setup.cmdline(":",{mapping=cmp.mapping.preset.cmdline(),sources=cmp.config.sources({{name="path"},},{{name="cmdline"},}),})lua/keybindings.lua添加

--nvim-cmp自动补全pluginKeys.cmp=function(cmp)return{--出现补全[""]=cmp.mapping(cmp.mapping.complete(),{"i","c"}),--取消补全[""]=cmp.mapping({i=cmp.mapping.abort(),c=cmp.mapping.close()}),--上一个[""]=cmp.mapping.select_prev_item(),--下一个[""]=cmp.mapping.select_next_item(),--确认[""]=cmp.mapping.confirm({select=true,behavior=cmp.ConfirmBehavior.Replace}),--如果窗口内容太多,可以滚动[""]=cmp.mapping(cmp.mapping.scroll_docs(-4),{"i","c"}),[""]=cmp.mapping(cmp.mapping.scroll_docs(4),{"i","c"}),}endinit.lua

require("lsp.cmp")--(新增)LSP功能增强UI插件,同时lspage还可以自定义快捷键,对于我自己而言我认为有些地方文字更加直观,如果有些朋友需要美化可自行查找

当一行代码很长的时候,右侧的提示文字就会显示不全

之前配置过gp快捷键使用弹窗显示错误,可以有效解决

use("tami5/lspsaga.nvim")创建lua/lsp/ui.lua

locallspsaga=require'lspsaga'lspsaga.setup{--defaults...debug=false,use_saga_diagnostic_sign=true,--diagnosticsignerror_sign="",warn_sign="",hint_sign="",infor_sign="",diagnostic_header_icon="",--codeactiontitleiconcode_action_icon="",code_action_prompt={enable=true,sign=true,sign_priority=40,virtual_text=true,},finder_definition_icon="",finder_reference_icon="",max_preview_lines=10,finder_action_keys={--open="o",open="",vsplit="s",split="i",--quit="q",quit="",scroll_down="",scroll_up="",},code_action_keys={--quit="q",quit="",exec="",},rename_action_keys={--quit="",quit="",exec="",},definition_preview_icon="",border_style="single",rename_prompt_prefix="",rename_output_qflist={enable=false,auto_open_qflist=false,},server_filetype_map={},diagnostic_prefix_format="%d.",diagnostic_message_format="%m%c",highlight_prefix=false,}lua/keybindings.lua中的mapLSP函数替换为

require("lsp.ui")代码格式化之前lua/keybindings.lua定义过格式化快捷键

mapbuf("n","f","luavim.lsp.buf.format({bufnr=bufnr})",opt)但是你会发现格式化不起作用,这是因为使用的LuaLanguageServer并没有实现格式化功能。

格式化方案有如下两种:

这里只讲解第二种

require("lsp.null-ls")安装之后可以运行:LspInfo查看绑定的LanguageServer

然后我们可以看到有两个LSP了,null-ls作为通用LSP,可以在任何filetypes中运行。

然后执行:NullLsInfo查看源的激活情况

之后的话即可使用:luavim.lsp.buf.format()命令或是直接使用快捷键f进行格式化

但是我们会发现包如下错误,这是因为相应语言应该配置相应的CodeFormatter,显示报错就是缺少Lua语言的StyLua,其它语言可以自行配置相应的Formatter

下面展示如何配置stylua

因为我是使用WSL,因此直接执行如下命令即可

执行rustc--version看是否成功,失败则看是否添加~/.cargo/bin路径到环境变量中

执行

cargoinstallstylua输出stylua-V看是否成功

格式化之后里面的空格就都变成了"^I",原本应该是“·”的

直接将basic.lua文件中设置vim.o.listchars="space:·,tab:··"或是设置vim.o.list=false

执行:TSInstallcssscssjsonhtmlvuejavascripttypescript

执行:TSInstallInfo查看安装情况

lua/lsp/setup.lua

mason_config.setup({ensure_installed={"lua_ls","html","cssls"}})...localservers={lua_ls=require("lsp.config.lua"),--新增html=require("lsp.config.html"),cssls=require("lsp.config.css")}创建lsp/common-config.lua

localM={}M.keyAttach=function(bufnr)localfunctionbuf_set_keymap(mode,lhs,rhs)vim.keymap.set(mode,lhs,rhs,{noremap=true,silent=true,buffer=bufnr})end--绑定快捷键require("keybindings").mapLSP(buf_set_keymap)end--禁用格式化功能,交给专门插件插件处理M.disableFormat=function(client)ifvim.fn.has("nvim-0.8")==1thenclient.server_capabilities.documentFormattingProvider=falseclient.server_capabilities.documentRangeFormattingProvider=falseelseclient.resolved_capabilities.document_formatting=falseclient.resolved_capabilities.document_range_formatting=falseendend--M.capabilities=require("cmp_nvim_lsp").update_capabilities(vim.lsp.protocol.make_client_capabilities())M.capabilities=require("cmp_nvim_lsp").default_capabilities()M.flags={debounce_text_changes=150,}returnM创建lsp/config/html.lua

localcommon=require("lsp.common-config")localopts={capabilities=common.capabilities,flags=common.flags,on_attach=function(client,bufnr)--禁用本身语言格式化common.disableFormat(client)common.keyAttach(bufnr)end,}return{on_setup=function(server)server.setup(opts)end,}创建lsp/config/css.lua

localcommon=require("lsp.common-config")localopts={capabilities=common.capabilities,flags=common.flags,on_attach=function(client,bufnr)common.disableFormat(client)common.keyAttach(bufnr)end,settings={css={validate=true,--tailwindcsslint={unknownAtRules="ignore",},},less={validate=true,lint={unknownAtRules="ignore",},},scss={validate=true,lint={unknownAtRules="ignore",},},},}return{on_setup=function(server)server.setup(opts)end,}上面不禁用的话也是可以的,只不过会和默认的null-ls中的prettier格式化冲突,每次格式化都需要选择

注意html、css文件均是需要项目根目录有package.json文件和prettier依赖

#创建package.json并安装prettier依赖,顺便把eslint也配置上npminit-y&&npmi-DprettiereslintEmmetLSP配置使用emmet可是使用简单的语法可以快速打出HTML结构标签

创建lua/lsp/config/emmet.lua

localopts={filetypes={"html","typescriptreact","javascriptreact","css","sass","scss","less"},}return{on_setup=function(server)server.setup(opts)end,}lua/lsp/setup.lua修改

mason_config.setup({ensure_installed={"lua_ls","html","cssls","emmet_ls"}})...localservers={lua_ls=require("lsp.config.lua"),html=require("lsp.config.html"),cssls=require("lsp.config.css"),--新增emmet_ls=require("lsp.config.emmet")}配置jsonlsJSONSchemaStore插件,即JSON增强包

plugins.lua添加插件

--JSON增强use("b0o/schemastore.nvim")新建lua/lsp/config/json.lua

mason_config.setup({ensure_installed={"lua_ls","html","cssls","emmet_ls","jsonls"}})localservers={lua_ls=require("lsp.config.lua"),html=require("lsp.config.html"),cssls=require("lsp.config.css"),emmet_ls=require("lsp.config.emmet"),--新增jsonls=require("lsp.config.json")}配置tssserver添加TS增强包插件

use({"jose-elias-alvarez/nvim-lsp-ts-utils",requires="nvim-lua/plenary.nvim"})创建lsp/config/ts.lua

--typescript快捷键pluginKeys.mapTsLSP=function(mapbuf)mapbuf("n","gs",":TSLspOrganize",opt)mapbuf("n","gr",":TSLspRenameFile",opt)mapbuf("n","gi",":TSLspImportAll",opt)endESLint和Prettier配置null-ls中除了格式化Formatting,还有Diagnostics(红字错误提示)和CodeActions(代码触发的行为)

lsp/null-ls.lua修改为

使用ca调用CodeAction自动修复快捷键

前文已安装rust环境,此处不赘述

plugin-config/nvim-treesitter.lua中的ensure_installed中添加"rust"

或是执行:TSInstallrust

lsp/setup.lua

mason_config.setup({ensure_installed={"lua_ls","html","cssls","emmet_ls","jsonls","rust_analyzer"}})...localservers={--新增rust_analyzer=require("lsp.config.rust"),}lsp/config/rust.lua

--Rust增强use("simrat39/rust-tools.nvim")代码格式化安装相应Formtter

rustupcomponentaddrustfmtnull-ls.lua

source中添加

--rustfmtformatting.rustfmt,filetypes中添加"rust"

熟悉上面的流程,这个就简单讲了

setup.lua

servers添加“c”和“cpp”

安装格式化插件:apt-getinstall-yclang-format

plugin-config/nvim-treesitter.lua

ensure_installed添加“cpp”"c"null-ls.lua

formatting.prettier.with({filetypes={"c","cpp"}}),--clang-formatformatting.clang_format,lsp/config/clangd.lua

添加插件:

use'CRAG666/code_runner.nvim'配置插件plugin-config/code-runner.lua

引入插件

use("windwp/nvim-autopairs")创建lua/plugin-config/nvim-autopairs.lua

use("numToStr/Comment.nvim")创建lua/plugin-config/comment.lua

--代码注释插件--see./lua/plugin-config/comment.luapluginKeys.comment={--Normal模式快捷键toggler={line="gcc",--行注释block="gbc",--块注释},--Visual模式opleader={line="gc",bock="gb",},}init.lua中引入

require("plugin-config.comment")Surround配置引入插件

--surrounduse("ur4ltz/surround.nvim")lua/plugin-config/surround.lua

localstatus,surround=pcall(require,"surround")ifnotstatusthenvim.notify("没有找到surround")returnendsurround.setup({mappings_style="surround",})init.lua

surround官方快捷键如下

NormalMode-SandwichModeProvideskeymappingtoaddsurroundingcharacters.(visuallyselectthenpresssorpresssa{motion}{char})Provideskeymappingtoreplacesurroundingcharacters.(sr)Provideskeymappingtodeletesurroundingcharacters.(sd)ssrepeatslastsurroundcommand.NormalMode-SurroundModeProvideskeymappingtoaddsurroundingcharacters.(visuallyselectthenpresssorpressys{motion}{char})Provideskeymappingtoreplacesurroundingcharacters.(cs)Provideskeymappingtodeletesurroundingcharacters.(ds)InsertModewillinsertbothpairsininsertmode.willinsertbothpairsininsertmodewithsurroundingwhitespace.willinsertbothpairsonnewlinesinsertmode.常用快捷键

我在推送仓库时频繁遇到GnuTLSrecverror(-110)

#!/bin/bashset-esudoapt-getinstallbuild-essentialfakerootdpkg-dev-ysudoapt-getbuild-depgit-ysudoapt-getinstalllibcurl4-openssl-dev-ycd~mkdirsource-gitcdsource-git/apt-getsourcegitcdgit-2.*.*/sed-i--'s/libcurl4-gnutls-dev/libcurl4-openssl-dev/'./debian/controlsed-i--'/TEST\s*=\s*test/d'./debian/rulesdpkg-buildpackage-rfakeroot-b-uc-ussudodpkg-i../git_*ubuntu*.deb直接运行这个脚本即可

之后推送遇到remote:SupportforpasswordauthenticationwasremovedonAugust13,2021问题,虽然我不太清楚我配了SSHkey,为什么还是走的密码验证,但是我还是按照他的提示来做获取token,直接github首页中Setting->Developersettings->Personalaccesstokens生成token

使用:hclipboard查看复制粘贴命令

文档推荐使用setclipboard=unnamedplus,或是执行setclipboard^=unnamed,unnamedplus就可以连通vim剪切板和系统剪切板,但是这个命令只是暂时性的,只能当前页面生效,为了永久生效,可以在basic.lua中添加

--复制粘贴联通系统粘贴板vim.o.clipboard="unnamedplus"全选复制文件:%y或是ggyG

只是删除而不将删除的部分复制到剪切板中"_dd(本质上是将剪切的内容放到_寄存器中,以便于和+寄存器区分)

对我自己而言,配置的这些功能虽然少,但是暂时够用,如果追求更多的功能,可以直接用小册作者的仓库,或是其他优秀仓库

其实我觉得其实作为个人使用来说,没有特殊需求的情况下不是很推荐自己配置,只需要看懂本篇博客,然后可以做到更改别人写好的配置即可

THE END
1.LibraryLibrary News Primo@LibJournal SearchDatabase A-ZLibrary Guides Library Catalogue Search Quick Links My Library RecordPrimo@LibSeminar Room & Solo Pod Booking SystemHKAPA DigitalAudioMiner (campus access only)Library NewsNew AdditionsTurnitin (Online Guide)https://www.hkapa.edu/library/
2.海棠书屋入口myhtlmebookmyhtlmeb海棠书屋1、海棠书屋入口myhtlmebookmyhtlmeb海棠书屋点击这里直达 2、海棠官方网站入口链接点击这里直达 【海棠书屋】 1、自由阅读全网各种冷门小说资源,高质量小说最新章节更新非常快捷。 2、拥有了全网最全面的免费书籍资源,在这里你可以肆意阅读各种感兴趣的小说。 http://m.hcs-laser.com/jiaocheng/163157.html
3.library电子图书馆入口关于“library电子图书馆入口”的问题,由于“library”是一个广泛的词汇,可能指代多个电子图书馆,这里我将主要聚焦于一个广受欢迎的电子图书馆——**Z-Library(Zlibray)**的入口方式进行说明。 Z-Library电子图书馆入口方式 官方网站访问: 用户可以直接在网络浏览器中搜索“Z-Library”或“Zlibray”的官方网站。该网https://agents.baidu.com/content/question/e5853641ea287b19ebf472e7
4.zliabary图书馆入口2024zliabary图书馆怎么下载此外,Z-Library还拥有强大的搜索功能,可以帮助读者快速找到自己想要的书籍。总之,Z-Library是一个非常便捷、实用的在线图书馆,值得一试。 以上就是小编为大家带来的zliabary图书馆入口2024的全部内容了,希望对大家有所帮助,更多内容可以关注游侠手游。https://app.ali213.net/gl/1292407.html
5.library的入口网站是哪个?以下是电子图书馆的一些建议入口:1. 中文期刊在线:提供超过2000种中文期刊,用户可以在线阅读和下载,https://ask.zol.com.cn/x/25367227.html
6.Zlibrary免费图书保姆级下载指南使用必应搜索 Zlibrary 快捷入口,选择 Zlibrary 快捷入口与镜像网站辅助工具,点击“访问”即可获得 Zlibrary 离线库、读秀书库和 libgen 书库共计 1400 万册藏书。比官方 Zlibrary 更适合中国人,赶紧码住吧! 第1步 edge浏览器搜索Zlibrary 第2步 点击镜像站1 第3步 点击此处 第4步 输入想要查看的书籍 https://m.dianping.com/ugcdetail/146023707?sceneType=0&bizType=29&msource=baiduappugc
7.ao3官方入口下载ao3是一看非常好用的线上阅读软件,软件界面设计简约清新,拥有海量优质的阅读资源供用户使用,方便快捷,随时随地可以进行阅读,欢迎下载使用! 【ao3app官网功能】 【每日签到】每天签到送金币,好礼送不停; 【精选书籍】女频、男频、出版、各种小说任意看; 【海量书库】原创女生、原创男生、现代言情任意选择; 【语音http://m.5577.com/d/481254
8.app快捷入口app 快捷入口 Taylor_xuIP属地: 江西 2021.06.18 17:28:30字数 228阅读 372 https://developer.android.google.cn/guide/topics/ui/shortcuts/creating-shortcuts#gsi-library 图1 静态方式 <activity android:name=".activity.SplashActivity" android:theme="@style/AppTheme.NoActionBarAndNoTitle">https://www.jianshu.com/p/5c5807ee80bb
9.zlibrary打不开怎么办,最新镜像网址获取办法(1101更新)zlibrary数字图书馆介绍 Z-library被称为全球最大的数字图书馆,里面包含 9,826,996 本电子书,84,837,646 篇期刊文章。 从各种知名文学著作,理工学科,人文艺术、到学术论文等应有尽有!支持PDF、epub、mobi等多种格式图书资源下载绝对是你找书的不二选择。 https://zhuanlan.zhihu.com/p/712466415
10.22062109Python笔记(2)External Libraries:自己设置Python环境,就是上面讲虚拟环境时指定的python解释器,创建好之后,就会出现能打开的External Libraries。external libraries是指你安装的解释器自带的外部的库。 (3)scratches and consoles:是创建的临时文件和缓冲区列表。 (4)project files(项目文件):包含了该项目的所有文件,比如.idea文件http://www.360doc.com/content/22/0621/09/70688440_1036834268.shtml
11.zlibrary镜像网址zlibrary镜像网址入口: https://zh.zlibrary-east.se/ 镜像站 1 :https://zlib.app/ 影子站:zh.annas-archive.org 镜像站1 :https://1lib.tk/ (暂时失效) 快捷入口 :https://zlib.yibook.org/ (暂时失效) zlibrary客户端 相比传统的纸质书籍,电子书更加便于携带,一本几十万字的小说转化为电子书也不https://openi.cn/sites/109541.html
12.LibraryManager上的快捷键设置脚本讨论区似乎这个目录下没有关于 library manager 界面的快捷键默认设置文件,想请问下关于这个界面的快捷键设置https://bbs.eetop.cn/thread-869728-1-1.html
13.技术分享将快捷方式打造成恶意软件入口(含演示视频)最近,安全研究人员发现了一种在Microsoft Windows操作系统中通过快捷方式安装恶意软件的方法。我们对于快捷方式再熟悉不过了,几乎每个人都在用,并且大家都没有https://msdn.microsoft.com/en-us/library/windows/desktop/aa362813(v=vs.85).aspx。 简单来说,这个命令行工具主要用于创建下载任务并监视其进度。然而https://www.anquanke.com/post/id/85210
14.Facebook常用链接集合快捷入口facebook兴趣词2022-12-08 17:53:19 RadiusTheme (5549) Entertainment,Technology 广告资料库 https://www.facebook.com/ads/library/?active_status=all&ad_type=political_and_issue_ads&country=US BM-商务管理平台创建 https://business.facebook.com/settings/?nav_source=flyout_menu&nav_id=446533357 https://crossker.com/index/index/blog_view.html?id=52
15.?火速参与,赢得好礼:开奖在线入口?在线免费版南大碎尸案受害者家属喊话《他是谁》剧组,近年来多起知名案件被改编影视剧 首页 软件 游戏 应用集 专栏 攻略 版本V68.83.68 下载APK高速下载 下载南大碎尸案受害者家属喊话《他是谁》剧组,近年来多起知名案件被改编影视剧安装你想要的应用 更方便 更快捷 发现更多http://hqwdjc.com/
16.关于package.json文件的深入解读前端达人react-cli-library 。但是我执行的内容却是 react-cli ,这个取决于bin的内容 man(快捷入口) 用来给Linux下的man命令查找文档地址,是个单一文件或者文件数组。如果是单一文件,安装完成后,他就是man + 的结果,和此文件名无关,例如: { "name": "foo", "version": "1.2.3", "description": "A packaged foohttps://www.shangyexinzhi.com/article/4320154.html
17.隐私政策3、账户信息展示:如果您已拥有平台账户,我们可能会在平台服务中显示您的上述个人信息(实人认证仅显示认证是否通过的结果),以及您在平台上或与平台账户相关联的产品和服务中执行的操作(您可通过平台账户在我们提供的手机本平台入口或其他产品/服务入口使用我们及/或关联公司提供的产品或服务),包括通过平台账户集中展示您https://cftweb.3g.qq.com/privacy/privacyPolicy?content_id=99f500bbfdab4474d996157acee265c2
18.中国裁判文书网使用攻略!澎湃号·政务澎湃新闻1、快捷检索框 2、高级检索窗口 3、在结果中检索 ★ 【三、中国裁判文书网检索结果会展示哪些内容?】 1、裁判文书列表 2、裁判文书全文页 ★ 【四、中国裁判文书网的收藏功能如何实现?】 1、查询模板 2、案例包 ★ 【五、中国裁判文书网的文书下载功能有哪些实现方式?】 https://www.thepaper.cn/newsDetail_forward_4861725
19.idea报错CannotcompileGroovyfiles:noGroovylibraryis②、解压(选一个中意的目录,最好目录路径是全英文的) ③、配置groovy library:File —>Project Structure —> Modules —> Groovy —> Add Groovy Support —> 选择 Groovy library 最后 apply就OK了。 如图: 快捷配置入口:如果IDEA有如下提示就最好了–方便。直接点击 Configuration Groovy SDK 即可。http://longsheng.org/post/20089.html
20.Zlibrary最新地址(民间收集)资源Zlibrary镜像站 :https://zlib.app/ 影子站:zh.annas-archive.org 快捷入口 :https://zlib.yihttps://www.chongbuluo.com/thread-15444-1-1.html
21.clibrary中文图书馆,clibrary电子书下载别摸鱼导航标签:随意集c libraryclibrary cnclibrary.topclibrary中文图书馆https://clibrary.cnhttps://clibrary.top 00000 链接直达 ?>1.免费ai视频生成+写作(可联网)?>>2.免费ai视频神器推荐3.免费ai写作绘画 clibrary中文图书馆,c library电子书下载,镜像网址 https://biemoyu.com/sites/clibrary.html
22.javalibrary最新入口javalibrary中文版javalibrary最新入口 javalibrary中文版 Big Faceless Java PDF Library是一个敏捷的Java类库,用于创建、编辑、显示和打印Acrobat PDF文档。它提供的PDI API函数灵巧而快捷,方便您在您的工程中使用,并且全部是由Java编写而成的。 The Big Faceless Java PDF Library is the smartest Java class library for creating,https://blog.51cto.com/u_16099193/7488017
23.坚果云帮助中心便捷安全的企业网盘增加云桥入口设置项,您可以根据需要,选择是否开启云桥快捷入口(坚果云盘符)。 优化了云桥中的右键菜单显示,对已同步至本地的文件和文件夹,提供系统原生菜单,方便您进一步操作。 优化了云桥中文件的同步状态图标显示方式。 修复了管理员可以修改自身同步文件夹权限的问题。 修复了从资源管理器导航栏进入同步目录的子https://help.jianguoyun.com/?p=iGFW
24.Library键盘快捷方式在查看内容时可以使用以下键盘快捷键 Library 主页:描述 Windows 快捷方式 Mac 快捷方式 放大 Ctrl 命令 缩小 Ctrl- 命令- 导航至下一个内容区域 F6 F6 搜索 CtrlF 命令F 导航交互式组件 制表符 制表符 在菜单部分之间导航(用标记线分隔的部分) 制表符 制表符 在菜单部分或下拉菜单内导航 方向键 方向键 https://www2.microstrategy.com/producthelp/current/Library/zh-cn/Content/accessible_keyboard_shortcuts.htm