vim实用技巧读书笔记(7)

本文介绍了在Vim编辑器中高效使用的技巧,包括重复上次的Ex命令、自动补全Ex命令、把当前单词插入到命令行、回溯历史命令、运行shell命令等。通过这些技巧,用户可以提高工作效率。
技巧31 重复上次的Ex命令

.命令可以重复上次的普通模式命令,然而,如果想重复上次的Ex命令的话,我们得使用@:才行,知道如何回退上次的命令永远是有价值的.

我们见识过了如果用.命令重复上次的修改,但是 . 命令不会重复由vim命令行中做出的修改,作为替代,我们可以使用@:来重复上次的Ex命令

例如:下面两条命令在遍历缓冲区列表的条目时非常有用,用:bn[ext]可以在列表中逐项正向移动,而:bp[revious]命令则进行反向移动(技巧26详细讨论了缓冲区列表)假设缓冲区列表有大约十几个条目,我们打算逐个查看每个缓冲区,因此可以输入一次下面的命令:

:bnext
然后用@:重复执行此命令,留意一下这和运行宏的相似之处,另外需要注意的是:寄存器总是保留着最后执行的命令行命令.在运行过一次@:后,后面就可以用@@命令来重复它.

如果按@:命令执行太多,错过了目标,怎么改变方向朝回跳呢?我们可以执行:bprevious 命令,但是如果再次执行@:命令会发生什么?没错,他会反向遍历缓冲区列表,恰恰与最初的方向相反,这会把人绕晕…

这种情况下,更好的选择是使用<C-o>命令,每次运行:bnext命令(或用@:命令重复执行它)时,它都会在跳转列表中添加一条记录,而<C-o>命令会回到跳转列表的上条记录.

我们可以执行一次:bnext,然后用@:重复任意多次,如果想朝回跳,就用<C-o>命令,这样一来,如果接下来还想继续正向遍历缓冲区列表,就可以继续用@:命令.
<C-o>命令,也能够回退:next :tnext 等命令执行的结果,然而对Ex命令,要用u键才能撤销其影响
技巧32 自动补全Ex命令

vim 在选取Tab补全的补全项时是非常智能的,它会检查命令行上已经输入的上下文,然后再构建合适的补全列表:例如,可以这样输入:
:col<C-d>
<C-d>命令会让Vim显示可用的补全列表.另外,如果我们多次按<tab>键的话,命令行上会依次显示colder,colorscheme,然后回到最初的col,如此循环往复,想要反向遍历补全列表,可以按<S-Tab> shift + tab

假设我们想改配色方案,但是不太记得要用的配色方案的名称,这个时候可以用命令列出所有的可用选项:
:colorscheme <C-d>
我们想激活solarized方案,只需输入字母”so”,然后按Tab键即可补全此命令.

在多个补全项之间选择
<Tab> <S-Tab>
<C-n> <C-p>
<Right> <left>

正向遍历 反向遍历

技巧33 把当前单词插入到命令行

var tally;
for (counter=1; tally <= 10; tally++) {
// do something with tally
};

{start} * cwcounter<Esc>
当按下*键时,光标会正向跳到下一匹配处,不过光标始终停留在相同的单词上.接下来,我们可以输入cwcounter对其进行修改.

然后我们用:substitute命令完成其余的修改,由于光标已经在单词”counter”上了,因此我们无需再次输入它,而是直接用<C-r><C-w>映射项把它插入到替换域.

:%s//<C-r><C-w>/g
如果想要插入光标下的子串的话,我们可以用<C-r><C-a>

技巧34 回溯历史命令

先按:键切换到命令行模式,在保持提示符为空的情况下按<up>
vim 缺省会记录最后20条命令.可以把set history=200 加入vimrc文件中
vim 不仅会记录Ex命令的历史,还会为查找命令单独保存一份历史记录.

结识命令行模式
如果我们正在写一个简单的ruby脚本,发现每做出一个修改,都会执行下面两条命令:
:write
!ruby %

如果接连执行了几次这两条命令后,我们想简化工作过程.
:write | !ruby %

1.按q:调出命令行窗口

A␣|<Esc>
J
:s/write/update
<CR> 按enter执行命令

q/ 打开查找命令历史的命令行窗口
q: 打开Ex命令历史的命令行窗口
<Ctrl-f>从命令行模式切换到命令行窗口

技巧35 运行shell命令

:!ls

!ls 和:ls的不同之处在于前者调用的是shell中的ls命令,而:ls调用的是Vim的内置命令,用来显示缓冲区列表的内容.

如果想执行多条命令呢?
:shell

pwd

ls

exit

就相当于暂停当前的作业,放到后台,然后在稍后的某个时间再把它调回到前台继续运行.

jobs 我们可以用fg命令唤醒一个被挂起的作业,把它移到前台. ctrl-z 挂起命令.

write !sh 命令的作用是在shell中执行当前缓冲区中的每行内容.
而write! sh 命令是吧缓冲区内容写到一个名为sh的文件中,这里的!会让vim覆盖掉任何已存在的sh文件.

使用外部命令过滤缓冲区内容
first name, last name, email
john,smith, john@example.com
drew,neil,drew@vimcasts.org
jane,doe,jane@example.com

:2,$!sort -t”,” -k2
上面的命令是基于第二个字段”姓氏”来重拍这些记录,我们可以用-t”,”参数告诉sort命令,这些记录以逗号分割,然后再用 -k2参数指定按第二个字段进行排序.

因为文件的第一行是标题信息,我们想把它保留在文件顶部,因此需要用范围,2,$把它排除在排序范围之外.

:shell 启动一个shell
:!{cmd} 在shell中执行{cmd}
:read !{cmd} 在shell中执行{cmd},并把其标准输出插入到光标下方
:[range]write !{cmd} 在shell中执行{cmd},以[range]作为标准输入.
:[range]!{filter} 使用外部命令{filter} 过滤指定的[range]

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值