如果是初学vi,运行一下vimtutor是个聪明的决定。 (如果你的系统环境不是中文,而你想使用中文的vimtutor,就运行vimtutor zh)

Vim的几种模式

  • 正常模式:可以使用快捷键命令,或按:输入命令行。
  • 插入模式:可以输入文本,在正常模式下,按i、a、o等都可以进入插入模式。
  • 可视模式:正常模式下按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V进入可视行模式, 总是整行整行的选中。ctrl+v进入可视块模式。
  • 替换模式:正常模式下,按R进入。

正常模式

  • G可以跳到最后一行

  • gg可以跳到第一行

  • M:移动到屏幕的中央

  • 字符移动

    • 上下左右键,一个一个字符移动
    • hjkl:左/下/上/右
  • 单词移动

    • w:移动到下一个单词首字母(包含标点)
    • W:移动到下一个单词首字母(不包含标点)
    • b:移动到上一个单词首字母(包含标点)
    • B:移动到上一个单词首字母(不包含标点)
    • e/E移动到下一个单尾字母/(包含标点)
  • 逐句移动

    1. (移动到句子的开头
    2. )移动到句子的结尾
  • 段落

    1. {:移动到段落的开头
    2. }:移动到段落的结尾

底行模式命令

  • 常用命令,ESC后加上冒号

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    q  			退出
    w 保存
    q! 强制退出
    wq! 强制保存退出
    set nu 显示行号
    set nonu 不显示行号
    /word 查找内容word n:下一个 N:上一个
    noh 取消高亮
    N 跳转到N行
    . 当前光标行
    $ 缓冲区的最后一行

    # 替换
    开始行,结束行 s/被替换的诗句/替换的内容
    1 s/sad/ddd 将第一行的第一个sad替换为ddd
    1 s/sad/ddd/g 将第一行的所有sad替换为ddd

编辑模式

  • a:光标下一位

  • A:光标的行尾

  • i:光标之前

  • I:光标行的头

  • o:光标下一行

  • O:在光标这一行(当前行挤下去)

  • yy:复制

    • 3yy:从当前行复制3行
  • dd:删除

    • 3dd:从当前行删除3行
  • p:粘贴

  • u:撤销

启动Vim

  • vim -c cmd file- : 在打开文件前,先执行指定的命令;
  • vim -r file- : 恢复上次异常退出的文件;
  • vim -R file- : 以只读的方式打开文件,但可以强制保存;
  • vim -M file- : 以只读的方式打开文件,不可以强制保存;
  • vim -y num file- : 将编辑窗口的大小设为num行;
  • vim + file- : 从文件的末尾开始;
  • vim +num file- : 从第num行开始;
  • vim +/string file- : 打开file,并将光标停留在第一个找到的string上。
  • vim --remote file- : 用已有的vim进程打开指定的文件。 如果你不想启用多个vim会话,这个很有用。但要注意, 如果你用vim,会寻找名叫VIM的服务器;如果你已经有一个gvim在运行了, 你可以用gvim –remote file在已有的gvim中打开文件。

vim多行注释和取消注释

多行注释:

1
2
3
进入命令行模式,按ctrl + v进入 visual block模式,然后按j, 或者k选中多行,把需要注释的行标记起来
按大写字母I,再插入注释符,例如//
按esc键就会全部注释了

取消多行注释:

1
2
3
进入命令行模式,按ctrl + v进入 visual block模式,按字母l横向选中列的个数,例如 // 需要选中2列
按字母j,或者k选中注释符号
按d键就可全部取消注释

强制保存

  • 在使用vim时,当我们以普通用户去打开一个只有root用户才有权限操作的文件时,我们编辑完成之后,正要保存,却发现,这个文件我们没有权限修改。

  • 每次遇到这样的问题,我都很头疼,好不容易把文件编辑完了,却无法保存,就只能放弃,然后退出,再以root权限打开,重新编辑。

  • 底行命令模式执行::w !sudo tee %

    1
    2
    3
    4
    w: 表示保存文件
    !: 表示执行外部命令
    tee: linux命令,这个有点复杂,可以查看linux命令帮助
    %: 在执行外部命令时,%会扩展成当前文件名;这个%区别于替换时的%,替换时%的意义是代表整个文件,而不是文件名
  • 上述方式非常完美的解决了不能保存只读文件的问题,但毕竟命令还是有些长,为了避免每次输入一长串的命令,可以将它映射为一个简单的命令加到 .vimrc 中:

    1
    2
    " Allow saving of files as sudo when I forgot to start vim using sudo.
    cmap w!! w !sudo tee > /dev/null %

    这样,简单的运行:w!!即可。命令后半部分> /dev/null作用为显式的丢掉标准输出的内容。