vim插件

  2021-8-14 


CLion和SoureLight都蛮贵的,所以直接在vim写代码了,用了一些插件

下面的快捷键都是我设置的,可以在~/.vimrc修改

操作模式

normal模式

insert模式(按i进入)

visual模式(按v进入),可视化模式,主要是为了方便选取文本

leader模式(默认\,可自定义)

指令模式(输入进入)

vim粘贴会自动缩进,需要:set paste开启paste模式禁止缩进,:set nopaste取消

常见基本操作

normal模式下:u(undo回退),可以按多个u一直回退

向前跳单词:w

先后跳单词:b

重做:redoctrl+r (undo多了的时候要redo)

基本命令:https://www.huaweicloud.com/articles/12650466.html

查找与替换:

:/<str>n:下一个,N上一个

:%s/word1/word2/g:在全局(%),将word1替换(g)成word2

:5,12s/word1/word2/g:在5~12行(5,12),将word1替换(g)成word2

:.,+2s/word1/word2/g在当前行,与接下来两行+2(.,+2),将word1替换(g)成word2

格式为:

:{作用范围}s/{目标}/{替换}/{替换标志}

更多替换见:https://www.jianshu.com/p/b3b2f04c1897

复制nyy/yy、剪切、粘贴phttps://www.cnblogs.com/wojiaowoen/p/6110783.html

跳转操作:

指令 description
:nnggnG 跳转到第n行
ctrl+o 跳转到光标上一个位置
G 跳到文本的最后一行
gg 跳到第一行的第一个字符
0 跳转到当前行的第一个字符
$ 跳转到当前行的最后一个字符

tab操作:

指令 快捷键 description
:tabp <leader>1 上一个tab
:tabn <leader>2 下一个tab
:tabnew <leader>] 新建tab
:x 关闭tab

以后别q!了,很不安全,直接q,只有决定放弃修改才q!

分屏操作:

分屏操作的格式都是ctrl+w <command>

指令 description
vim -On\on 启动vim的时候,将屏幕分为n个部分,O垂直,o水平
:vsp/sp filename 垂直(vsp)/水平(sp)分屏打开一个新文件(vsp是vsplit的缩写)
ctrl+w v/s 将当前打开的文件进行垂直(v)/水平(s)分割
ctrl+w w 顺时针在分屏间切换
ctrl+w h/j/k/l 分别向左、下、上、右4个方向切换
ctrl+w c 关闭当前操作的分屏
ctrl+w +/- 增加/减少当前屏幕的高度
ctrl+w = 设置所有的分屏幕都有相同的高度

https://vimjc.com/vim-split-window.html

只读文件时候强制保存::w !sudo tee %

按键映射

在vimrc中通过map进行快捷键映射

map <leader>快捷键 :原指令

https://ixyzero.com/blog/archives/2305.html

nmap(normal模式映射)、imap(insert模式映射)、vmap(visual模式映射)

noremap:非递归映射(nnoremap、inoremap、vnoremap)

不带n、i、v前缀则代表通用

快捷键用<>包起来,比如<C-A>代表ctrl+a

我设置的常用映射【目前都用不了!】:

