有活力的 VIM 作者: truesnow 发布于: 5年前 收录于: Linux 命令 139 0 摘要:VIM 编辑器教程 [TOC] > 原文:[Vim, with Vigor](http://linuxcommand.org/lc3_adv_vimvigor.php) vim 有三种模式: - 普通模式 - 编辑模式 - 命令模式 你可以在 *~/.bash_profile* 或 *~/.bashrc* 中添加别名: ```sh alias vi='vim' ``` 使用 vim 编辑器来代替 vi,作为默认的编辑器。 接着,先创建一个 *.vimrc* 配置文件: ```sh vi ~/.vimrc ``` 输入以下内容: ``` set nocompatible filetype plugin on ``` # 获取帮助 vim 有自带的帮助系统。在命令行直接输入 `vi`,然后输入 `:help`。 vim 支持 **多窗口**。这在编辑多个文件或查看帮助时很有用。 我们可以使用以下命令对窗口进行操作: ``` :split 创建一个新窗口 Ctrl-w Ctrl-w 切换窗口 Ctrl-w _ 放大当前窗口 Ctrl-w = 将窗口设置成等大小 :close 关闭当前窗口 :only 关闭其他所有窗口 ``` 退出帮助输入: ``` :q ``` 你也可以使用缩写方式进入帮助文档: ``` :h ``` 帮助页面有使用提示如下: ``` WHAT PREPEND EXAMPLE Normal mode command (nothing) :help x Visual mode command v_ :help v_u Insert mode command i_ :help i_ Command-line command : :help :quit Command-line editing c_ :help c_ Vim command argument - :help -r Option ' :help 'textwidth' Search for help: Type ":help word", then hit CTRL-D to see matching help entries for "word". ``` 以上告诉我们在特定上下文如何使用帮助。例如,查看普通模式下 `i` 的帮助文档: ``` :h i ``` 查看命令行模式下的帮助文档,加上 `:` 号,例如查看退出 `:quit` 的帮助文档: ``` :h :q ``` 和 shell 一样,vim 在命令行模式下也有命令历史功能。输入 `:` 后,我们可以使用上下箭头键调出历史命令。 > 本节帮助主题:`:split` `:close` `:only` `^w` # 创建一个脚本 `vi` 后输入新脚本文件名,得到一个新文件窗口: ``` vi fooscript ``` # 设置文件类型 目前为止 vi 不知道新创建文件的文件类型。如果文件名为 *fooscript.sh*,那么 vi 的文件类型插件会认为我们正在编辑一个 shell 脚本。我们可以通过以下命令查看当前文件类型是什么: ``` :set ft? ``` 当我们这样使用 `set` 时,会显示指定选项的当前值,这里是 ft(filetype 的缩写)选项的值。这时响应为: ``` filetype= ``` 表明文件类型未指定。我们可以通过以下命令来查看相关帮助: ``` :h :set :h 'ft' ``` 要查看所有选项,可输入: ``` :set ``` 我们想要文件设置为 shell 脚本,所以输入: ``` :set ft=sh ``` 然后,按 `i` 进入编辑模式,在文件中输入: ``` #!/bin/bash # Script to test editing with vim ``` 按下 Esc 键退出编辑模式,并保存文件: ``` :w ``` 现在,因有了第一行 shebang,文件类型插件会在文件加载时都将此文件识别为 shell 脚本。 # 使用 Shell 我们可以为每一种文件类型创建一个配置文件。通常在 *~/.vim/ftplugin* 目录下。首先,我们要创建此目录。 我们不需要退出 vim,我们可以在 vim 中发起一个 shell。只需输入: ``` :sh ``` 此时,会出现 shell 提示符,然后我们输入命令即可。 ``` mkdir -p ~/.vim/ftplugin ``` 使用完 shell 后,退出 shell 回到 vim: ``` exit ``` 现在,目录创建出来了,我们可以创建配置文件。打开一个新文件: ``` :e ~/.vim/ftplugin/sh.vim ``` 文件名 *sh.vim* 必须。 > 帮助主题:`:sh` # Buffers 每个 vim 正在编辑的文件都会保存到一个 **buffer** 中。我们可以通过以下命令查看当前的 buffer 列表: ``` :ls ``` 有几种方法可在 buffer 之间切换: ``` :bn ``` `:bn` 是 `:bnext`(buffer next)的缩写,会在 buffer 列表中循环。与之相反,`:bp`(`:bprevious` 的缩写)向后在 buffer 列表中循环。我们也可以通过数字来切换: ``` :b 2 ``` 也可以使用文件名来切换: ``` :b fooscript ``` 添加以下命令到配置文件: ``` setlocal number ``` 该命令将在 shell 脚本每次加载时开启行号显示。注意我们使用 `setlocal` 而不是 `set`,这是因为 `set` 会将该选项应用到全局,而 `setlocal` 只会运用到当前 buffer。这可以预防编辑不同类型的文件时产生设置冲突。 我们也可以开启语法高亮: ``` syntax on ``` 或者关闭: ``` syntax off ``` 输入 `mS`,然后保存。 > 帮助主题:ls :buffers :bnext :bprevious :setlocal 'number' :syntax # 配色方案 如果开启了语法高亮(`:syn on`),vim 会运用当前的配色方案进行高亮。vim 有一系列的配色方案。查看当前的配色方案,输入: ``` :colo ``` 要查看当前的所有配色方案,输入 `:colo` 然后输入一个空格,再按 TAB 键,这会触发 vim 的自动完成功能,并显示列表中的第一个配色方案。继续使用 TAB 键,可以依次查看列表中的配色方案。 `desert` 配色方案看起来很适合 shell 脚本,将其加入到 *sh.vim* 配置文件中: ``` colorscheme desert ``` 注意我们使用了长格式 `colorscheme`,我们也可以使用缩写 `colo`,但一般在配置文件中都使用长格式名称,这样更清晰。 互联网上也有很多 vim 的配色方案。如果要使用,创建一个目录 *~/.vim/colors*,然后将配色方案下载到该目录。 > 帮助主题:`:colorscheme` # 标记和文件标记 vim 中有各种各样的方式在文档内移动。例如,跳转到文件第一行: ``` gg ``` 跳转到文件最后一行,输入: ``` G ``` vim 也支持 **标记** 文件的任意位置,并在随后唤起。为了演示该功能,跳转到文件第一行,然后输入: ``` ma ``` 然后跳转到文件末尾,输入: ``` mb ``` 这时,我们就设置了两个标记 a 和 b。要唤起该标记,使用单引号 `'` 加标记符,例如: ``` 'a ``` 这时,我们又回到了文件的第一行。 我们可以使用 **任意小写字母** 来做标记。还记得刚才在 *.vimrc* 和 `sh.vim` 输入的 `mS` 标记吗?这里使用了大写字母。 因为它们很特别,叫做 **文件标记**,vim 会在会话之间记住这些标记。我们将 *.vimrc* 标记为了 V,将 *sh.vim* 文件标记为了 S。如果我们输入: ``` 'V ``` vim 会立即跳转到该标记,即使要打开一个文件。这样,我们就可以在任何想要修改配置的时候,直接使用其标记打开。 > 帮助主题:`m` `'` # 视觉模式 vim 在普通 vi 基础上添加的一个最好的功能就是 **视觉模式**。这个模式允许我们选择文档中的文本。输入: ``` v ``` 在底部会有 `-- VISUAL --` 提示我们进入到了视觉模式。在视觉模式下,当我们移动光标时(例如鼠标和上下左右键),文本会高亮并被选中。之后我们可以使用正常的编辑命令处理选中的文本,如 c(change,删除)、d(delete)和 y(yank,复制)。再次按 `v` 退出视觉模式。如果按下: ``` V ``` 再次进入视觉模式,底部提示 `-- VISUAL LINE --`,不同的是此模式是对文本的选择是以行为单位,而不是以字符为单位。这在剪切和复制代码块时很方便。 还有第三种使用视觉模式的方式。按下: ``` Ctrl-v ``` 底部提示 `-- VISUAL BLOCK --`。我们可以以列为单位选择长方形的块。例如,选择表格中的列。 > 帮助主题:v V ^v # 缩进 缩进是用于规范程序结构。shell 不需要特定的缩进,只是为了让人更好的阅读代码。然而,有些语言使用缩进来表达程序结构,例如 Python。 缩进有两种方式,一种是使用 tab 制表符,一种是使用一连串的空格。要理解这两者之间的差别,我们需要回到打印机和电报机时代。 在打印机上,为了方便给段落的开头缩进,有人发明了一个机械设备来进行缩进。时过境迁,这些设备支持设置更多的 tab,当电报发明之后,继承了 tab 的用法,使用一个称为 HT(horizontal tab,水平制表符,代码 9)的 ASCII 字符,默认使用 8 个空格。 在以前的时代,内存很昂贵,可以使用 tab 来代替空格以节省空间。 但是使用 tab 会带来问题,因为一个 tab 没有固定的宽度,其宽度取决于程序对 tab 宽度的定义。这就意味着 tab 在不同的程序及上下文里有不同的表现。 自从内存没那么贵以后,而且 tab 会带来歧义,现代实践都使用空格来代替 tab。vim 提供了几个设置 tab 和缩进的选项,以下是 `tabstop` 模块帮助文档的摘抄,解释了 vim 对 tab 的处理方式: ## 为脚本设置缩进 在 *sh.vim* 文件中添加以下配置,设置缩进为 2 个空格: ``` setlocal tabstop=2 setlocal shiftwidth=2 setlocal expandtab setlocal softtabstop=2 setlocal autoindent setlocal smartindent ``` 除了 tab 设置外,这里我们还设置了 `autoindent` 和 `smartindent` 设置,这会使代码块自动缩进。写入以下脚本内容看看效果: ``` #! /bin/bash # This is a shell script to demonstrate features in vim. It doesn't really # do anything, it just shows what we can do. # Constants A=1 B=2 if [[ $A == $B ]]; then echo "This shows how smartindent works." echo "This shows how autoindent works." echo "A and B match." else echo "A and B do not match." fi afunction() { cmd1 cmd2 } if [[ -e file ]]; then cmd1 cmd2 fi ``` 此时,当我们在脚本中添加新行时,vim 会自动为我们缩进。`autoindent` 选项会使 vim 重复上一行的缩进,而 `smartindent` 选项可以在输入特定程序结构如函数和 `if` 声明时为我们提供缩进。这些设置为我们提供了很多便利并使我们的代码整洁好看。 如果你发现正在编辑的文件和我们的设置规则不符,vim 可以将其转换。输入: ``` :retab ``` 然后文件中的 tab 就将调整成我们设置的缩进风格。 > 帮助主题:'tabstop' 'shiftwidth' 'expandtab' 'softtabstop' 'autoindent' 'smartindent' # 强大地移动 vim 提供了一些 **移动命令** 来使我们在文档中快速移动。 以下是一些常见移动命令的列表。 ``` h 向左移动(同向左键) j 向下移动(同向下键) k 向上移动(同向上键) l 向右移动(同向右键) 0 当前行的第一个字符处(同 Home 键) ^ 当前行的第一个非空格字符处 $ 当前行的最后一个字符处(同 End 键) f{char} 向右移动到当前行下一个 char 字符处(find) t{char} 向右移动到当前行下一个 char 字符的前一个字符处(till) ; 重复上一个 f 或 t 命令 gg 跳转到第一行 G 跳转到最后一行,如果指定了行数,则跳转到指定行 w 向前(右)移动到下一个单词的开头处 b 向后(左)移动到上一个单词的开头处 e 移动到单词结尾处 ) 向前移动到下一句的开始处 ( 向后移动到上一句的开始处 } 向前移动到下一段落的开始处 { 向后移动到上一段落的开始处 ``` 记住,以上每一个命令在执行之前就已经计算出其可执行的次数。 # 操作符 移动命令经常和 **操作符** 一起使用。以下是常用的操作符: ``` c change(先删除后插入) d delete(删除/剪切) y Yank(也就是复制) ~ 切换大小写 gu 切换小写 gU 切换大写 gq 格式化文本(后面会专题讨论) g? ROT13 编码(对于模糊的文本) > 向右偏移(shift,即缩进) < 向左偏移 ``` 我们可以使用视图模式来演示这些操作符。移动到第三行的最前面,输入: ``` vf. ``` 这会选择行开头到语句结尾的字符。再次按下 `v` 取消视图模式。然后,再次回到第三行开头,输入: ``` v) ``` 来选择第一个句子。退出视图模式并输入: ``` v} ``` 来选择整个段落(空白行分隔的文本块)。再次按下 `}` 来继续选择下一个段落。 # 文本对象选择 作为 vi 移动命令的补充,vi 添加了一个称为 **文本对象选择** 的功能。这些命令只与操作符一起工作。这些命令是: - `a`:选择整个文本对象 - `i`:选择文本对象的内部内容 文本对象包括: - `w`:单词 - `s`:句子 - `p`:段落 - `t`:标签块(例如 HTML 中的 `...`) - `[`:`[` 包裹的块 - `(`:`(` 包裹的块(也可以用 `b`) - `{`:`{` 包裹的块(也可以用 `B`) - `"`:`"` 引用字符串 - `'`:`'` 引用字符串 例如,想要将光标置于一个单词上,输入: ``` caw ``` (change all word 的缩写)vim 会选择整个单词,删除它,然后切换到编辑模式。文本对象也可以和视图模式一起使用。尝试:移动到第 11 行并将光标移动到引号包裹的字符串内,并输入: ``` vi" ``` 那么引号内部的文本将会选中。如果我们输入: ``` va" ``` 整个字符串,包括引号都会被选中。 > 帮助主题:`motion.txt` `text-objects` # 文本格式 现在我们想在文件的头部添加许可信息。由一个注释块组成,出现在文件最顶部,里面包含了版权信息。 我们将移动到第三行添加。在此之前,我们想让 vim 知道每一行的长度是多少。首先我们看一下 vim 当前设置的是多少: ``` :set tw? ``` vim 返回: ``` textwidth=0 ``` `tw` 是 textwidth 的缩写,文本行设置的长度。值为 0 表示 vim 没有限制每行的长度。让我们设置一下: ``` :set tw=75 ``` 这时,当文本长度到达设置值时,vim 将会自动换行。 ## 段落格式 当我们写代码的时候,我们不想限制每行字符数(但是保持每行小于 80 个字符是最佳实践),但在这里却是很有用的。 输入以下文本: ``` # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License at for more details. ``` 注意我们输入时的变化,每次输入达到行最大字符长度时,vim 都会自动换行并带有注释符。因为文件类型设置为了 shell,所以 vim 知道其语法并帮助我们自动填充了备注。很方便。 如果我们觉得设置的每行字符数过长或过短,我们想重新格式化注释块,要怎么做呢? 为了演示,将行宽度设置为 65,输入: ``` :set tw=65 ``` 现在,将光标移动到注释处,并输入: ``` gqip ``` (format in paragraph 的意思)看看发生了什么。文本根据新的行宽度重新格式化了!后面,我们将学习如何使用一个键代替 `gqip` 四个字符。 ## 注释块 我们看如何对文本进行批量注释。 首先,进入列视图模式: ``` Ctrl-v ``` 然后选中注释块的第一行 `#` 并向下选择到最后一行注释处。 Visual block select 然后,输入: ``` d ``` 这将删除选中的块。现在块没有了注释。 要重新加上注释,`ctrl+v` 进入列视图模式,重新选中要注释的块的前两个字符。 Column selection 然后,输入 `Shift-i`(在行首进行编辑的命令) 进入编辑模式,然后输入 `#` 符,后面跟一个空格。最后,按两下 `Esc` 键。vim 会将 `# ` 插入到块中的每一行。 Completed block ## 大小写转换 我们总有大小写转换的需求。vim 支持以下大小写转换命令: ``` ~ 切换当前字符的大小写 gU 转换为大写 gu 转换为小写 ``` `gu` 和 `gU` 命令都可以应用于视图模式下选中的额文本,或与移动命令、文本选择命令一起使用。例如: ``` gUiS 转换当前句子为大写 guf: 将当前位置到下一个 : 号间的字符为小写 ``` ## 文件格式转换 DOS/Windows 系统下的每个文件后面都会带有一个回车符。如果你在 Linux 系统打开类似文件,可以通过以下方式将其设置为 Unix 类型: ``` :set fileformat=unix :w ``` > 帮助主题:`'textwidth'` `gq` `'fileformat'` `~` `gu` `gU` # Macro - 巨集 有时候处理文本我们会需要一遍遍的重复同样的操作。使用电脑经常会遇到这种情况,好在 vim 提供了一种方式来记录一系列操作并在之后需要的时候回放。这些记录称为 **巨集**。 开启一个记录要先输入 `q`,后面跟一个字母。该字母就是巨集的名称。之后的输入就会记录到巨集中。要结束巨集,再次输入 `q`。 这里我们再以删除备注前面的 `#` 来示范。将光标移到第一行备注并输入: ``` qa^xxjq ``` 我们对上面命令拆开解释如下: ``` qa 开始一个巨集「a」 ^ 移到到该行第一个非空白字符处 xx 删除光标下最前面的两个字符 j 向下移动一行 q 结束记录 ``` 现在,我们移除了第一行的备注符,并且光标到了第二行,我们可以通过输入以下命令再次执行该巨集: ``` @a ``` 要对后续的行都执行此巨集,我们可以输入: ``` @@ ``` 或者我们可以执行 5 次: ``` 5@a ``` 如果要撤销刚才的操作,输入: ``` u ``` 巨集的一个好处就是,vim 会记住它。每次退出 vim,vim 都会将巨集保存并在我们下次启动另一个编辑会话时再次使用。 > 帮助主题:`q` `@` # 寄存器 我们对文本编辑中的拷贝和粘贴很熟悉。在 vim 中,`y`(yank)表示复制,`p` 或 `P` 表示粘贴。这里面的操作涉及到了 **寄存器**。 vim 中存储文本的内存区域叫做寄存器。我们可以将其当做一系列的字符串变量。vim 使用特殊的集合来存储我们删除的文本,我们也可以使用其他方式来存储和取用文本。这就是有多个元素的剪切板。 要使用寄存器,我们要在 `"` 后面跟一个小写字母或数字,例如: ``` "a ``` 表示一个名为 a 的寄存器。要在该寄存器中存放一些文本,我们在该寄存器后面跟上类似「复制直到当前行的结尾」的操作; ``` "ay$ ``` 要调用该寄存器中的文本,我们在寄存器名称后面跟上一个粘贴操作: ``` "ap ``` 寄存器允许我们同时将多个文本片段存储到剪切板。在我们无感知的情况下,vim 已经在使用寄存器来执行复制和粘贴操作了。 寄存器 0-9 有特殊用途。vim 会将最近复制的文本添加到寄存器 0 中,并将最近删除的文本添加到 1-9 中。当我们有新的删除操作时,旧的寄存器会加 1。所以,1 中是最新删除的文本,而 9 中是最旧的。 这就使我们不怕丢失已复制的文本了。你可以通过寄存器 0 来调用最新复制的文本。 要查看当前寄存器中的内容,输入: ``` :reg ``` > 帮助主题:`"` `:registers` # 编辑子模式 vim 在编辑模式下有许多命令。大部分用于自动补全功能,以帮助我们更快的输入。用起来可能有点笨拙,但是可以一试。 ## 自动补全单词:ctrl - n ctrl - n:下一个选项 ctrl - p:上一个选项 ctrl - e:退出编辑子模式 ## 插入注册内容:ctrl - r ## 自动补全行:ctrl - x ctrl - l ctrl - x:进入编辑自模式,并在 vim 底部显示可进行操作的菜单 ctrl - l:此时输入 ctrl - l,会显示出当前 vim 已打开文件的以相同内容开头的行的列表,选择并按 enter 键插入到当前行 ## 文件名自动补全:ctrl - x ctrl - f ## 字典查找:ctrl - x ctrl - k 如果我们在配置文件中配置了字典(即一个有序单词列表)路径,那么就可以使用 ctrl -x 进入编辑子模式,然后使用 ctrl -k 调出字典补全。 ``` setlocal dictionary=/usr/share/dict/words ``` 以上是 Linux 系统的默认字典。 > 帮助主题:`i_^n` `i_^p` `i_^x^l` `i_^x^r` `i_^x^f` `i_^x^k` `'dictionary'` # 快捷键地图 像许多其他应用程序一样,vim 也可以通过自定义快捷键来自定义行为。有一个特定的命令来完成这个功能:`map`,它允许使用一个键来代替另一个键或一组键的功能。 首先声明,使用 `map` 功能通常很让人泄气,因为某些情况下它会带来负面影响。 例如之前提到过的 `gqip` 命令,其意义是对段落进行格式化,这里我们使用 `Q` 来代替这一系列命令: ``` :nnoremap Q gqip ``` 执行此命令后,再在普通模式下按下 `Q` 键就相当于执行 `gqip` 命令了。 `nnoremap` 是 `noremap` 系列命令中的一个,是 `map` 命令的安全模式。该命令家族包括: - `noremap` 任何模式下的快捷键 - `nnoremap` 普通模式下的快捷键 - `inoremap` 编辑模式下的快捷键 - `cnoremap` 命令模式下的快捷键 大部分情况下我们会自定义普通模式下的快捷键。所以 `nnoremap` 命令最常用。另一个示例: ``` :nnoremap S :split ``` 以上命令在普通模式下让快捷键 `S` 表示输入 `split` 命令然后按一个回车键。这里 「」称为 **关键符号**(key notation)。对于非打印字符,在定义快捷键时,我们使用这种方法来代表。要查看所有关键符号列表,输入: ``` :h key-notation ``` 那么,我们怎么知道要设置的快捷键有没有和 vim 默认的快捷键冲突呢?毕竟几乎键盘上所有的键都是 vim 本身的快捷键。我们可以通过查看帮助文档来检查快捷键是否已经被使用,例如: ``` :h Q ``` 如果要将快捷键永久运用到 vim,将定义快捷键的命令添加到 *.vimrc* 文件中: ``` nnoremap Q gqip nnoremap S :split ``` > 帮助主题:`:map` `key-notation` # 片段 略 # 完成我们的脚本 目前为止,我们的示例脚本长这样: ``` #! /bin/bash # --------------------------------------------------------------- # This is a shell script to demonstrate features in vim. It # doesn't really do anything, it just shows what we can do. # # This program is free software: you can redistribute it an/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation, either version 3 of # the license, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU # General Public License at for # more details. # --------------------------------------------------------------- # --------------------------------------------------------------- # Constants # --------------------------------------------------------------- A=1 B=2 # --------------------------------------------------------------- # Functions # --------------------------------------------------------------- afunction() { cmd1 cmd2 } # --------------------------------------------------------------- # Main Logic # --------------------------------------------------------------- if [[ $A == $B ]]; then echo "This shows how smartindent works." echo "This shows how autoindent works." echo "A and B match." else echo "A and B do not match." fi if [[ -e file ]]; then cmd1 cmd2 fi ``` # 使用外部命令 略 # 文件系统管理和导航 略 # 一个人不能单靠代码生活 我们并不总是要写代码,有时也要写普通的文本文件。在 *~/.vim/ftplugin* 目录添加以下是文本文件配置 *~/.vim/ftplugin/text.vim*: ``` setlocal textwidth=75 setlocal tabstop=4 setlocal shiftwidth=4 setlocal expandtab ``` ## 拼写检查 往 *text.vim* 中添加以下配置: ``` setlocal spelllang=en_us setlocal dictionary=/usr/share/dict/words setlocal spell ``` 纠正拼写错误相关命令: ``` ]s 下一个拼写错误的单词 [s 上一个拼写错误的单词 z= 显示建议的正确单词 zg 添加单词到个人词典 ``` vim 在 *~/.vim/spell* 目录维护了一个个人词典,执行 `zg` 命令会将通过下划线标出的拼写错误的单词添加到该词典中。 > 帮助主题:`'spelllang'` `'spell'` # 更多 .vimrc 的把戏 我们可以在 *.vimrc* 配置文件中添加更多的配置。 例如: ``` set laststatus=2 ``` 这会使 vim 在底部显示一条状态栏。这个状态栏通常会在有多个窗口时显示(lastatatus=1),但是将其值设置为 2 则会使其一直显示,不管有多少个窗口。然后: ``` set ruler ``` 这将在状态栏显示光标的位置(行、列、相对 %)。 最后,添加鼠标支持: ``` if has('mouse') set mouse=a endif ``` 以上表示,如果侦测到鼠标,则启用鼠标。鼠标支持允许我们用光标定位,切换窗口。在视图模式下也可以使用。 > 帮助主题:`'laststatus'` `'ruler'` `'mouse'` # 总结 We can sometimes think of vim as being a metaphor for the command line itself. Both are arcane, vast, and capable of many amazing feats. Despite its ancient ancestry, vim remains a vital and popular tool for developers and administrators. 以上是本文中配置文件的完整配置。 *~/.vimrc* ``` set nocompatible filetype plugin on nnoremap Q gqip nnoremap S :split set path+=** set wildmenu set spelllang=en_us if has('mouse') set mouse=a endif set laststatus=2 set ruler ``` *~/.vim/ftplugin/sh.vim* ``` setlocal number colorscheme desert syntax off setlocal tabstop=2 setlocal shiftwidth=2 setlocal expandtab setlocal softtabstop=2 setlocal autoindent setlocal smartindent ``` *~/.vim/ftplugin/text.vim* ``` colorscheme desert setlocal textwidth=75 setlocal tabstop=4 setlocal shiftwidth=4 setlocal expandtab setlocal complete=.,w,b,u,t,i setlocal dictionary=/usr/share/dict/words setlocal spell ``` 要成为大师的唯一方法就是:「练习!练习!练习!」 # 深度阅读 - Tab 和空格的战争:[Tabs versus Spaces:An Eternal Holy War.](https://www.jwz.org/doc/tabs-vs-spaces.html) - 学习如何写一个 vim 脚本:[Learn Vimscript the Hard Way](https://learnvimscriptthehardway.stevelosh.com/) - 在 vim 中使用拼写检查:[Using Spell Checking In Vim](https://www.linux.com/tutorials/using-spell-checking-vim/)
所有评论(0)
暂无评论~_~