vi & vim

vim

vi (visual)是一个经典且强大的文本编辑器,所有的UNIX-like系统都会内置vi

Vim (vi improved)是vi的升级版。其代码补全、编译及错误跳转等方便编程的功能特别丰富,在编程中十分好用

yum -y install vim

Vim 有Normal, Visual, Insert 和 Command-line四种模式

普通模式

普通模式又称命令模式,通过按下功能按键进行编辑

  • 移动光标:

    hjkl(←↓↑→),以及数字 0 (Home), $ (End)

    w 跳转到下个单词 b 跳转到上个单词

    f+字母 找到下一个该字母并跳转到此

    多次移动:

    30j (或30Enter或30↓),向下30行

    10Space (或10l或10→)向右10字符

    G(移动到最后一行)、20G(第20行),gg(即1G,第一行)

  • 翻页

    Ctrl+fbdu

    即 front back down up

    分别是向下一页(PgDn)、向上一页(PgUp)、向下半页、向上半页

  • 复制

    yy复制当前行

    yaw: 复制当前单词(yank all word)

    y4j 复制下四行 y8l复制右8格

    yfr 复制到下一个r为止的内容

  • 粘贴:

    p贴在后面(下面),P贴在前面(上面)

  • 删除:

    d 与 y 命令非常相似,可以配合hjkl, G, 0, $, f+字母 等使用

    例如 d8j, dfw

    dd删除当前行

    x向后删除,X向前删除,10x删除后面的10个字符

  • 撤销 uCtrl+r重做上一个动作

  • .重复前一个动作

插入模式

iIoOaArRc

  • c --change

    caw删除当前单词进入插入模式

    cc删除当前行进入输入模式

    c4j删除下4行进入输入模式

代码补全
Ctrl+x -> Ctrl+n使用当前文件内的单词来补全
Ctrl+x -> Ctrl+f使用当前目录的文件名来补全
Ctrl+x -> Ctrl+ovim根据扩展名使用内置策略来补全

可视模式

vV^V

选中之后可以使用y d c等复制、删除、改变

缩进:

  • 输入V进入可视行模式
  • <>向前或向后缩进

多行注释:

  • Ctrl+v进入可视块模式,移动光标选中要注释的行
  • 按I (insert)行首插入注释符(如#),如果插入空格则可以缩进
  • Esc

取消多行注释:可视块模式选中注释符号按d删除

命令行模式

普通模式按下:, /?进入命令行模式

:
:set nu / nonu是否显示行号
:set autoindent / noautoindent是否自动缩进,即继承上一行的缩进量
:wq保存退出
:q!强制退出
:w [filename]另存为
:r [filename]将另外的文件读取到游标所在行后面
:n1,n2 w [filename]将两行之间的内容另存为新文件
:! [command]执行命令,例如:! ls/home
查找
/关键字回车 查找下一个,按n继续查找下一个,N查找上一个
?关键字往上查找
  • 查找支持正则表达式,例如/^waline匹配行首的单词"waline",如果要查找特殊字符则需要转义\

  • 加入\c表示不区分大小写,\C表示区分大小写。例如/foo\c能匹配"FOO""Foo"等字符串

    编辑~/.vimrc可以配置大小写敏感性:

1
2
3
4
# 设置默认不区分大小写
set ignorecase
# 只要有一个大写字母,则切换到区分大小写查找
set smartcase
  • 查找当前单词:在普通模式下按*即可查找光标所在单词。例如当前为foo,则可匹配foo bar中的foo,但不会匹配foobar中的foo。按g*foo barfoobar都能匹配。
替换:{范围}s/{目标}/{替换}/{选项}
:10,20s/word1/word2/g在10行20行之间替换word1为word2
:.,+2s/word1/word2/i在当前行与下两行之间替换,且忽略大小写
:%s/word1/word2/gc全文寻找和替换,且每个替换前询问(confirm)
分屏
:sp [filename]分屏打开文件,默认是当前文件
Ctrl+W管理窗口,再按 j,k或方向键切换窗口,q关闭