指令 decip.
ctrl+a 全文复制(normal模式;先要set clipboard=unnamed
crtl+c 复制(normal)
crtl+v 粘贴(normal)
ctrl+s 保存文件(normal模式、insert模式)
ctrl+a 跳转行首(insert)
ctrl+e 跳转行尾(insert)

leader模式

只用快捷键很麻烦,所以产生了leader模式,可以自己定义快捷指令

vim默认的leader是\,输入\即进入leader模式,就可以使用leader模式的快捷键了

可以通过let mapleader=","修改,比如这里修改成了,

注意:进入leader模式是在普通模式下进入!而不是在:命令模式下!!

leader模式映射只需要在map后加一个<leader>,比如:noremap <leader>file :<C-U><C-R>=printf("Leaderf file %s", "")<CR><CR>

plug管理

vim_plug

以下为plug

https://github.com/Yggdroot/LeaderF

指令 快捷键 description
LeaderfFile <leader>file 搜索当前目录下的文件
LeaderfFunction <leader>ff 搜索当前文件的函数
LeaderfBuffer <leader>b 搜索当前的Buffer
LeaderfMru <leader>m 搜索最近使用过的文件
LeaderfLine <leader>l 搜索当前文件中有的某个单词
ctrl+j/k 在候选框打开模式下,上下移动选项

https://github.com/junegunn/fzf

universal ctags

这个先不用管,装就完了,后面YCL等很多插件都依赖ctags

用apt装,apt install universal ctags

ctags:自动跳转功能

ctags(universal ctags):ctags 的作用是扫描工程中的代码,为代码中定义的函数、变量生成一份 tags 数据库文件,然后我们用 vim 浏览代码的的时候,当光标移动到某个函数或者变量上,只要按下 Ctrl + ] 组合按键,就会自动跳转到这个函数或者变量定义地方。

NERDTree

目录树,类似于Finder

https://github.com/preservim/nerdtree

进入当前目录的树形界面,通过小键盘”上下”键,能移动选中的目录或文件。

目录前面有”+”号,按Enter会展开目录,文件前面是”-“号,按Enter会在右侧窗口展现该文件的内容,并光标的焦点focus右侧。

光标focus左侧树形窗口,按弹出NERDTree的帮助,再次按关闭帮助显示。输入:q回车,关闭光标所在窗口。

:NERDTreeToggle 快捷键 <C+n>

当focus在目录树的时候,可以按下面按键可以执行命令

?: 快速帮助文档

o: 打开一个目录或者打开文件,创建的是 buffer,也可以用来打开书签

go: 打开一个文件,但是光标仍然留在 NERDTree,创建的是 buffer

t: 打开一个文件,创建的是Tab(而不是水平切分),对书签同样生效

T: 打开一个文件,但是光标仍然留在 NERDTree,创建的是 Tab,对书签同样生效

i: 水平分割创建文件的窗口,创建的是 buffer

gi: 水平分割创建文件的窗口,但是光标仍然留在 NERDTree

s: 垂直分割创建文件的窗口,创建的是 buffer

gs: 和 gi,go 类似

x: 收起当前打开的目录

X: 收起所有打开的目录

e: 以文件管理的方式打开选中的目录

D: 删除书签

我的自定义快捷键:

指令 快捷键 description
NERDTreeFocus <leader>t 聚焦目录树
NERDTreeToggle ctrl+t 打开/关闭目录树
NERDTreeFind ctrl+f 打开目录树并定位到当前文件

vim-autoFormat

格式化代码

https://github.com/vim-autoformat/vim-autoformat

https://blog.csdn.net/Demorngel/article/details/69053613

语言格式化工具装了clang-format、astyle

:Autoformat 快捷键:F5

auto-pairs

在输入/删除左括号时,能自动补上/删除右括号

jiangmiao/auto-pairs

vim-airline

状态栏

https://github.com/vim-airline/vim-airline

YCM

YCM需要前置安装一些组件,然后再在.vimrc里配置

vim_plug安装YCM的方法:https://blog.csdn.net/wycgi/article/details/88372516

sudo apt install build-essential cmake python3-dev

cd .vim/plugged/YouCompleteMe/

python3 ./install.py —all

安装好后,要将.ycm_extra_conf.py放到vimrc的let g:ycm_global_ycm_extra_conf指定的位置

YCM官方文档,里面有一些常用命令,以后用到可以自己设快捷键:https://github.com/ycm-core/YouCompleteMe#linux-64-bit

我定义的快捷键:

快捷键 description
ctrl+d 跳转到定义/声明处
ctrl+i 跳转到实现处
ctrl+o 跳转到光标上一个位置(非YCM功能,但和跳转定义结合非常常用!)
ctrl+t 显示类型
<leader>doc 显示doc

关于ycm颜色配置的可选项:https://siatwe.wordpress.com/2018/03/23/vim-ctermfg-and-ctermbg-color-values/


且听风吟