Vim介绍

12 May 2014

综述

vim是一个功能非常强大, 可以高度定制的编辑器. vim的操作方式由于历史的原因, 和绝大多数windows上的编辑器迥异, 并且会有正常/插入多种编辑模式, 不符合用户习惯, 从而初接触会觉得很难. 可惜涉及到服务端开发的同学常常需要在终端上编辑文件, 而vim又是服务器标配编辑器, 这时候熟悉vim的基本操作, 了解vim的使用技巧, 有助于我们提高工作效率.

基本操作

基本操作单看手册是没办法记住的, 只能通过反复的使用形成手指上的条件反射. 建议可以从vimtutor这个教学程序开始熟悉. 这里只列一些补偿提到, 但是实际上很常用的操作:

正常模式下

插入模式下

快速从正常模式作简单编辑

正常模式/插入模式快速切换: vim最被emacs用户吐槽的就是其区分正常/插入模式了, 不过个人觉得vim提供的正常模式极大的方便了阅读代码的操作, 也不用担心误操作导致不小心在代码中某个地方留下了奇奇怪怪的字符串. 在编辑文件的时候始终保持插入模式, 不要每改一处就切换一次模式, 造成了诸多无效的操作.

另外, 在需要粘贴外部内容的时候, 常常由于自动缩进, 会把格式搞乱. 可以通过使用:set paste命令来临时屏蔽自动缩进.

保存退出

vim经常需要临时编辑一些配置文件保存退出, 这种频繁编辑保存的时候会觉得:wq命令敲起来指尖上的动作过多, 感觉很繁琐. 其实可以用ZZ命令来实现同样的功能, 但是操作感觉上简单不少.

也可以打开自动写的选项:set autowrite, 这样编辑一个文件时Ctrl-Z切换到后台时就自动保存下来了, 这是可以在shell里面测试编辑的配置是否正确, 如不OK呼出后台的vim程序继续编辑, 从而避免了反复“打开-保存-关闭”的操作.

强大的列操作

因为绝大部分编辑器都是面向行操作的, 在对于类csv格式文件, 要对多列批量操作就比较麻烦, vim提供了C-V的“块选择”模式, 从而帮助我们把文本内容像积木一样编辑组合.

应用比较多的场景:

  1. 多行注释: C-V -> 第一列选择多行 -> I (插入) -> 行注释标记
  2. 列选择移动: C-V -> 选择制定列全部内容 -> x (剪切) -〉移动到目标列起始位置 -> p (粘贴)

多标签和分屏操作:

绝大部分windows下的编辑器都是支持多标签同事编辑多个文件的, vim自然也提供类似的功能 :tabe FileName 打开一个新标签页编辑FileName文件 gt 在多个打开的文件标签页间跳转

此外vim还提供了同一视图下多窗口操作, 这样同时对照编辑两个文件, 减少跳转的次数 Ctrl+W, Ctrl+V 垂直切分出一个窗口 Ctrl+W, Ctrl+W 在打开的窗口中跳转

用户配置和插件的使用

个人不推荐对vim做过多的深度配置, 加载过多的插件, 主要原因是会使用户习惯于自己配置出来的vim环境以及相关的插件快捷键, 从而反而忘记了vim内置的操作方式, 一旦换一台机器使用时会很不习惯; 此外vim本身设计风格也是符合unix工具小而精的思路, 即一个工具专注做好一件事情, 把多种工具组合起来使用, 而不需要把vim本身打造成一个复杂的IDE.

vim配置文件是~/.vimrc. 一般而言vimrc_example.vim已经足够使用, 拷贝一份即可:r $VIMRUNTIME/vimrc_example.vim

vim插件目录~/.vim. 功能细分:

推荐插件:

自定义命令

除了依赖插件外, 我们还可以根据文件扩展名做不同的设定, 从而打造自己的编辑调试环境. 例如:

autocmd FileType php call SetupPHP()
function SetupPHP()
     nmap <F5> :!php %<CR> " 执行当前脚本
endfunction

之后当我们编辑一个php脚本时, 只要在正常模式下按就可以直接执行该脚本了, 是不是很方便呢.

HOME