0%

vim编辑器使用

原文看这里:原文

Vim 有三种编辑模式

  • 普通模式

    由shell进入vim编辑器时,例如执行命令:vim text.txt,首先进入的是普通模式。在普通模式下,从键盘输入的
    任何字符都被当做命令来解释。注意:普通模式下没有任何提示符,输入命令后立即执行,也不需要回车,而且输入的
    字符不会显示出来
    。例如,你可以使用键盘上的【上下左右】按键移动,使用dd删除整行

  • 编辑模式

    在普通模式你是不能进行编辑的,只有你在普通模式中按下【i,I,o,O,a,A,r,R】中的任意一个字符之后才会进入编辑模式,
    编辑模式主要用于文本的编辑。该模式下用户输入的任何字符都被作为文件的内容保存起来,并在屏幕上显示出来。

  • 在普通模式中,输入【:/?】这三个中任何一个字符后,光标将移动到最低那一行,然后输入你想要执行的命令,
    在命令模式下,用户可以对文件进行一些高级处理。尽管普通模式下的命令可以完成很多功能,
    但要执行一些如字符串查找、替换、显示行号等操作还是必须要进入命令模式。

工作模式的切换

  • 普通模式-->编辑模式

    在普通模式下输入:

      i(光标当前位置编辑)、
      I(光标当前位置行首编辑)、
      a(光标当前位置之后编辑)、
      A(光标当前位置行末编辑)、
      o(当前光标位置的下一行编辑)、
      O(当前光标位置的上一行编辑) 
      命令时进入编辑模式
    
  • 普通模式-->命令模式

    输入:(:/?)人一个字符进入命令模式,输入完命令之后回车,自动恢复到普通模式

  • 编辑模式-->普通模式

    ESC键进入普通模式

  • 普通模式-->退出vim

    :进入命令模式,然后输入以下命令:

      q 退出不保存,这里会提示你是否保存
      q! 强行退出,不保存修改内容 
      wq 保存并退出
      ZZ 保存并退出,相当于 wq
      :w /root/test.bak  另存为
    

移动光标

在普通模式下使用以下命令移动:
    k 向上移动光标(移动一行)
    j 向下移动光标(移动一行)
    h 向左移动光标(移动一个字符)
    l 向右移动光标(移动一个字符)

    可以在输入命令之前,输入数字表示移动几个单位,例如输入:`10k`表示向上移动10行
    vim 命令也是区分大小写的

    其他用于移动光标的命令:

    0 或 | 将光标定位在一行的开头。
    $ 将光标定位在一行的末尾。
    w 定位到下一个单词。
    b 定位到上一个单词。
    ( 定位到一句话的开头。
    ) 定位到一句话的结尾。
    { 移动到段落开头。
    } 移动到段落结束。
    [[ 回到段落的开头处。
    ]] 向前移到下一个段落的开头处。
    n| 移动到第 n 列(当前行)。
    1G 移动到文件第一行。
    G 移动到文件最后一行。
    nG 移动到文件第 n 行。
    :n 移动到文件第 n 行。
    H 移动到屏幕顶部。
    nH 移动到距离屏幕顶部第 n 行的位置。
    M 移动到屏幕中间。
    L 移动到屏幕底部。
    nL 移动到距离屏幕底部第 n 行的位置。
    :x x 代表一个数字,如5就移到第5行

控制命令

有一些控制命令可以与 Ctrl 键组合使用,如下:
    CTRL+d 向前滚动半屏
    CTRL+f 向前滚动全屏
    CTRL+u 向后滚动半屏
    CTRL+b 向后滚动整屏
    CTRL+e 向上滚动一行
    CTRL+y 向下滚动一行
    CTRL+I 刷新屏幕

删除字符

普通模式下的删除:
    x 删除当前光标下的字符
    X 删除光标前面的字符
    dw 删除从当前光标到单词结尾的字符
    d^ 删除从当前光标到行首的字符
    d$ 删除从当前光标到行尾的字符
    D 删除从当前光标到行尾的字符
    dd 删除当前光标所在的行
    dj 删除上一行
    dk 删除下一行
    dh 删除前一个字符
    jdG(jd shift + g)   删除当前行之后所有行(不包括当前行)
    J(shift + j)  删除两行之间的空行,实际上是合并两行
    可以在命令前面加上数字,表示重复操作几次,例如:`2dd`表示连续删除2行
