10 VIM 程序编辑器

1 vim 基本动能

区块选择

多档案编辑

多窗口编辑

vim环境设置

1
2
$ cat ./viminfo  # 记录vim动作的档案
$ sudo vim /etc/vim/vimrc # 我的ubuntu上vim的配置文件

vim常用指令示意图

中文编码的问题

2 指令和快捷键列表

文件操作

文件操作 说明
w 保存
wq 保存退出
q! 不保存退出

删除命令

删除命令(在命令模式下输入) 说明
dw 按回车,就删除了光标所在位置字符
d 就是删除所在行的所有字符(这个对于我们写程序的比较有用)
dd 删除行
u 撤销操作 www.2cto.com

搜索命令

搜索命令 说明
/string string这里就是你要搜索的字符串。
n 跳到当前所在搜索目标的下一个目标处。
shift+n 往回搜索。

括号匹配命令

括号匹配命令 说明
% 将光标放在单括号下面,输入%就会光标自动跳到匹配的括号下,这个对写程序很有用。

复制和选择

复制和选择 说明
ggyG 全部复制
dG 删除光标以后的内容(光标移动到最前面就可以删除所有内容了)
p 在光标出粘帖缓存区内容
yy 复制当前行
nyy 复制光标所在向下n行内容

光标移动命令

光标移动命令 说明
0 移动到光标所在行最前面
$ 移动到光标所在行最后面
H 移动当前屏幕第一行第一列
M 移动当前屏幕中间行第一列
L 移动当前屏幕最后行第一列
nG 移动到第n行
n- 向上移动n行
n+ 向下移动n行
G 移动到最后一行行首

在vim 中执行 shell 命令

:[起始行号, [结束行号]] [r|w] !命令

单纯的执行命令

:!命令: 不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容

1
:!ls -l

将结果插入当前行下一行

:r !命令

将shell命令command的结果插入到当前行的下一行

1
:r !date # 读取系统时间并插入到当前行的下一行

将结果插入指定行

:起始行号,结束行号 !命令

将起始行号和结束行号指定的范围中的内容输入到shell命令处理,并将处理结果替换起始行号和结束行号指定的范围中的内容

  • 可以只指定起始行
  • 当前光标所在行,除可以指定行号外,也可以用.表示
1
2
3
4
5
6
7
8
# 将62行到72行的内容进行排序
:62,72 !sort

# 将62行的小写字母转为大写字母
:62 !tr [a-z] [A-Z]

# 将当前行的小写转为大写
:. !tr [a-z] [A-Z]

将指定行内容作为命令的输入

:起始行号,结束行号 w !命令

将起始行号和结束行号所指定的范围的内容作为命令的输入。不会改变当前编辑的文件的内容

1
2
# 将62行到72行的内容进行排序,但排序的结果并不会直接输出到当前编辑的文件中,而是显示在vim敲命令的区域
:62,72 w !sort

将指定行内容作为命令本身执行

其实仍然是“将制定行内容作为命令的输入”,只不过命令采用的是 bashzsh等,因此输入内容就被当作了命令来执行

1
2
3
4
5
# 把第62行的内容作为bash命令来执行并显示结果,而且不会改变当前编辑的文件的内容
:62 w !bash

# 将当前行的内容作为bash命令来执行
:. w !bash