将你的 vim 编辑器变成生产力强力工具

这 20 多个有用的命令将增强你使用 Vim 编辑器的体验。
307 位读者喜欢这篇内容。
a checklist for a team

Opensource.com

编者按:标题和文章最初指的是 “vi 编辑器”。现已更新为编辑器的正确名称:“vim”。

Vim 是一款多功能且强大的编辑器,包含丰富的强大命令,使其成为许多用户的热门选择。本文专门介绍 Vim 中默认未启用但仍然有用的命令。此处推荐的命令预计将在 Vim 配置文件中设置。虽然可以从每个 Vim 会话单独启用命令,但本文的目的是创建一个开箱即用的高效生产力环境。

开始之前

此处讨论的命令或配置会放入用户主目录中的 Vim 启动配置文件 vimrc 中。按照以下说明在 vimrc 中设置命令

(注意:vimrc 文件也用于 Linux 中的系统范围配置,例如 /etc/vimrc/etc/vim/vimrc。在本文中,我们只考虑用户特定的 vimrc,它位于用户主文件夹中。)

在 Linux 中

  • 使用 vi $HOME/.vimrc 打开文件
  • 在本文末尾的速查表中键入或复制/粘贴命令
  • 保存并关闭 (:wq)

在 Windows 中

  • 首先,安装 gvim
  • 打开 gvim
  • 点击 编辑 --> 启动设置,这将打开 _vimrc 文件
  • 在本文末尾的速查表中键入或复制/粘贴命令
  • 点击 文件 --> 保存

让我们深入研究各个 vi 生产力命令。这些命令分为以下几类

  1. 缩进和制表符
  2. 显示和格式
  3. 搜索
  4. 浏览和滚动
  5. 拼写检查
  6. 杂项

1. 缩进和制表符

自动对齐文件中行的缩进

set autoindent

智能缩进使用代码语法和风格进行对齐

set smartindent

提示:Vim 具有语言感知能力,并提供基于文件中使用的编程语言的默认设置,从而高效工作。有许多默认配置命令,包括 axs cindentcinoptionsindentexpr 等,此处不再赘述。syn 是一个有用的命令,用于显示或设置文件语法。

设置制表符显示的空格数

set tabstop=4

设置“移位操作”(例如 ‘>>’ 或 ‘<<’)显示的空格数

set shiftwidth=4

如果你更喜欢使用空格而不是制表符,则在按下 Tab 键时,此选项会插入空格。这可能会给依赖制表符而不是空格的语言(如 Python)带来问题。在这种情况下,你可以根据文件类型设置此选项(参见 autocmd)。

set expandtab

2. 显示和格式

显示行号

set number

vi set number.png

当文本超出最大行宽时换行

set textwidth=80

基于右侧列数换行文本

set wrapmargin=2

在文件中遍历时,识别打开和关闭的大括号位置

set showmatch

vi set showmatch

3. 搜索

高亮显示文件中搜索到的术语

set hlsearch

set hlsearch

在你键入时执行增量搜索

set incsearch

vi set incsearch

忽略大小写搜索(许多用户不喜欢使用此命令;仅在你认为它有用时设置)

set ignorecase

ignorecasesmartcase 都设置,且搜索模式包含大写字母时,搜索时不考虑 ignorecase

set smartcase

例如,如果文件包含

test

Test

ignorecasesmartcase 都设置时,搜索 “test” 会查找并高亮显示两者

test

Test

搜索 “Test” 只高亮显示或查找第二行

test

Test

4. 浏览和滚动

为了更好的视觉体验,你可能更喜欢将光标放在中间位置而不是第一行。以下选项将光标位置设置为第 5 行。

set scrolloff=5

示例

第一张图是 scrolloff=0,第二张图是 scrolloff=5。                                                                                                                                                                         

vi set scrolloff.jpg

提示:如果你也设置了 nowrap,则 set sidescrolloff 非常有用。

在 Vim 屏幕底部显示永久状态栏,显示文件名、行号、列号等。

set laststatus=2

vi set laststatus.png

5. 拼写检查

Vim 有一个内置的拼写检查器,对于文本编辑和编码都非常有用。Vim 会识别文件类型,并且只检查代码中注释的拼写。使用以下命令为英语启用拼写检查

set spell spelllang=en_us

6. 杂项

禁用创建备份文件:当此选项开启时,Vim 会创建上一次编辑的备份。如果你不需要此功能,请如下所示禁用它。备份文件以波浪号 (~) 结尾命名。

