vim使用总结

Catalogue
  1. 1. 删除
  2. 2. 移动
  3. 3. 替换命令
    1. 3.1. 全局替换
    2. 3.2. 局部替换
  4. 4. 查找
  5. 5. 排序
    1. 5.0.1. 文本行排序
    2. 5.0.2. 文本块排序

删除

以下所有输入均在命令模式下:

  • 1.删除光标位置到本行开头
    d0
  • 2.转到文件结尾
    G
    或转到第9行
    9G
  • 3.删除所有内容(先用G转到文件尾) ,使用:
    :1,.d
    或者删除第9行到第200行的内容(先用200G转到第200行) ,使用
    :9,.d
  • 4.删除光标所在处字符
    x
  • 5.删除光标所在前字符(大写 X )
    X
  • 6.删除到下一个单词开头
    dw
  • 7.删除到本单词末尾
    de
  • 8.删除到本单词末尾包括标点在内
    dE
  • 9.删除到前一个单词
    db
  • 10.删除到前一个单词包括标点在内
    dB
  • 11.删除一整行
    dd
  • 12.删除光标位置到本行结尾
    D d$

移动

  • 跳到文件的第一行:
    :0 或者 :1
    gg
  • 跳到文件最后一行:
    :$
    G
  • 移动光标至行首
    home键
    数字0
    ^
  • 移动光标至行尾
    end键
    $ 快捷键”$”前可以加上数字表示移动的行数。例如使用”1$”表示当前行的行尾,”2$”表示当前行的下一行的行尾。

替换命令

语法

1
:[range]s/source/target/[option]

range表示要替换的范围,想要全局替换的话,可以使用一个百分号

1
:%s/xxx/xxxx

另外,小数点表示当前行,美元符号表示最后一行,数字表示范围

1
2
3
:1,.s     替换第一行到当前行
:.,$s 替换当前行到最后一行
:1,$s 替换第一行到最后一行,相当于 :%s

source(源字符) target(目标字符串)

1
:1,.s/123/456

表示把第一行到当前行的首次出现的123替换成456,注意是首次出现,如果要替换某一行全部源字符串需要在后面加上 /g
另外,对于一些特殊字符比如小数点,斜杠,双引号等需要转义,方式是使用反斜杠,在需要转义的字符面前加一个反斜杠 如把”123//“替换为’123\‘

1
:s/\"123\/\/\"/\'123\\\\\'/g

“123//“ 中
“ 转义为 "
/ 转义为 /
‘123\‘ 中
‘ 转义为 '
\ 转义为 \
option选项
/g 全局替换
/c 确认
/p 替换结果逐行显示
组合选项的形式是gc
当前行.与接下来两行+2:

1
:.,+2s/foo/bar/g

全局替换

1
:%s/source/target/g

局部替换

1
:n,ms/source/target

查找

在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车。 Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。
Vim查找支持正则表达式,例如/vim$匹配行尾的”vim”。 需要查找特殊字符需要转义,例如/vim$匹配”vim$”。
注意:查找回车应当用\n,而替换为回车应当用\r(相当于)。

  • 大小写敏感查找
    在查找模式中加入\c表示大小写不敏感查找,\C表示大小写敏感查找。例如:
1
/foo\c
  • 大小写敏感配置
1
2
3
4
" 设置默认进行大小写不敏感查找
set ignorecase
" 如果有一个大写字母,则切换到大小写敏感查找
set smartcase

排序

Vim内置了针对文本进行排序的:sort命令。你可以使用:help :sort命令,查看详细的帮助信息。
请注意,Vim内置的sort命令与Linux系统下的!sort命令并非完全一致。

文本行排序

使用以下命令,可以针对指定行范围内的文本进行排序:

1
:3,16sort

在可视化模式下选中文本,然后执行以下命令可以对选择的文本进行排序:

1
:'<,'>sort

使用以下命令,将在排序时去除重复的行。对于重复的多行,将仅仅保留第一行,而其它的行将被删除。

1
:%sort u

使用以下命令,可以针对所有文本进行倒序排序:

1
:%sort!

使用以下命令,将按照数字进行排序:

1
:%sort n

组合以上命令,则可以按照数字倒序排序:

1
:%sort! n

文本块排序

假设我们需要对以下文本进行排序。其中,每个条目是被“.KS”和“.KE”包围的文本块;而其定义的每个术语则是以“.IP”开头的多行文字。
如果我们希望按术语进行排序,那么可以通过合并行将文本块整合为一个整体,然后进行排序;稍后再重新拆分行,来恢复原有的文本格式。具体步骤如下:
1)将换行符替换为“@@”字符:

1
:g/^\.KS/,/^\.KE/-1s/$/@@/

2)以“.KS”和“.KE”作为首尾标记来合并行:

1
:g/^\.KS/,/^\.KE/j

3)对文本排序:

1
:%sort

4)将“@@ ”字符重新替换为换行符,以恢复原有格式:

1
:%s/@@ /^M/g

通过以上全局替换命令和排序命令,对文档中的特定术语进行了排序,而且保持格式不变。请注意:

为了缩短实例文字的长度,我们使用“…”来表示省略的文字;
在第2步使用j命令合并行时,自动新增了一个空格;所以在第3步的替换命令中,需要查找“@@”字符以及紧随其后的一个空格;
第4步命令中的“^M”,是使用Ctrl-V和Ctrl-M键输入的;如果Ctrl-V键已经被占用,那么可以使用Ctrl-Q键来替代。
原文链接:https://zhuanlan.zhihu.com/p/110650001