VIM杂记(一)

写在前面

每次都觉得我的vim走上正轨了

three months later…

卧槽 这什么bug?这个插件怎么用来着?那个命令怎么写来着?

three days later…

“我又好了!”

为了再次避免这种情况,打算把每次学到东西记录下来。查博客总比查百度高效一些。由于只是记录当前学到的东西,
又因为认识的片面性,
所以可能会有错误,反正后面发现是错误了,再在后续的杂记里更正就是了。

1.1

关于Vundle

使用Vundle插件进行Vim插件的统一管理,包括安装、卸载等功能。 一般单独开一个文件.vimrc.bundles列出所要加载的插件,在.vimrc里需要载入该文件。 在.vimrc.bundles中列出所需插件之前,需要先将Vundle的代码包加入vim的运行时路径:

1
set rtp+=~/.vim/bundle/Vundle.vim/

其中rtp应该是runtime path的意思,vim有自己的运行时来解析执行vimscript脚本,想要调用预先定义在文件中的函数,自然需要将这些文件地址加入运行时地址列表。我猜后面其他插件的文件路径都是由Vundle负责加入rtp的。

在下面这样的代码块中加入所需要使用的插件

1
2
3
4
5
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'xxx/xxxxx'
...
call vundle#end()

注意Vundle必须是第一个列入的插件。call是vimscript中的函数调用,#类似python或java中的.。如果不打算使用某插件可以注释掉对应的Plugin那一行,而不需要卸载。

安装插件

.vimrc.bundles加入Plugin xxx/xxxxxxx,保存文件后在vim下执行

1
:PluginInstall

卸载插件

.vimrc.bundles注释Plugin xxx/xxxxxxx,保存文件后在vim下执行

1
:PluginClean

1.2

  • ultisnips是一个snippets的引擎,vim-snippets里面有很多常用的脚本。这两个插件需要配合使用。
  • 发现自己的ultisnips有bug,然后我重装了,然后出现更大的bug,查了半天是github上的最新版本的代码支持python3了,但是我的vim只支持python2, 于是手动下了github上之前版本的代码放入.vim/Bundle文件夹。 但是还是有bug,发现我的Enter键没法回车了,查了半天bug,甚至阅读了ultisnips的部分代码(主要是./autoload/UltiSnips/map_keys.vim./autoload/UltiSnips.vim),经过各种调试发现是,somehow,我的vim在select模式下<c-m><cr>是捆绑的,我配置了用<c-m>来展开,结果就导致了<cr>也映射到了展开snippets的命令上。。。TAT。最后试了几个键发现c-l是好用的,也顺手。
  • 另外,我观察到在打开vim的瞬间,ultisnips会先跑两个样例,如果这两个样例有问题,就会在打开vim的时候报错,一般情况下用户是察觉不到这个过程的。
  • incinccmainnfori都是c语言中常用的snippets
  • 在我的配置中<c-l>可以进行展开或者跳到下一个placeholder,<c-k>回到上一个placeholder。
  • :UltiSnipsEdit可以查看对应当前编辑文件的snippet配置文件

1.3

在vim插件的代码中可以通过verbose map **echo进行调试。:map:snoremap等可以查看对应模式下的按键映射。关于按键映射的知识点,可参考https://blog.csdn.net/u012291393/article/details/78650512

1.4

多行缩进

1
2
:10,20>
:12,13<

跑Python代码

1
:py import sys; print(sys.version)

多行注释: ctrl+v进入列编辑模式,在编辑模式中,在行间上下移动光标,选择需要编辑哪些行的对应的列,之后使用I(大写)进入列插入。 插入注释符,按Esc退出列编辑模式即可实现多行注释。

删除注释:按v,进入visual模式,横向选中列的个数(如”/ /“注释符号,需要选中两列),再按ctrl+v 进入列编辑模式,向下或向上移动光标,选中注释部分,然后按d, 就会删除注释符号。