Vim学习笔记

Posted by Yun on Fri, Nov 16, 2018

如果你安装了 vim,你可以使用中文版本的 vimtutor (Vim 教程) 学习基本的 Vim 命令:

1vimtutor zh-cn

vim 初步

使用vim

在命令行键入命令即可使用 vim:

1vim file.txt

以波纹线 (~) 开头的行表示该行在文件中不存在。换句话说,如果 Vim 打开的文件不能充满这个显示的屏幕,它就会显示以波纹线开头的行。

插入文本

Vim 是一个多模式的编辑器。就是说,在不同模式下,编辑器的响应是不同的。在普通模式下,你敲入的字符只是命令;而在插入模式,你敲入的字符就成为插入的文本了。

刚刚进入 Vim 时,它处在普通模式。
通过敲入 "i" 命令 ( i 是插入 (Insert) 的缩写) 可以启动插入模式,这样就可以输入文字了。
最后,你输入 <Esc> 键退出插入模式而回到普通模式。

要看到你在什么模式,输入命令:":set showmode"

无论你在什么模式,要回到普通模式,只要敲 <Esc> 就可以了。

有时你需要敲两次,如果 Vim 发出 “嘀” 一声,就表示你已经在普通模式了。

移动光标

在普通模式下,可以使用两种方法移动光标:

方法一(通过 hjkl 控制):

  • "h":左
  • "j":下
  • "k":上
  • "l":右

方法二(通过方向键控制):

  • "←":左
  • "↓":下
  • "↑":上
  • "→":右

删除字符

要删除一个字符,把光标移到它上面然后输入 "x"。(通过在字符上输入多个 x 可以删除多个字符)。

要删除一整行,使用 "dd" 命令,后一行会移上来填掉留下的空行 。

在 Vim 中你可以把两行连起来,这意味着删除两行间的换行符。光标移动到第一行,按下 "J" 即可。

撤销与重做

使用 "u" 命令撤销上一个编辑操作。

如果你输入 "u" 两次,你的文本恢复原样,那应该是你的 Vim 被配置在 Vi 兼容模式了。

如果你撤销得太多,你可以输入 CTRL-R (redo) 回退前一个命令。换句话说,它撤销一个撤销。

使用 "U" 行撤销命令,撤销所有在最近编辑的行上的操 作。

其他编辑命令

你需要在文本后插入字符。这通过 "a" (append,附加) 命令实现。

使用 "o" 命令在光标下方建立一个新的空行,并把 Vim 切换到插入模式。

使用 "O" 命令 (大写) 在光标上方打开一个新行。

指定计数:通过使用 "5x" 可以达到 "xxxxx" 的效果。

退出

保存文件并退出,使用 "ZZ" 命令。

放弃修改并退出,使用 ":q!" 命令 ( : 进入命令模式,! 强制命令修饰符)。

使用 Vim 帮助

获取一般的帮助,使用 ":help" 或者 <F1> 键。指令后也可以跟具体的参数,例如:":help x"

使用 CTRL-] (进入标签) 和 CTRL-T (或者 CTRL-O 标签回退) 进行跳转

光标移动

以词为单位移动光标

"w" 移动到下一个单词的词首,"b" 命令向后移动到前一个词的词首。

"e" 命令可以移到下一个单词的词末,而 "ge" 则移动到前一个单词的末尾。

移动到行首或者行尾

"$" 命令把光标移动到当前行行尾。如果你的键盘上有 <End> 键,也可以完成相同的功能。

"^" 命令把光标移动到一行的第一个非空字符,而 "0" 命令则移到一行的第一个字符,<Home> 键也可以完成相同的功能。

移动到指定字符(查找字符)

"fx" 命令向前查找本行中的字符 x,"F" 命令用于向左查找。

"tx" 命令与 "fx" 相似,但它只把光标移动到目标字符的前一个字符上,这个命令的反向版本是 "Tx"

这四个命令可以通过 ";" 命令重复,"," 命令则用于反向重复。无论用哪个命令,光标永远都不会移出当前行。

放弃查找,输入 <Esc>

备注 : <Esc> 可以中止大部分命令,而不仅仅是查找。

括号跳转

对于 () [] {} 括号,可以使用 "%" 命令在左右括号之间跳转。

移动到指定的行

使用 "33G" 可以跳转到 第33行。

"G" 命令把光标移动到文件末。移动到文件首的命令是 "gg" (或者 "1G")。

带计数前缀的 "%" 命令可进行近似跳转,如 "85%"

对于当前视野区域内的文字而言,"H" 到开头,"M" 到中央,"L" 到结尾。

确认当前位置

使用 CTRL-G 命令即可。

