vim-读写以及执行shell命令

读取

read,简写r应该是最为实用的命令之一了。因为它可以在不关闭vim的情况下,去读取一个文件内容或者shell命令的输出到文件中。

1
2
3
4
5
eg:
#读取当前目录下的文件
:read !ls
#读取指定文件
:r note

这样执行的时候会将读取的内容置于当前行下。当然还可以指定读取到那一行下

1
2
3
4
5
eg:
#读取到文件开头
:0r !ls
#读取到指定行下
:5r !ip -c a

执行shell命令

!{motion}{program}:将motion指定的文本块通过管道传送给shell的program处理。

使用来执行shell命令,可以和read搭配使用。

1
2
3
eg:
#读取shell输出
:r !echo $PATH | awk -v FS=':' '{print $1}'

motion指的是文本块,所以范围由motion指定。其实在键入!后,进行的移动会被转化为一个数字表示的范围。

1
2
3
4
5
eg:
#对一到五行的内容实行排序
!5Gsort #首先gg移动到文本的第一行,然后执行命令
#当然了可以自己指定要操作的行
5,10!sort

写入文件

write,简写为w,将当前文件中的内容写入磁盘(保存)或另一个文件

1
2
3
4
5
6
7
8
9
eg:
#将vim中编辑的内容保存到磁盘中
:w
#将编辑内容写入另一个文件
:w note
#指定那些写入到另一个文件
:.,$w note #将当前行到文件末尾的内容写入note文件中
#追加到另一文件中
:.w >> note #仅仅将当前行追加另一个文件中

还可以和搭配起来使用

1
2
3
eg:
#统计文本中的字数
:w !wc -l

格式化文本

gq加上要格式化的范围,这个范围由移动等范围操作动作组成

1
2
3
4
5
6
7
eg:
#格式化一段文本
gqap #gq加ap,ap代表a paragraph
#格式化整个文本
gggqG #gg移动到文本开头,gq加G,G代表文本末尾
#格式化三行
gq3j

大小写转换

gU加范围动作,小写转大写

1
2
3
4
5
eg:
#将整个文本都全部变为大写
gggUG #gg移动到文件开头,gU格式化,G指定一直到文件末尾
#将右边三个单词变为大写
gU3w #gU格式化,3w右边三个单词

gu加范围动作,大写转小写

g~加范围动作,大小写反转

tips:使用ctrl+L可以重新绘制屏幕。比如说在打开了一个很大的文件后,vim不会全部渲染,只会渲染当前的文本段,有时候会出现语法高亮绘制错误的情况,只需要ctrl+l刷新一下就可以了