most in Chinese, rest in English

0%

Vim使用技巧

vim作为在terminal端处理文本的最有名的编辑器,我们总结一下它的一些基本使用方法。

vi 和 vim的区别

它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。总的来说,vim比vi更具优势的地方在于:

  • 多级撤消:在vi的命令模式里,按 u只能撤消上次命令,而在vim里可以无限制的撤消,几乎等同于windows下的ctrl+z了 。
  • 多操作系统支持:vi只能运行于unix中,而vim不仅可以运行于unix,还有windows ,mac等操作系统上。
  • 语法加亮:作为一名程序员,我觉得这个效果用处最大了- vim可以对代码进行多颜色的语法加亮。
  • 可视化操作:因为vim不仅可以在终端运行,也可以运行于x window、 mac os、 windows, 所以说他“可视化”。
  • 对vi的完全兼容:某些情况下,vim可以完全被当成vi来使用。

vim使用

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。简单的说,我们可以将这三个模式想成底下的图标来表示:
workflow

命令模式

用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:

  • i 切换到输入模式,以输入字符。
  • : 切换到底线命令模式,以在最底一行输入命令。
    若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

在当前行里面有效的移动光标:

  • fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用 ; 来重复你的上一个 f 命令。
  • tx:和上面的命令类似,但是是移动到 x 的左边一个位置。(这真的很有用)
  • Fx:和 fx 类似,不过是往回找。
  • w:光标往前移动一个词。
  • b:光标往后移动一个词。
  • 0:移动光标到当前行首。
  • ^:移动光标到当前行的第一个字母位置。
  • $:移动光标到行尾。
  • ):移动光标到下一个句子。
  • (:移动光标到上一个句子

在整个文件里面有效移动光标:

  • Ctrl-F:向下移动一屏。
  • Ctrl-B:向上移动一屏。
  • G:到文件尾
  • numG:移动光标到指定的行(num)。(比如 10G 就是到第 10 行)
  • gg:到文件首
  • H:移动光标到屏幕上面
  • M:移动光标到屏幕中间
  • L:移动光标到屏幕下面
  • *:读取光标处的字符串,并且移动光标到它再次出现的地方。
  • #:和上面的类似,但是是往反方向寻找。
  • /text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n。
  • ?text:和上面类似,但是是反方向。
  • .:重复前一个动作。

剪切和拷贝:

  • dd:删除游标所在的那一整行。
  • ndd: n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行。
  • yy:复制游标所在的那一行。
  • nyy:n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行。
  • p, P:p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。
  • u:复原前一个动作。
  • Ctrl+r:重做上一个动作。

输入模式

  • i, I: 进入输入模式(Insert mode):i 为从目前光标所在处输入, I 为在目前所在行的第一个非空格符处开始输入。
  • a, A: 进入输入模式(Insert mode):a 为『从目前光标所在的下一个字符处开始输入』, A 为从光标所在行的最后一个字符处开始输入。
  • o, O: 进入输入模式(Insert mode):这是英文字母 o 的大小写。o 为在目前光标所在的下一行处输入新的一行; O 为在目前光标所在处的上一行输入新的一行。
  • r, R: 进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止。
  • Esc: 退出编辑模式,回到一般模式中。

底线命令模式

在命令模式下按下:就进入了底线命令模式。底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。在底线命令模式中,基本的命令有:

  • :w: 将编辑的数据写入硬盘档案中。
  • :w!: 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关。
  • :q: 离开 vi。
  • :q!: 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。惊叹号 (!) 在 vi 当中,常常具有强制的意思~
  • :wq: 储存后离开,若为 :wq! 则为强制储存后离开。
  • :! command: 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如
    :! ls /home即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
  • 按ESC键可随时退出底线命令模式。
    以下为非常全面的vim命令的键盘图:
    summary
    Reference:
  • vi和vim的区别
  • vim/vi简易教程
  • vim快捷键位图
  • vim的基本操作
  • vim命令大全