Vim (简体中文)

Vim是一个终端文本编辑器。作为Vi的一个扩展版本,它具有以下附加功能:语法突出显示,全面的帮助系统,本地脚本(vimscript),文本选择的可视模式和文件比较(vimdiff)。

翻译状态:本文是 Vim翻译。上次翻译日期:2020-11-17。如果英文版本有所更改,则您可以帮助同步翻译。

安装

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

  • vim — 提供Python 2/3, Lua, Ruby 和 Perl 解释器支持,但没有 GTK/X 支持
  • gvim — 除了提供和vim一样的功能外,还提供GTK/X支持。
注意:
  • vim包不包含 Xorg 支持。具体而言,Vim缺失 +clipboard 特性,因而不能够使用 primaryclipboard 剪贴板gvim同时提供命令行版本带+clipboard的Vim。
  • 非官方源herecura也提供数个Vim/gVim变种版本: vim-cli vim-gvim-common vim-gvim-gtk vim-gvim-qt vim-rtvim-tiny

用法

有关如何使用Vim的基本概述,请遵循vim教程运行vimtutor(控制台版本)或gvimtutor(图形界面版本)。

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

配置

Vim的用户特定配置文件位于主目录~/.vimrc,当前用户的Vim文件位于;全局配置文件为,全局Vim文件位于。

剪贴板

Vim命令如 :yank 或 使用未命名寄存器,默认情况下对应于 寄存器。如果 功能可用, 寄存器发送到X中的 缓冲区。

要更改默认寄存器,您可以 :set clipboard=unnamedplus 使用 寄存器。 寄存器对应于X中的 缓冲区。

欲见更多信息,请参见 。

语法高亮

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

 :filetype plugin on  :syntax on

自动换行显示

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

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

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

autocmd FileType python set breakindentopt=shift:4

使用鼠标

Vim可以使用鼠标,但只在某些终端上起作用:

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

set mouse=a
选项在  中设置。

跨行移动光标

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

如要改变默认行为,将加至你的~/.vimrc文件中。

文件合并

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

行为快捷键
下一差异
上一差异
差异导入
差异导出dp
打开折叠
关闭折叠
重新扫描文件
窗口切换

技巧和建议

显示行号

使用来显示行号。默认显示绝对行号,可用:set relativenumber开启相对行号。当两种显示方式同时开启时,当前行显示绝对行号,其它行显示相对行号。

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

拼写检查

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

set spell

Vim默认只安装了英语字典。更多字典可以通过搜索vim-spell在官方软件仓库中找到。其他字典可以在Vim的FTP archive中找到。把下载的字典文件存入中,并使用以下命令启用::setlocal spell spelllang=en_us(将 换成所需的字典的名称)。

行为快捷键
下一个拼写错误
上一个拼写错误
拼写纠正建议
拼写正确,添加到用户正确字典zg
在会话中当作正确拼写
拼写错误,添加到用户错误字典
在会话中当作正确拼写
重新进行拼写检查

记录光标位置

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

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

用 vim 替代 vi

创建一个alias,如下:

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

DOS/Windows回车问题

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

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

 :%s/^M//g

注意,代表控制字符。输入的方法是按下。

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

gVim窗口底部的空格

如果窗口管理器设置为忽略窗口大小提示,gVim会将非功能区域填充为GTK主题背景色。

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

set guiheadroom=0

插件

向Vim添加插件可以提高您的效率。 插件可以改变Vim的界面,添加新命令,代码完成支持,使用Vim集成其他程序和实用程序,添加对其他语言的支持等等。

使用内置包管理器

Vim 8增加了加载原生第三方插件的可能性。可以通过在〜/.vim/pack/foo中存储第三方软件包来使用此功能。

使用插件管理器

插件管理器允许以类似的方式安装和管理插件,而与在何种平台上运行Vim无关。它本身是一个插件,其功能是作为其他Vim插件包管理器。

  • Vundle是现在最流行的Vim插件管理器。
  • Vim-plug是一个极简的Vim插件管理器,有许多的特性,比如按需插件加载和并行升级。
  • pathogen.vim是一个简单的用于管理Vim的runtimepath的插件。
  • Dein.vim 是一个替代 NeoBundle 的插件管理器,可以在这里找到 vim-dein-gitAUR.

使用Arch软件库

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

cscope

Cscope是用于浏览项目的工具。 通过导航到字/符号/函数并调用cscope(通常使用快捷键),它可以找到:调用函数的函数,函数定义等等。

安装包。

将cscope默认文件复制到Vim将自动读取的位置:

mkdir -p ~/.vim/plugin
wget -P ~/.vim/plugin http://cscope.sourceforge.net/cscope_maps.vim 

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

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

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

cscope -bq

默认快捷键:

 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提供源码文件的结构概览,使你能更高效的浏览不同语言的源文件。

安装包。

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

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

常见问题

gVim运行缓慢

GTK 3 GUI 下vim可能比GTK 2下运行缓慢(参阅 FS#51366)。可安装来避免该问题。

参阅

官方资源

教程

视频

游戏

配置范例

颜色方案

This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.