Vim (简体中文)

From ArchWiki
Jump to: navigation, search
翻译状态: 本文是英文页面 Vim翻译,最后翻译时间:2016-3-3,点击这里可以查看翻译后英文页面的改动。

Vim终端文本编辑器Vi的加强版本,加入了更多特性来帮助编辑源代码。Vim的一部分增强功能包括文件比较(vimdiff),语法高亮,全面的帮助系统,本地脚本(vimscript),和便于选择的可视化模式。

Vim专注于键盘操作,它并不是像nano或pico一样的简单编辑器。Vim需要花时间来学习,并值得花上更多的时间来掌握。

安装

安装下面两个软件包中的一个:

  • vim — 提供Python 2/3, Lua, Ruby 和 Perl 解释器支持,但没有 GTK/X 支持
  • gvim — 除了提供和vim一样的功能外,还提供了图像界面。
注意:
  • vim包不包含 Xorg 支持。因此Vim缺失了 +clipboard 特性,Vim也就不能够同X11的 primaryclipboard 剪切板交互。gvim包在全面支持图形界面的同时提供了命令行版本带+clipboard的Vim。
  • 非官方源herecura也提供大量Vim/gVim变种版本: vim-cli vim-gvim-common vim-gvim-gtk vim-gvim-qt vim-rtvim-tiny

用法

要学习一些基本的Vim使用操作,可以运行vimtutor(控制台版本)或gvimtutor(图形界面版本)阅读Vim教程。

Vim包含了一个广泛的帮助系统,可以用:h subject命令来访问。subject主题可以是命令,配置选项,热键绑定,插件等。使用:h命令(不带任何subject)来获取帮助系统的相关信息以及在不同的主题之间切换。

配置

用户配置文件为~/.vimrc,相关的文件位于~/.vim/;全局配置文件为/etc/vimrc,相关的文件位于/usr/share/vim/

如果需要常用的功能(如语法高亮、打开文件时回到上一次的光标位置等),将配置文件范例加到/etc/vimrc中:

/etc/vimrc/
...
runtime! vimrc_example.vim

语法高亮

启用语法高亮(Vim支持许多语言的语法高亮):

:filetype plugin on
:syntax on


自动换行显示

wrap默认是开启的,这会使Vim在一行文本的长度超过窗口宽度时,自动将放不下的文本显示到下一行。wrap只会影响文本的显示,文本本身不会被改变。

自动换行显示一般在该行窗口能容纳下的最后一个字符发生,即使刚好是在一个单词的中间。更为智能的自动换行显示可以用linebreak来控制。当用set linebreak开启时,自动换行发生在字符串选项breakat中列出来的字符之后。默认情况下,breakat包含空格和一些标点符号(参考:help breakat)。

被换行的字符一般在下一行的开头开始显示,没有任何相应的缩进。breakindent 指示Vim在换行时将缩进考虑在内,因而新行将与原本要显示的文本有相同的缩进。breakindent行为可以用breakindentopt选项来调整,比如说在Python文件中,新行将在原本缩进的基础上再缩进4个空格(更多细节参考:help breakindentopt):

autocmd FileType python set breakindentopt=shift:4

使用鼠标

Vim可以使用鼠标,但只在一些终端上起作用(Linux上的xterm和带有gpm的Linux控制台,更多细节参阅Console mouse support):

开启这个功能,将下面这行代码加入~/.vimrc中:

set mouse=a
注意:
  • 这个方法在使用SSH的PuTTY中同样适用。
  • 在PuTTY中,通常的高亮/复制行为有所不同,因为在使用鼠标时,Vim会进入可视模式。为了用能鼠标选中文本,需要同时按住Shift键。

跨行移动光标

默认情况下,在行首按或者在行尾按不能将光标移动至上一行或下一行。

如要改变默认行为,将set whichwrap=b,s,<,>,[,]加至你的~/.vimrc文件中。

文件合并

Vim自带了一个文件差异编辑器(一个用来显示多个文件之间的差异还可以方便的将其合并的程序)。用vimdiff来启动它——指定几对文件即可:vimdiff file1 file2。以下是vimdiff-specific命令的清单。

