Vim 中的命令又称为 Ex 命令,它继承之 Unix 早期的文本编辑器 ex。
Vim 中几乎所有的功能都有相应的Ex命令。但我们仅需关注命令行模式比普通模式操作更具优势的地方。
一般来说,普通模式命令操作当前字或行,Ex命令可以在任意位置执行,这意味着无需移动光标就可以作为修改,
而Ex命令最优秀的地方是它拥有在多行上同时执行的能力(Ex命令影响范围广且距离远)。
: 命令提示符
/ 查找提示符(查找提示符只是命令行模式的一种形式)
地址和范围的表示:
构建Ex命令地址及范围的符号:
1 文件的第一行
$ 文件最后一行
0 虚拟行,位于文件第一行的上方。它主要用于对文件的开头进行操作。
. 光标所在行
'm 包含位置标记m的行
'< 高亮选区的起始行
>' 高亮选区的结束行
% 整个文件(: 1,$ 的简写形式)
用行号作为地址:
:1 print 打印第一行内容
用地址指定范围:
:2,5 print 打印2到5行
:.,$ print 打印当前行到最后一行
:%s/{char1}/{char2}/ 对整个文本做替换
用模式指定范围:
:/{char1}/,/{char2}/ print
用偏移量对地址做修正:
:/{char1}/+1,/{char2}/-1 print
:.,.+3 print 打印当前行即当前行后3行
Ex 命令:
set is for setting options
let for assigning a value to a variable
pwd 查看当前工作目录
cd 切换当前工作目录
copy / co / t (co或t是copy简写形式)
:6 copy . 为第6行创建副本,放到当前行下方。
当然,普通命令行模式下的y和p命令也能完成相应的工作,但如果不想覆盖默认寄存器中的当前内容时,就可以使用copy命令了。
而且y和p命令需要跳转,当复制较远的行是,copy命令就显得更高效。
move / m
:2 move 0 第2行移动到行首
:'<,'> m $ 结合可视化模式,'<,'>表示高亮选中部分,整个命令表示把高亮部分移至文档尾部。
autocmd
:au[tocmd] [group] {event} {pat} [nested] {cmd}
通过autocmd,在某个事件发生时,可以调用一条命令。
搜索命名:
grep/vimgrep
grep 是 vim 对外部grep命令的一层封装,vimgrep是内部搜索命令。查询结果会保存在quickfix列表中,:cnext/:cprev 可以用来浏览。
vimgrep 的好处是可移植性,另外可以使用强大的VIM搜索模式。,当然会相对要慢些,因为文件要被读进内存。
:vim[grep][!] /{pattern}/[g][j] {file} ... g表示每个匹配创建一条记录,j 是否跳转到第一个匹配处。
: 1 vimgrep pattern file 只查找第一个匹配(在只需检查是否存在匹配是很有用)
:vimgrep /myfunc/ **/*.c 递归查找目录下的.c文件
:gr[ep][!] [arguments]
:grepgrp 用于定义调用的外部命令行,默认 grepprg=grep -n $* /dev/null
:grepformat 用来指示vim如何解析查找的输出,默认 grepformat=%f:%l:%m,%f:%l%m,%f %l%m
命令行模式的高效编辑场景:
(1)在指定范围上执行普通命令(normal 命令)
:% normal A; 在文件的每行结尾加上;
或 先在普通模式下在1行执行 A;再执行 :2,$ normal .后面命令表示,在第2行道最后一行重复前面的命令。
还可以这样来注释代码:
:10,20 normal i//
运行Shell 命令 :!{cmd}
:shell 启动一个交互的shell 回话,执行完shell命令后,exit退出返回vim。
:read !{cmd} 把{cmd} 命令的输出读入当前缓冲区中。
:write !{cmd} 把缓冲区内容作为{cmd}的标准输入。
实例1(重命名文件):
$vim
:r !ls *.c
:%s/\(.*\).c/mv & \1.bla/
:w !sh
实例2 (排序):
:2,$ !sort -t ',' -k2
命令行模式其它
@: 重复上次的命令,:寄存器总是保持最后执行的命令行命令。
{C-r}{C-w} 用于插入光标下的单词 {C-r}{C-a} 插入光标下的字符串。
set history=200 Vim默认记录最后20条命令,修改为保存200条。
q: 打开命令行窗口,展示历史命令,也可以对命令进行编辑后再执行。q/ 对命令做查找。从命令行模式切换到命令行窗口。
set wildmode=longest,list 在 .vimrc 名设置自动补全格式 。
-----------------------------------------------------------------------------------
参考:
《Vim 使用精巧》 《Practical Vim - edit text at the speed of thought》
阅读(1727) | 评论(0) | 转发(0) |