vim文本编辑器(工具)
vim模式
- 编辑模式(命令模式,默认进入编辑),例如粘贴,删除
- 输入模式(i,a,o)
- 末行模式(在编辑模式按:进入)
打开单个文件(如果没有就新建),默认是处在编辑模式中
- vim FILENAME
- vim /path/to/somefile
- vim +# 文件 (打开文件处在#行)
- vim + 文件(打开文件处在最后一行)
- vim +/PATTERN :打开文件,定位至第一次被PATTERN匹配到的地方行首
移动光标:h l j k
#h 移动#个字符
以单词为单位移动:w移至下一个单词的词首,
e跳至当前或下一个单词的词尾
b跳至当前或前一个单词的词首
#w 移至#单词的词首
行内跳转
0:绝对行首
^: 行首的第一个非空白字符
$:绝对行尾
行间跳转
#G:跳转至第#行
G:最后一行
末行模式下,直接给出行号即可
翻屏:
ctrl+f 向下翻一屏
ctrl+b 向上翻一屏
ctrl+d 向下翻半屏
ctrl+u 向上翻半屏
删除单个字符
x:删除光标所在处的单个字符
#x:删除光标所在处及向后的共#个字符
删除命令:d
d命令跟跳转命令组合使用
#dw(删除#个单词),#de,#db
dG 删除全部
dd:删除当前光标所在行
#dd:删除包括当前光标所在行内的#行
末行模式下:
StartADD,EndADDd
.:表示当前行
$:表示最后一行
+#:向下的#行
:.,+3y表示当前行及向下3行进行复制
粘贴命令P
P:如果删除或复制为事整行内容,则粘贴至光标据的下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面
p:如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面
复制命令y,用法同d命令
修改:先删除内容,再转换为输入模式
c:用法同d命令
替换:r
R:进入替换械,esc退出替换模式
撤消前一次的编辑操作 u
u:撤消前一次的编辑操作
连续u命令可撤消此前的n次操作(n不会大于50,因为内存只保留了前50次的操作)
#u:直接撤消前#次操作
重复前一次编辑操作
.
可视化模式
v:按字符选取
V:按矩形选取
查找
/PATTERN 向后查找
?PATTERN 向前查找
n
N
查找并替换
在末行模式下使用s命令
使用vim编辑多个文件
vim FILE1 FILE2 FILE3
:next 切换至下一个文件
:prev 切换至上一个文件
:last 切换至最后一个文件
:first 切换至第一个文件
:qa 退出全部文件
分屏显示
ctrl+w, s:水平拆分窗口
ctrl+w, v:垂直拆分窗口
在窗口间切换
ctrl+w, ARROW
:qa 关闭所有窗口
分窗口编辑多个文件
vim -o :水平分割显示
vim -O :垂直分割显示
将当前文件中部分内容另存为另外一个文件,末行模式下使用命令w
:w
:ADDR1,ADDR2w /path/to/somewhere
将另外一个文件的内容填充在当前文件中
:r /path/to/somefile
跟shell交互
:! COMMAND
替换
- :s/old/new - 用new替换当前行第一个old。
- :s/old/new/g - 用new替换当前行所有的old。
- :n1,n2s/old/new/g - 用new替换文件n1行到n2行所有的old。
- :%s/old/new/g - 用new替换文件中所有的old。
- :%s/^/xxx/g - 在每一行的行首插入xxx,^表示行首。
- :%s/表示行尾。
- 所有替换命令末尾加上c,每个替换都将需要用户确认。 如:%s/old/new/gc,加上i则忽略大小写(ignore)。
还有一种比替换更灵活的方式,它是匹配到某个模式后执行某种命令,
- 语法为 :[range]g/pattern/command
- 例如 :%g/^ xyz/normal dd。
- 表示对于以一个空格和xyz开头的行执行normal模式下的dd命令。
关于range的规定为: - 如果不指定range,则表示当前行。
m,n: 从m行到n行。 - 0: 最开始一行(可能是这样)。
- $: 最后一行
- .: 当前行
- %: 所有行
查找正则表达式
- \d: 表示十进制数
- \s: 表示空格
- \S: 非空字符
- \a: 英文字母
- \|: 表示 或
- \.: 表示.
- {m,n}: 表示m到n个字符。这要和 \s与\a等连用,如 \a\{m,n} 表示m 到n个英文字母。
- {m,}: 表示m到无限多个字符。
- **: 当前目录下的所有子目录。
- :help pattern得到更多帮助。
#从3行到6行,第2个字符后面添加空格
常用的操作
删除空行:g/^$/d
删除空行以及只有空格的行:g/^\s*$/d
删除以 # 开头或 空格# 或 tab#开头的行:g/^\s*#/d
对于 php.ini 配置文件,注释为 ; 开头进行删除:g/^\s*;/d
使用正则表达式删除行
如果当前行包含 bbs ,则删除当前行:/bbs/d
删除从第二行到包含 bbs 的区间行:2,/bbs/d
删除从包含 bbs 的行到最后一行区间的行:/bbs/,$d
删除所有包含 bbs 的行:g/bbs/d
删除匹配 bbs 且前面只有一个字符的行:g/.bbs/d
删除匹配 bbs 且以它开头的行:g/^bbs/d
删除匹配 bbs 且以它结尾的行:g/bbs$/d
.ini 的注释是以 ; 开始的,如果注释不在行开头,那么删除 ; 及以后的字符:%s/\;.\+//g
删除 # 之后所有字符%s/\#.*//g
一些按键
- gd: 跳转到局部变量的定义处;
- gD: 跳转到全局变量的定义处,从当前文件开头开始搜索;
- g;: 上一个修改过的地方;
- g,: 下一个修改过的地方;
- [[: 跳转到上一个函数块开始,需要有单独一行的{。
- ]]: 跳转到下一个函数块开始,需要有单独一行的{。
- []: 跳转到上一个函数块结束,需要有单独一行的}。
- ][: 跳转到下一个函数块结束,需要有单独一行的}。
- [{: 跳转到当前块开始处;
- ]}: 跳转到当前块结束处;
- [/: 跳转到当前注释块开始处;
- ]/: 跳转到当前注释块结束处;
- %: 不仅能移动到匹配的(),{}或[]上,而且能在#if,#else, #endif之间跳跃。