vim实用操作
vim吧
全部回复
仅看楼主
level 3
laotangsky 楼主
前言
看了很多教程,很多都是讲讲dw、cw、插件配置的内容,实际操作总是不知道该用哪些命令,想把平时遇到的操作写下来,与大家交流交流。
Example 1.
用已有单词a快速替换单词b。
假设文本内容如下(用下划线表示光标位置):
This is test txt.
_Jack is man.
Kate is a woman.
Tom is a robot.
问题:用单词Jack 快速替换单词Tom 。
如果不知道光标位置,也可以用/Ja回车,移动光标到Jack位置,
有2种方法:
yw jj vep
yiw jj viwp
补充:
最初遇到这个问题的时候,我首先想到的做法是是:yw复制Jack,dw删除Tom,然后用p粘贴。这个做法实际上是行不通的。
有时候我们用yw复制了Jack,但是不小心使用了类似dw、cw的带有剪切操作的命令,此时无名寄存器已经被刷新了,用p命令粘贴出来的就不是Jack了,那怎么办呢?实际上y命令还会在复制专用寄存器0有一个备份,所以还可以用"0p来粘贴Jack,如:
yw jj dw esc "0p
总结:如果不想覆盖寄存器,不要用cw,dw去修改目标文本,而是直接vw选中文本,然后执行粘贴p。
2016年10月05日 16点10分 1
level 3
laotangsky 楼主
Example 2.
文本内容:
{
Bob
Sarah
Sam
Mick
Jill
}
要求将以上文本修改为:
{
Console.WirteLine("Bob");
Console.WirteLine("Sarah");
Console.WirteLine("Sam");
Console.WirteLine("Mick");
Console.WirteLine("Jill");
}
2016年10月05日 18点10分 2
level 3
laotangsky 楼主
这个例题是我在优酷视频上看到的,我能想到的就是宏了,以下操作空格不用输,只是为了方便阅读,加入<TAB>是为了格式化代码,原文本缩进格式错误,cw可以修正行首的空白:
/Bob<CR>
qq 0 cw<TAB>iConsole.WirteLine("<ESC>A");<ESC>jq
4@q
补充:
有个auto-pair插件可以自动添加双引号,Fastwrap功能我试了一下,如果启用了auto-pair插件,需要先给单词添加引号",再添加(),最后才添加函数调用。上面的例子可以这样操作:
/Bob<CR>
^i " <M-E> <ESC> ^ i ( <M-E> <ESC> 0 cw <TAB> Console.WriteLine<ESC>A; <ESC> j
4@q
感觉效率反而降低了,不知道是不是我的操作方法有问题。
关于auto-pair插件,有个奇怪的现象,如果不输入符号,直接在单词前面插入模式下执行<M-E>,会将该单词字母逆序,比如abc会变成cba,看doc与实际操作也对应不上,doc上说只要按下M-E键就会自动添加圆括号(),但是我实践后发现要单词前先输入符号(括号或者引号),然后按<M-E>键,就会自动将单词移动到符号中。
2016年10月05日 20点10分 3
level 3
laotangsky 楼主
vim-surround装了好久一直没怎么用过,刚好试了一下,太酷了。
所以Example 2 还可以这样:
/Bob<CR>
"q yss" yss) 0cw <TAB> Console.WriteLine <ESC> A; <ESC>j
4@q
2016年10月05日 20点10分 4
1