VIM 编辑器的使用_1

来源:互联网 发布:重庆网络知识竞赛答题 编辑:程序博客网 时间:2024/06/11 03:47

VIM 中的”~”开头的行是文件中不存在的行。

VIM 模式

VIM 是一个多模式的编辑器:

  • 普通模式:在普通模式下,输入的字符将被解释为命令,我们输入的字符将显示在最后一行。无论在何种模式下,敲击”ESC”能够进入到普通模式。如果需要输入命令,那么应该切换到普通模式下。
  • 在插入模式下,输入的字符将成为插入的文本。通常情况,在普通模式下,敲入”i”(insert 的缩写)或者”a”(append 的缩写)进入插入模式。
  • 在普通模式下,输入 v(或者 V)进入可视模式,可视模式可以方便的删除一串字符。
  • 在普通模式下,输入 R 进入替换模式(插入模式)。在插入模式下,可以按下 Insert 键也可以进入替换模式。

VIM 中的命令

前面已经说过,在普通模式下输入的字符将被解释为命令,命令是区分大小写的,VIM 中的命令显示在最后一行。

  1. : 命令(冒号命令)
    冒号命令以”:”开头,例如,:w 表示保存本文件。输入冒号命令后,需要使用回车表示命令的结束。
  2. 移动光标命令。在普通模式下可以使用移动光标命令:
    1. h
    2. j
    3. k
    4. l

    当然也可以使用方向键(如果你不介意过远的移动你的手),而实际上,移动光标命令的出现是有历史原因的,以前有一些键盘是没有方向键的。我们可以这样来记忆移动光标命令:

    1. -----------hjkl-----------
    2. ----------- k -----------
    3. -----------h l-----------
    4. ----------- j -----------

    记住移动光标命令的最好方式是使用它,而不是使用方向键,不过,不要忘记输入前切换到普通模式(按下”ESC”)

  3. 删除字符命令
    x 为删除字符命令,在一个字符上,输入 x 可以删除它。当然,也可以有其他的方法删除字符,例如,在输入模式下,使用 Backspace 按键来删除字符等。
  4. 删除一行的命令
    dd 用来删除一行(d 是一个比较复杂的命令,后面会讲到)
  5. J 命令(大写的 J)
    J 命令会删除当前行的换行符,这意味着两行将连接在一起,它们之间使用空格分开(j 是移动光标命令)。
  6. u 命令、U 命令和 Ctrl-r 命令
    u(undo)命令用于撤销上一个编辑操作,注意,u 命令仅仅用于撤销上一次的编辑操作而不是所有操作,例如,我们使用了 :w 命令来保存文件,无法使用 u 命令来撤销保存。
    U 命令用于撤销在一行上的编辑操作(而非一个编辑操作)
    Ctrl-r 用于恢复上一个撤销的编辑操作(redo),它与 u 命令对应,而无法恢复因为 U 命令而造成的改变。
  7. 一些习惯问题
    很多用户习惯使用 Ctrl + z 来撤销编辑操作,使用 Ctrl + y 来恢复编辑操作,使用 Ctrl + s 来保存,在 Windows 下的 gvim 中,这些操作都是允许的并且可以使用在插入模式下。在 Linux 中 Ctrl + v 不是粘贴,这个要注意。
  8. i 命令(insert)
    前面已经介绍过,在普通模式下,输入 i 命令,将进入插入模式,具体来说,用户将能够在光标前的位置插入字符。
  9. a 命令(append)
    和 i 命令类似,通过在普通模式下,输入 a 命令,进入到插入模式,与 i 命令不同的是,用户将能在光标后的位置插入字符。
  10. o 命令和 O 命令
    o 命令用于在光标所在行的下面插入一个新行,O 命令用于在光标所在行的上面插入一个新行。
  11. 计数前缀
    这是一个非常有用的功能,例如,我们需要向上移动 10 行,那么我们可以在普通模式下输入 10k 或者 10 和上方向键。计数能够使用在很多的命令前面但是注意它只能用于命令的前面。我们可以通过 10k 来向上移动 10 行,也可以用 5x 来删除光标后的 5 个字符。
  12. ZZ 命令
    ZZ 命令用于保存并且退出,同样的,我们可以使用冒号命令 :wq 来实现相同的功能(但是冒号命令输入较为麻烦)。
  13. 冒号命令 :wq
    用于保存退出,同于 ZZ。
  14. 冒号命令 :q!
    用于不保存退出,这里 ! 是强制命令修饰符,表示将强制执行命令。通常来说,强制命令修饰符用在命令之后。
  15. 冒号命令 :w
    用于保存文件。
  16. 冒号命令 :q
    用于退出,注意,如果文件修改了,但是没有保存,那么无法使用 :q 退出
  17. 冒号命令 :e
    用于载入原来的文件(也就是现在正在编辑的文件存在于硬盘设备上的版本),如果文件没有保存,那么无法载入,可以使用强制命令修饰符来载入未保存的文件并且编辑它。即是 :e! 等同于 :q! 然后再打开文件。我们还可以这样使用:”:e 文件名”来打开文件进行编辑,例如 :e d:/vim.txt。
  18. 冒号命令 :help
    用于获得帮助,使用 F1 也有相同的效果。注意一下,帮助系统里面存在超级链接,一些文字使用了 || 括起来了,这时候把光标移动到两个 || 之间并按 Ctrl-] 那么就会发生跳转。VIM 中使用术语标记(tag)而不是超级链接。使用 Ctrl-] 跳转后,使用 Ctrl-O 或者 Ctrl-T 跳回原来的位置。
    VIM 中的 :help 命令异常强大,如果需要获得特定的主题,那么可以使用如下命令:
    :help {主题} (也可以简写为 :h {主题})
    这里,主题可以是一个命令的名字,例如 :help x
    主题可以是一个命令的关键词,例如 :help find
    主题可以是包含控制符的命令,例如 :help Ctrl-h
    注意一下,:help Ctrl-h 表示普通模式下的 Ctrl-h,如果需要了解插入模式下的 Ctrl-h 可以使用 :help i_Ctrl-h
    另外,我们在未保存文件并退出的时候,VIM 会提示错误:
    E37: 已修改但尚未保存(E37: No write since last change)这个时候,我们可以通过 :help E37 来寻求帮助。
  19. 冒号命令 :!
    :! 用于执行一个外部的程序(!外部程序),例如在 Windows 下,:!cmd 用于打开一个 dos 窗口,通常来说,我们可以这样用:
    :read !xxx 这里 xxx 表示一个外部程序的名称
    :write !xxx 这里 xxx 表示一个外部程序的名称
    例如:

    1. :read !dir --- 用于将执行 dir 程序并且将输出结果插入到当前位置
    2. :write !wcunix 或类 unix 系统下的一个命令) --- 用于将文件内容输出到 wc 命令中

    我们希望在当前位置插入一个时间,那么我们可以这样做 :read !date/t(windows 系统)
    这里的 ! 不是强制命令修饰符,而是表示了一个外部程序名的开始。

  20. 词移动命令
    w 命令用于向前移动一个词,3w 表示移动 3 个词。
    b 命令用于向后移动一个词,3b 表示移动 3 个词。
  21. 移动到行首(文件首)和行尾(文件尾)的命令
    $ 用于移动到行尾或者使用 <End> 键(Shell 中常用 <End> 到本行尾)
    ^ 用于移动到行首也可以使用 0(零)或者使用 <Home> 键(Shell 中常用 <Home> 到本行首)
    gg 用于移动到文件首或者使用 :0(零)
    G 用于移动到文件尾或者使用 :$
    这里我推荐不要使用冒号命令
    使用 0 回到行首使用 gg 回到文件首
    使用 $ 回到行尾使用 G 回到文件尾
    另外,在插入模式下,可以方便的使用 <Home> 回到行首并且使用 <End> 回到行尾。
    对于命令 $ 可以使用计数前缀,例如 10$ 表示向下移动 9 行并且移动到行尾。
  22. f 命令和 F 命令
    f(find)命令用于移动到本行的某个字符,例如 fx 用于向右移动到本行的第一个 x 字符。
    F 命令一样用于移动到本行的某个字符,只是 F 命令用于向左移动,注意,不论是 f 还是 F 命令后面都只能加上一个字符(不能是多个字符)。f 和 F 命令能够使用计数前缀。
    执行 f 命令之后,敲击 ; 表示继续向前查找,敲击 , 表示继续向后查找。
  23. % 命令
    % 命令用于在匹配的 () 或者 {} 移动光标。例如:

    1. int main()
    2. {
    3. // something
    4. }

    我们在第一个 { 上敲击 %,光标即会跳到 } 上去,再次敲击又会跳到 { 上去。

  24. 带有计数前缀的 G 命令
    我们知道 G 命令用于跳到文件尾(gg 用于跳到文件头),带有计数前缀的 G 命令用于跳转到某行,例如 10G 用于跳转到第 10 行。gg 命令的效果同于 1G。
  25. 带计数前缀的 % 命令
    带计数前缀的 % 命令用于实现跳转,例如 50% 用于跳转到文件的中间位置,100% 表示跳转到文件的结尾。
  26. H M L 命令
    这三个命令用于光标在当前页中跳转(而不是整个文件),H(Home)用于跳转到本页最上行,L(Last)用于跳转到本页最下行,M(Middle)用于跳转到本页中间。
  27. Ctrl-G 命令
    Ctrl-G 命令用于显示如下信息:
    “user_03.txt” line 233 of 650 –35%– col 45-52
  28. :set number
    这是一个很有用的指令,用于在每行前面显示一个行号。如果需要取消这种显示,输入 :set nonumber
    number 是一个选项(option),除了 number 还有很多其他的选项。
  29. :set ruler
    用于在最后一行显示出当前光标所在的行和列数。
  30. Ctrl-u 和 Ctrl-d
    Ctrl-d(down)用于向下移动半屏
    Ctrl-u(up)用于向上移动半屏
  31. Ctrl-f 和 Ctrl-b
    Ctrl-f(front)用于向前滚动一屏
    Ctrl-b(back)用于向后滚动一屏
  32. Ctrl-e
    Ctrl-e 用于屏幕上滚
  33. zz 命令 zt 命令 zb 命令
    zz 命令将移动文本,使得光标处于屏幕的中间(区别于 M)
    zt 命令将移动文本,使得光标处于屏幕的顶部(区别于 L)
    zb 命令将移动文本,使得光标处于屏幕的底部(区别于 H)

查找

简单的查找一个字符串使用 / 后接上一个字符串,例如 /屏幕。
/ 命令和 : 命令类似,都是使用回车结束。回车后,使用 n 移到下一个匹配的位置(N 和 n 相反),n 可以接受计数前缀。
? 命令和 / 类似,但是进行反方向查找。
如果需要忽略大小写,使用 :set ignorecase,如果要区分大小写,使用 :set noignorecase,不过有一个最好的设置方式是 :set ignorecase smartcase 含义是,如果出现大写,那么区分大小写,否则不作区分。
输入 / 后,点击方向键可以查找搜索的记录。: 开头的命令,也有历史记录。
在某个单词上点击 *,那么就会在全文中查找这个单词。

查找实际上可以非常复杂,VIM 中可以使用正则表达式来查找,这里有一个简单的例子:
/^the 用于查找出现在行首的 the
/^the$ 用于查找某行,这样的行只有一个 the
如果需要了解更多关于正则表达式的内容,请参考有关书籍(正则表达式并非 VIM 专有)。

这里介绍一些很简单又实用的技巧:
. 用于表示任意的一个字符,例如 /c.m 可以表示 cam com ctm 等等。
如果我们需要查找真正的 . 字符,我们可以使用 \. 这个类似于 C 语言中的转义字符。除了 . 还有一些字符是需要加 \ 的。

标记(tags)

标记表示了一个可以跳转的位置。例如使用命令 G 时,VIM 会记录当前位置,这个位置成为一个标记,命令 ‘(单引号)和 ` 用于在各个标记之间跳转。VIM 中的标记和 microsoft visual stdio 中的 bookmarks 类似但是更加强大。正如我们这里所说的,使用 G 命令将产生一个标记,注意,并不是所有的命令都会产生标记,实际的情况是发生跳转时可能产生标记,所谓的跳转是:每次光标移动到本行之外的行,就发生了跳转。
Ctrl-o 用于跳转到一个较老的标记,而 Ctrl-i 用于跳转到一个较新的标记。
命令 :jumps 用于输出所有的标记。

命名标记:
命名标记可以完成类似 visual stdio 中 bookmark 的功能(更加强大和灵活),我们使用命令 m,例如:
在某次输入 ma 的含义是用 a 标记此处,然后如果我们需要跳回到这里,可以使用 `a(跳回到这个位置)或者使用 ‘a(跳回到这个位置所处的行的行首)
同样,我们可以使用 :marks 命令来查看所有的命名标记。我们可以看到一些特殊的标记,这里就不做介绍了。

强大的配置文件

VIM 有一个 _vimrc(windows)或者 .vimrc(linux)配置文件,我们可以使用这个配置文件做很多事情。下面是一个例子:

  1. " 配置文件中使用 " 开始表示注释
  2. " 快速的保存,无需使用 :w! 来保存
  3. nmap w :w!<cr>

通过上面的配置,我们就可以通过敲入 w 来保存文件(原来的 w 是词移动命令)。VIM 允许我们使用自己喜欢的方式来进行操作,在不同的机器或者操作系统上,只需要拷贝配置文件就 ok 了。

0 0
原创粉丝点击