命令模式下的删除:
    :d 表示删除当前行
    :2,18d  删除2到18行
    :11,$d 删除11行及以后所有的行
    :1,$d 删除所有行

修改文本

普通模式下:
    cc 删除当前行,并进入编辑模式。
    cw 删除当前字符,并进入编辑模式。
    r 替换当前光标下的字符。
    R 从当前光标替换字符。
    s 输入字符替换当前字符,并编辑。
    S 输入文本替换当前行,进入编辑模式。

复制粘贴

普通模式下:
    yy 复制当前行
    nyy 复制n行
    yw 复制一个字(单词)
    nyw 复制n行
    p 将复制的文本粘贴到光标后面
    P 将复制的文本粘贴到光标前面
命令模式下:
    :y  复制当前行
    :2,19y 复制2到19行
    :1,10 co 20 将1-10行插入到第20行之后。
    :1,$ co $ 将整个文件复制一份并添加到文件尾部。

文本查找

普通模式下输入: `?`或者`/`,然后输入要匹配的字符,回车进行搜索
`?` 向上查找
`/` 向下查找
在搜索结果出来之后,使用`n`继续按相同方向查找,`N`按反方向查找

字符说明
    ^ 匹配一行的开头
    . 匹配一个字符
    * 匹配0个或多个字符
    $ 匹配一行的结尾
    [ ] 匹配一组字符

set 命令

命令模式下:
    :set ic 搜索时忽略大小写。
    :set ai 设置自动缩进(自动对齐)。
    :set noai 取消自动缩进(自动对齐)。
    :set nu 显示行号。
    :set sw 设置缩进空格数,如:set sw=4。
    :set ws 循环搜索。
    :set wm 设置自动换行,如:set wm=2 。
    :set ro 将文件类型改为只读。
    :set term 输出终端类型。
    :set bf 忽略输入控制字符,如 BEL等。

运行命令

输入:`:! command` 运行命令,例如:`:! ls -al`

文本替换

切换到命令模式,再输入 s/ 命令即可对文本进行替换。语法为:
s/old/new/ 用old替换new,替换当前行的第一个匹配
s/old/new/g 用old替换new,替换当前行的所有匹配
%s/old/new/ 用old替换new,替换所有行的第一个匹配
%s/old/new/g 用old替换new,替换整个文件的所有匹配
:10,20 s/^/    /g 在第10行知第20行每行前面加四个空格,用于缩进。
ddp 交换光标所在行和其下紧邻的一行。

撤销

u 撤销(Undo)
U 撤销对整行的操作
Ctrl + r 重做(Redo),即撤销的撤销。

注释命令

perl程序中#开始的行为注释,所以要注释某些行,只需在行首加入#
    3,5 s/^/#/g 注释第3-5行
    3,5 s/^#//g 解除3-5行的注释
    1,$ s/^/#/g 注释整个文档。
    :%s/^/#/g 注释整个文档,此法更快。

其他命令

J 将当前行和下一行连接为一行
<< 将当前行左移一个单位
>> 将当前行右移一个单位
~ 改变当前字符的大小写
^G Ctrl+G显示当前文件名和状态
U 撤销对当前行所做的修改
u 撤销上次操作,再次按 'u' 恢复
:f 以(%)形式显示光标在文件中的状态
:f filename 将文件重命名为 filename
:w filename 保存修改到 filename
:e filename 打开另一个 filename 的文件
:cd dirname 改变当前工作目录到 dirname
:e # 在两个打开的文件之间切换
:n 如果打开了多个文件, :n 切换到下一个
:p 如果打开了多个文件, :p 切换到上一个
:N 如果打开了多个文件, :N 切换到上一个
:r file 读取文件并在当前行的后边插入
:nr file 读取文件并在第 n 行后边插入