免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Vim使用(一)——常用技巧及快捷键总结

Vim使用(一)——常用技巧及快捷键总结 文章目录一、常用配置二、搜索替换常用方法三、复制粘贴和删除常用方法四、多窗口文件处理五、多窗口缓存区六、格式化代码七、修改二进制文件八、大小写转换一、常用配置普通用户的vim配置在vim ~/.vimrc中以下是我的常用配置其他配置可以参考这两篇博客vim常用设置、vim 自动配置。setmouse-a syntax on语法高亮 set nocompatible 去除VI一致性,必须要添加setnu显示行号 set autowrite 自动保存setruler打开状态栏标尺 set cursorline 突出显示当前行setsmartindent开启新行时使用智能自动缩进 set hlsearch 搜索高亮setincsearch渐进式搜索 set nobackup 不需要备份文件setnoswapfile不创建临时交换文件 set nowritebackup 编辑的时候不需要备份文件setnoundofile不创建撤销文件 设置path:e :find查找路径**代表递归所有子目录setpath./** 配置tags查找路径 settags./tags,tags;$HOME Tab键更改为4个空格 setts4set sw4 setexpandtabset autoindent 打开文件默认回到上次编辑的地方au BufReadPost * if line(\) 0|if line(\) line($)|exe(norm\)|else|exe norm $|endif|endif call plug#begin(~/.vim/plugged) LSP客户端用来对接clangd后端 Plug prabirshrestha/vim-lsp 可选LSP的快捷键封装推荐 Plug mattn/vim-lsp-settings call plug#end() vim‑lsp clangd 配置 if executable(clangd) au User lsp_setup call lsp#register_server({ \ name: clangd, \ cmd: {server_info-[clangd, --background-index]}, \ allowlist: [c, cpp, h, hpp],\})endif 自定义快捷键 nnoremap gd Plug(lsp-definition) gd 跳转到定义 nnoremapC-]Plug(lsp-definition)nnoremap gDPlug(lsp-declaration) gD跳声明 nnoremap C-[ Plug(lsp-declaration) nnoremap gr Plug(lsp-references) gr查找所有引用 nnoremapC-kPlug(lsp-hover) Ctrlk 悬浮提示查看函数签名类型 nnoremap gi Plug(lsp-implementation)gi跳实现 自动启动LSP let g:lsp_auto_enable 1 let g:lsp_diagnostics_enable 1 let g:lsp_signs_enable 0 关闭侧边标记大项目更流畅letg:lsp_log_verbose0 关闭vim‑lsp的所有报错渲染波浪线、左侧E/W标记全部消失letg:lsp_diagnostics_enabled0letg:lsp_diagnostics_signs_enabled0letg:lsp_diagnostics_virtual_text_enabled0二、搜索替换常用方法# 快捷查找字符串shift “*”#向下查找并高亮显示shift “#” #向上查找并高亮显示“g” “d”#高亮显示光标所属单词并定位至文件中首次出现的位置/123#搜索123字符串/123\c#不区分大小写搜索123/123\#搜索以123作为结尾的字符串/\123\#搜索以123作为开头和结尾的字符串/123$#搜索作为行尾的字符串123/^123$#搜索作为行首和行尾的字符串123/123\|456#同时搜索123和456两个字符串:s/123//n#统计光标所在行出现123字符串的个数:l1,l2s/123//n#l1l2行:%s/123//n#所有行:s/123/456/g#光标所在行的所有123被替换为456% 所有行 g 单行内所有匹配项(默认只匹配单行第一个)i 忽略大小写 c 确认是否替换 n 只查找个数 %s/^/\(line(.))#所有行的行首被插入其所在行的行号三、复制粘贴和删除常用方法#d是剪切删除y是复制p是粘贴。d和y的结果都可以用p粘贴dd/yy#光标所在行ndd/nyy#光标所在行开始向后n行de/ye#光标所在字符开始向右最近一个单词的最后一个字符db/yb#光标所在字符上一个字符开始向左最近一个单词的第一个字符d0/y0#光标所在字符上一个字符开始到所在行首d$/y$#光标所在字符开始到所在行尾dgg/ygg#光标所在行开始到文件首行dG/yG#光标所在行开始到文件尾行d%/y%#光标所在括号开始到匹配括号结束p#粘贴到光标所在字符/行的下一位置P#粘贴到光标所在字符/行的上一位置:g/pattern/d#全局删除匹配到的行:1,10g/pattern/d#删除第1-10行里的匹配到的行:v/pattern/d#删除不包含指定字符的行:g!/pattern/d#删除不包含指定字符的行四、多窗口文件处理#打开多个窗口vim-O file1 file2#垂直线分割两个窗口vim-o file1 file2#水平线分割两个窗口vim-O3 file1 file2#打开三个其中一个闲置:vsplit 或 :vs file#在窗口中垂直线分割一个新的窗口:split 或 :spfile#在窗口中水平线分割一个新的窗口:Vexplore#在垂直分割窗口中浏览该目录:Sexplore#在水平分割窗口中浏览该目录#在窗口间移动光标Ctrlww#所有窗口中循环移动Ctrlwh#向左移动Ctrlwj#向下移动Ctrlwj#向上移动Ctrlwl#向右移动#移动窗口Ctrlwr#向右或向下方交换窗口CtrlwR#向左或向上交换窗口#改变窗口大小Ctrlw#所有窗口调整至相同尺寸平均划分Ctrlw-#当前窗口的高度减少一行也可在ex命令:resize -n明确指定减少尺寸Ctrlw#当前窗口的高度增加一行也可在ex命令:resize n明确指定增加尺寸Ctrlw#当前窗口的宽度减少也可在ex命令:vertical resize -n明确指定减少尺寸Ctrlw#当前窗口的宽度增加也可在ex命令:vertical resize n明确指定增加尺寸Ctrlw|#当前窗口的宽度调到最大也可用ex命令:vertical resize n明确指定改变宽度五、多窗口缓存区:badd#增加缓冲区:ls#列示缓冲区状态:buffer/:b file_name/:b number#编辑指定缓冲区:ball#编辑所有缓冲区多个窗口打开:bnext/:bn#到下一个缓冲区:bprevious/:bp#到上一个缓冲区:blast/:bl#到最后一个缓冲区:bmodified/:bm#到修改过的缓冲区:bdelete/:bd num#删除缓冲区:bunload#卸载缓冲区六、格式化代码编辑vim ~/.vimrc配置文件加入以下代码。filetype plugin indent on然后就可以使用以下快捷键进行代码格式化。ggG#全部格式化#对当前行格式化(缩进):[num]#对当前行包括以下的num行格式化#选中格式化ctrlv#转到可视模式选中代码#将选中的代码格式化七、修改二进制文件也可以使用GDB修改二进制文件在文章《使用GDB(二)调试程序常用命令》中有介绍。两种方式各有优势看需要选用。# 打开要修改的二进制文件vim-bexe-file# 将文件内容转成16进制且每行显示16个字节:%!xxd# 每行16个字节不好查阅我一般会让每行显示4个字节:%!xxd-c4# 开始对文件修改# 修改完以后将文件转回原来的格式然后保存退出:%!xxd-r:wq八、大小写转换命令模式下的gu是将目标转为小写gU将目标转为大写具体的用法看下面详细总结。# 一个单词大小写转换guw/gUw# 按行大小写转换gu1/gU1# 光标所在行及往下1行3gu/3gU# 光标所在行及往下3行# 整个文件大小写转换ggguG/gggUG# 选中的内容大小写转换ctrl v选中要转换的内容 gu/gU
返回列表