行为 快捷键
下一差异 ]c
上一差异 [c
差异导入 do
差异导出 dp
打开折叠 zo
关闭折叠 zc
重新扫描文件 :diffupdate
窗口切换 Ctrl+w+w

技巧和建议

显示行号

使用:set number来显示行号。默认显示绝对行号,可用:set relativenumber开启相对行号。

使用:行号 or 行号gg跳转到指定行号。跳转都记录在一个跳转列表中,更多细节参考:h jump-motions

拼写检查

Vim有拼写检查的功能,用下面的命令开启:

set spell

Vim默认只安装了英语字典。其他的字典可在官方软件仓库通过搜索vim-spell而寻得。检查可用语言包:

# pacman -Ss vim-spell

额外的字典可以从Vim's FTP archive获取。把下载的字典文件存入~/.vim/spell/,并用 :setlocal spell spelllang=en_us (将en_us 换成所需的字典的名称)开启。

行为 快捷键
下一个拼写错误 ]s
上一个拼写错误 [s
拼写纠正建议 z=
将单词添加到用户正确字典 zg
将单词添加到内部正确字典 zG
将单词添加到用户错误字典 zw
将单词添加到内部正确字典 zW
重新进行拼写检查 :spellr
小贴士:
  • 如果需要针对两种语言进行拼写检察(例如英语与德语),在~/.vimrc/etc/vimrc中添加set spelllang=en,de并重启Vim即可。
  • 使用用于进行文件类型检测的FileType插件和自建规则,可以对任意文件类型开启拼写检查。例如,要开启对扩展名为.txt的文件的拼写检查,创建文件/usr/share/vim/vimfiles/ftdetect/plaintext.vim,添加内容autocmd BufRead,BufNewFile *.txt setfiletype plaintext,然后在~/.vimrc/etc/vimrc添加autocmd FileType plaintext setlocal spell spelllang=en_us,重启vim即可。
  • 如果想只对LaTeX(或TeX)文档起用拼写检查,在~/.vimrc/etc/vimrc添加autocmd FileType tex setlocal spell spelllang=en_us,重启Vim即可。至于非英语语言,替换上述语句中的en_us为相应语言代码即可。

记录光标位置

Vim可以记录上次打开某一文件时的光标位置,并在下次打开同一文件时将光标移动到该位置。要开启该功能,在配置文件~/.vimrc中加入以下内容:

augroup resCur
  autocmd!
  autocmd BufReadPost * call setpos(".", getpos("'\""))
augroup END

另见:Vim Wiki上的相关内容

用 vim 替代 vi

创建一个alias,如下:

alias vi=vim

或者,如果你想输入sudo vi并得到vim, 安装vi-vim-symlinkAUR,它将移除vi并用一个符号链接vim代替。

DOS/Windows回车问题

打开MS-DOS或Windows下创建的文本文件时,经常会在每行行末出现一个^M。这是因为Linux使用Unix风格的换行,用一个换行符(LF)来表示一行的结束,但在Windows、MS-DOS中使用一个回车符(CR)接一个换行符(LF)来表示,因而回车符就显示为^M

可使用下面的命令删除文件中的回车符:

:%s/^M//g

注意,^代表控制字符。输入^M的方法是按下Ctrl+v,Ctrl+m

另一个解决方法是,安装 dos2unix,然后执行 dos2unix <文件名>

gVim窗口底部的空格

如果窗口管理器设置为忽略窗口大小渲染窗口,gVim会将空白区域填充为GTK主题背景色,看起来会比较难看。

解决方案是调整gVim在窗口底部保留的空间大小。将下面的代码加入 ~/.vimrc中:

set guiheadroom=0
注意: 如果将其设为0,将无法看到底部的水平滚动条。

插件

使用插件来提高效率,它能改变Vim的界面,添加新命令,代码自动补全,整合其他程序和工具,添加其他编程语言等功能。

小贴士: 参阅Vim Awesome获取一些热门插件

安装

使用插件管理器

插件管理器使安装和管理插件有相似的方法,而与在何种平台上运行Vim无关。它是一个像包管理器一样的用来管理其它Vim插件的插件。

  • Vundle是现在最流行的Vim插件管理器。
  • Vim-plug是一个极简的Vim插件管理器,有许多的特性,比如按需插件加载和并行升级。
  • pathogen.vim是一个简单的用于管理Vim的运行时路径的插件。

从Arch软件库下载

vim-plugins分类下有许多插件。 使用pacman -Sg vim-plugins来列出可用的插件,然后你可用pacman安装


pacman -Ss vim-plugins

cscope

Cscope是一个工程浏览工具。通过导航到一个词/符号/函数并通过快捷键调用cscope,能快速找到:函数调用及函数定义等。

安装cscope包。

拷贝cscope预设文件,该文件会被Vim自动读为:

mkdir -p ~/.vim/plugin
wget -P ~/.vim/plugin http://cscope.sourceforge.net/cscope_maps.vim 
注意: 在Vim的7.x版本中,你可能需要在~/.vim/plugin/cscope_maps.vim中取消下列行的注释来启用cscope快捷键:
set timeoutlen=4000
set ttimeout

创建一个文件,该文件包含了你希望cscope索引的文件的清单(cscope可以操作很多语言,下面的例子用于寻找C++中的.c.cpp.h文件):

cd /path/to/projectfolder/
find . -type f -print | grep -E '\.(c(pp)?|h)$' > cscope.files

创建cscope将读取的数据文件:

cscope -bq
注意: 必须从当前路径浏览工程文件,也可以设置$CSCOPE_DB变量指向cscope.out文件,并导出。

默认快捷键:

 Ctrl-\ and
      c: Find functions calling this function
      d: Find functions called by this function
      e: Find this egrep pattern
      f: Find this file
      g: Find this definition
      i: Find files #including this file
      s: Find this C symbol
      t: Find assignments to

可随意改变这些快捷键。

Taglist

Taglist提供源码文件的结构概览,使你能更高效的浏览不同语言的源文件。

安装vim-taglist包。

将下列设置添入文件~/.vimrc:

let Tlist_Compact_Format = 1
let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Close_On_Select = 1
nnoremap <C-l> :TlistToggle<CR>

参阅

官方资源

教程

视频

游戏

配置范例

颜色方案