使用 ":set number" 可以加行号,使用 ":set nonumber" 可以取消。

使用 ":set ruler" 可以在窗口右下角显示光标位置。

屏幕滚动

CTRL-UCTRL-D 命令可以向上下滚动半屏,CTRL-BCTRL-F 向上下滚动一屏。类似于 PageUpPageDown

每次滚一行的命令是 CTRL-Y (向上) 和 CTRL-E (向下)。

可以使用指令 "zz",可以把光标所在行,移动到屏幕中央。

简单查找

查找命令为 "/String",例如查找 “include” 需要输入 "/include"

"?" 命令功能与 "/" 的功能类似,但进行反方向查找。

查找下一个匹配可以使用 "n" 命令,查找前一个匹配使用 "N" 命令。

通过设置 ":set ignorecase" 或者 ":set ignorecase",可以在查找时忽略大小写。

注:vim的 : / 等模式,均支持使用 进行历史命令选取

查找长单词 "/TheLongFunctionName" 要输入很多东西,且容易输错。
可以把光标移到那个单词下面,使用 "*" 命令。Vim 会取得光标上的单词并把它作为被查找的字符串,"#" 命令在反向完成相同的功能。

使用 \< \> 可以匹配单词头尾,例如 "/\<the\>" 将只匹配单词 the
值得注意的是,"*""#" 命令也使用了 “词首” 和 “词尾” 标记来匹配整个单词 (要部分匹配,使用 "g*""g#")。

通过 ":set hlsearch"":set nohlsearch" 可以启用或关闭搜索高亮。
使用 ":nohlsearch",只会临时关闭高亮,但是不会改变搜索高亮设置。

通过 ":set incsearch" 可以在输入字符串时就显示匹配点。

通过 ":set nowrapscan" 可以在查找到文档结束后停止查找。

Vim 支持使用正则式匹配查找。

做小改动

删除内容

"dw" 可以删除一个单词,"d4w" 可以删除4个单词,"d$" 删除当前位置到行尾。

修改文本

"r" 命令不是操作符。它只是等你输入一个字符然后用这个字符替换当前光标上的字符。

"c",表示修改,change。它的作用方式与 "d" 操作符相似,只是完成后会切换到插入模式。例如,"cw" 删除一个词,并切换到插入模式。

"cc" 修改一整行,但它会保留这一行的缩进 (前导空格)。

有些 “操作符-动作” 命令由于经常被使用,所以被设置为单字符命令:

  • "x"" 表示 "dl" (删除当前光标下的字符)
  • "X" 表示 "dh" (删除光标左边的字符)
  • "D" 表示 "d$" (删除到行尾)
  • "C" 表示 "c$" (修改到行尾)
  • "s" 表示 "cl" (修改一个字符)
  • "S" 表示 "cc" (修改一整行)

重复一个修改

"." 是 Vim 中一个非常简单而有用的命令,它重复最后一次的修改操作。"." 命令重复任何除 "u" (撤销),CTRL-R (重做) 和冒号命令外的修改。

可视模式

"v" 命令启动可视模式。你可以移动光标到需要的地方,中间的文本会被高亮显示。

如果想对整行做操作,可以使用 "V" 命令来启动可视模式。左右移动不会有任何效果。而通过上下移动,可以一次选择多行。

如果你要处理一个矩形块内的文本,可以使用 CTRL-V 启动可视模式。

如果你在可视模式下选中了一些文字,又需要改变被选择的文字的另一端,用 "o" 命令即可 (表示 other end),光标会移动到被选中文字的另一端。
当使用列块可视模式的时候,你会有四个角,"o" 只是把你移到对角上。而用 "O" 则能移到同一行的另一个角上。

移动文本

当你用 "d""x" 或者其它命令删除文本的时候,这些文字会被存起来。你可以用 "p" 命令重新粘贴出来 (表示 put,放置)。

"P" 命令像 "p" 一样也是插入字符,但插入点在光标前面。

拷贝文本

"y" 命令 (抽出 yank) 可以把文字拷贝到寄存器中。然后用 "p" 命令粘贴到别处。

使用剪贴板

需要在命令前加上 "*",例如 "*y""*p"

使用替换模式

"R" 命令启动替换模式。在这个模式下,你输入的每个字符都会覆盖当前光标上的字符。这会一直持续下去,直到你输入 <Esc>

你可以通过 <Insert> 在插入模式和替换模式间切换。

参考链接:

vimcdoc - Vim 中文文档计划


版权声明:本文遵循 CC BY-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

Copyright statement: This article follows the CC BY-SA 4.0 copyright agreement. For reprinting, please attach the original source link and this statement.