set nobackup

禁用创建交换文件:当此选项开启时,Vim 会创建一个交换文件,该文件在你开始编辑文件之前一直存在。交换文件用于在发生崩溃或使用冲突时恢复文件。交换文件是隐藏文件,以 . 开头,以 .swp 结尾。

set noswapfile

假设你需要在同一个 Vim 会话中编辑多个文件并在它们之间切换。一个不太明显的烦人功能是,工作目录是你打开第一个文件的目录。通常,将工作目录自动切换到正在编辑的文件所在的目录很有用。要启用此选项

set autochdir

Vim 维护一个撤销历史记录,允许你撤销更改。默认情况下,此历史记录仅在文件关闭之前有效。Vim 包含一个巧妙的功能,即使在文件关闭后也能维护撤销历史记录,这意味着即使在文件保存、关闭和重新打开后,你也可以撤销更改。撤销文件是一个隐藏文件,以 .un~ 扩展名保存。

set undofile

设置声音警报铃声(当您尝试滚动到行尾之外时发出警告声音)

set errorbells

如果你喜欢,可以设置视觉警报铃声

set visualbell

奖励

Vim 提供长格式和短格式命令。两种格式都可以用于设置或取消设置配置。

autoindent 命令的长格式

set autoindent

autoindent 命令的短格式

set ai

要查看命令的当前配置设置而不更改其当前值,请在末尾使用 ?

set autoindent?

要取消设置或关闭命令,大多数命令都使用 no 作为前缀

set noautoindent

可以为一个文件设置命令,但不用于全局配置。要做到这一点,打开文件并键入 :,后跟 set 命令。此配置仅对当前文件编辑会话有效。

vi set command.png

有关命令的帮助

:help autoindent

vi commands help.jpg

注意:此处列出的命令已在 Linux (Vim 7.4 (2013 年 8 月 10 日)) 和 Windows (Vim 8.0 (2016 年 9 月 12 日)) 上测试过。

这些有用的命令肯定会增强你的 Vim 体验。你还推荐哪些命令?

速查表

将此命令列表复制/粘贴到你的 vimrc 文件中

" Indentation & Tabs

set autoindent

set smartindent

set tabstop=4

set shiftwidth=4

set expandtab

set smarttab

" Display & format

set number

set textwidth=80

set wrapmargin=2

set showmatch

" Search

set hlsearch

set incsearch

set ignorecase

set smartcase

" Browse & Scroll

set scrolloff=5

set laststatus=2

" Spell

set spell spelllang=en_us

" Miscellaneous

set nobackup

set noswapfile

set autochdir

set undofile

set visualbell

set errorbells
User profile image.
Girish 在印度的全球 IT 服务组织拥有超过 20 年的技术和软件经验。Girish 是 “I Got” 云平台的架构师,该平台旨在利用开源堆栈和现代架构模式(如微服务、容器化和多租户)提升金字塔底层。Girish 撰写关于开源和技术主题的文章。

5 条评论

“虽然 ‘vim’ 是较新版本 vi 编辑器的技术上正确的名称,但本文将其称为 ‘vi’。”

它不是“技术上正确的”,它是实际的程序。你使用的不是 vi,而是 vim。这是一个不同的程序,具有不同的代码、不同的功能,其基本前提是,在特定标志下,它是 vi 兼容的。它之于 vi,就像 Linux 之于 UNIX,或者你的汽车之于福特 T 型车。事实上,许多发行版中使用的 “vi” 程序实际上是 vim 编译并运行的,目的是尽可能与 vi 兼容。

而这一切的主要原因是 vi 不可扩展。因此,你无法将“你的 vi 编辑器”变成任何东西,因为 vi 编辑器不支持配置、脚本、模块、主题或此处描述的任何内容。

谢谢你的分享,我认为了解每个设置的作用非常重要,你解释得很好

你可能也会对 “vim-sensible” 插件感兴趣:https://github.com/tpope/vim-sensible

与其为整个编辑器配置缩进规则,有时按项目或按语言定义规则会更方便,而 EditorConfig 是其中一种方法:https://editorconfig.org/

关于 “... 依赖制表符而不是空格的 Python” 的一点说明。
Python 接受制表符和空格,尽管应该避免在代码块中混合使用它们。事实上,公认的建议 (PEP8,链接:https://pythonlang.cn/dev/peps/pep-0008/#tabs-or-spaces) 是仅使用空格。

哇,这些真的很有帮助!我可能现在就要转到 Vim 了....

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.