vim命令

Catalogue
  1. 1. 删除空行
  2. 2. 复制
  3. 3. 移动
  4. 4. TAB替换为空格:
  5. 5. 折叠
  6. 6. 显示不可见字符
  7. 7. QuickFix列表
  8. 8. 替换^m字符
  9. 9. 去掉重复行
  10. 10. 非可见字符
  11. 11. 切换窗口
  12. 12. 删除当前单词
  13. 13. 查找
    1. 13.1. 查找当前单词
    2. 13.2. 大小写敏感查找

删除每行后10个字符(替换+正则匹配到每行后10给字符)
:%s/.{10}$//
删除每行后10个字符
:%s/^.{10}//

\n匹配行尾(换行符),而\r匹配回车符。另一方面,在替换中\n插入空字符,而\r插入换行符(更准确地说,它被视为输入 )。这是一个小的非交互式示例,使用 Vim 命令行功能来说明这一点(换句话说,您可以将以下内容复制并粘贴到终端中以运行它)。 xxd显示结果文件的 hexdump。

1
2
3
4
5
echo bar > test
(echo 'Before:'; xxd test) > output.txt
vim test '+s/b/\n/' '+s/a/\r/' +wq
(echo 'After:'; xxd test) >> output.txt
more output.txt
1
2
3
4
Before:
0000000: 6261 720a bar.
After:
0000000: 000a 720a ..r.

换句话说, \n已将字节 0x00 插入到文本中; \r已插入字节 0x0a。

删除空行

可以使用 :%g/^$/d 命令来删除只有一个换行符的空行

复制

:copy 命令 (缩写形式 :co,或 :t)

1
2
3
4
:3,5t.	把第 3 行到第 5 行的内容复制到当前行下方
:t5 把当前行复制到第 5 行下方
:t$ 把当前行复制到文本结尾
:'<,'>t0 把高亮选中的行复制到文件开头

移动

:move 命令 (缩写形式为 :m)

TAB替换为空格:

:set ts=4

折叠

set foldmethod=indent

1
2
3
4
5
6
7
8
9
10
11
12
13
za	打开/关闭当前的折叠
zc 关闭当前打开的折叠
zo 打开当前的折叠
zm 关闭所有折叠
zM 关闭所有折叠及其嵌套的折叠
zr 打开所有折叠
zR 打开所有折叠及其嵌套的折叠
zd 删除当前折叠
zE 删除所有折叠
zj 移动至下一个折叠
zk 移动至上一个折叠
zn 禁用折叠
zN 启用折叠

显示不可见字符

1
2
3
4
5
6
7
8
:set invlist 
例如,会以^I表示一个tab符,$表示一个回车符等。

也可以:%!cat -A在Vim中调用cat转换显示

或者直接
cat -A file

QuickFix列表

使用某些vim命令,将会使用QuickFix列表在不同文件的不同位置间导航。

例如:使用:make命令进行编译时,遍历编译错误;使用:vimgrep命令进行搜索时,遍历匹配结果;使用:helpgrep命令查找帮助信息时,遍历匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
:vimgrep options *.html


打开QuickFix窗口

:copen

关闭QuickFix窗口

:cclose

:cnext移动到下一个匹配处
:cprevious移动到上一个匹配处
:cfirst移动到第一个匹配处
:clast移动到最后一个匹配处

vim窗口

参考链接1

替换^m字符

1
2

这里的 ^M 要使用 CTRL-V CTRL-M 生成,而不是直接键入 ^M

去掉重复行

1
2
3
4
:sort   //直接排序
:g/^\(.*\)$\n\1$/d //去除重复行
:g/\%(^\1$\n\)\@<=\(.*\)$/d //功能同上,也是去除重复行
:g/\%(^\1\>.*$\n\)\@<=\(\k\+\).*$/d //功能同上,也是去除重复行

非可见字符

1
:set invlist

通过:help digraph-table 可看到所有Vim中可输入的特殊字符:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char  digraph  hex   dec   official name
^@ NU 0x00 0 NULL (NUL)
^A SH 0x01 1 START OF HEADING (SOH)
^B SX 0x02 2 START OF TEXT (STX)
^C EX 0x03 3 END OF TEXT (ETX)
^D ET 0x04 4 END OF TRANSMISSION (EOT)
^E EQ 0x05 5 ENQUIRY (ENQ)
^F AK 0x06 6 ACKNOWLEDGE (ACK)
^G BL 0x07 7 BELL (BEL)
^H BS 0x08 8 BACKSPACE (BS)
^I HT 0x09 9 CHARACTER TABULATION (HT)
^@ LF 0x0a 10 LINE FEED (LF)
^K VT 0x0b 11 LINE TABULATION (VT)
^L FF 0x0c 12 FORM FEED (FF)
^M CR 0x0d 13 CARRIAGE RETURN (CR)

如何打出非可见字符

需要先按下前导键,例如在编辑模式下输入

1
2
3
4
5
6
<Ctrl-K>HT

就会得到非可见字符

其中HT就是通过`:help digraph-table`查出的digraph

参考

切换窗口

1
2
CTRL-W j 光标切换到下一个窗口
CTRL-W k 光标切换到上一个窗口

删除当前单词

1
daw

查找

查找当前单词

在 normal 模式下按下 * 即可查找光标所在单词(word), 要求每次出现的前后为空白字符或标点符号。

例如当前为 foo, 可以匹配 foo bar 中的 foo,但不可匹配 foobar 中的 foo。

按下 g* 即可查找光标所在单词的字符序列,每次出现前后字符无要求。 即 foo bar 和 foobar 中的 foo 均可被匹配到。

大小写敏感查找

在查找模式中加入 \c 表示大小写不敏感查找,\C 表示大小写敏感查找。例如:

/foo\c