Vim多行编辑就像在sublimetext?
我开始使用gvim,并且我不太明白gvim中的多行编辑是如何工作的。
例如:
原文:
asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd;
Ctrl + q,jjjjjj,$一切都被选中,然后我按我来做一个多行插入。
我的意图是在第一行插入引号,然后按Esc:
asd "asd asd" asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd;
发生了什么? 我期待一个类似sublimetext的行为:
如果你不知道如何工作,它只是重复每一行的行动。 怎么能做到这一点? vim在这里做什么?
通过删除Windows兼容层来帮助自己。 进入可视化块模式的正常快捷方式是<Cv>
。
其他人已经处理录制macros,这里有一些其他的想法:
只使用可视块模式。
-
把光标放在第二个单词上:
asd |a|sd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd;
-
点击
<Cv>
进入可视化块模式并向下扩展您的select:asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd;
-
打
I"<Esc>
获得:asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd;
-
把光标放在第三个单词的最后一个字符上:
asd "asd as|d| asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd;
-
点击
<Cv>
进入可视化块模式并向下扩展您的select:asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd;
-
打
A"<Esc>
来获得:asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd;
使用可视块模式和Surround.vim 。
-
把光标放在第二个单词上:
asd |a|sd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd;
-
点击
<Cv>
进入可视化块模式,并向右下方展开您的select:asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd;
-
击中
s"
获得:asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd;
可视线模式和:normal
。
-
按
V
来select整条线并向底部展开:[asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;]
-
执行这个命令:
:'<,'>norm ^wi"<Cv><Esc>eea"<CR>
来获得:asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd;
-
:norm[al]
允许你在一系列的行上执行正常模式的命令('<,'>
部分是由Vim自动添加的,意思是“作用于选定的区域”) -
^
把光标放在行的第一个字符上 -
w
移到下一个单词 -
i"
在光标前插入一个"
-
<Cv><Esc>
是Vim在此上下文中input控制字符的方式,这里是用来退出插入模式的<Esc>
-
ee
移动到下一个单词的末尾 -
光标后面有
a"
附加一个"
-
<CR>
执行该命令
使用Surround.vim,上面的命令变成
:'<,'>norm ^wvees"<CR>
-
这些是上面给出的一些很好的现成的解决scheme,但是我们也可以尝试一些提供像Sublime这样的多个游标的插件。
我认为这个看起来很有希望:
似乎放弃了一段时间,但在2014年有一些贡献。
这是相当强大的,虽然我花了一点时间去适应stream量(这是相当崇高的,但仍然模态像Vim)。
根据我的经验,如果你有很多其他的插件安装,你可能会遇到一些冲突!
还有一些其他的尝试在这个function:
- https://github.com/osyo-manga/vim-over (search – 只replace,但与实时预览)
- https://github.com/paradigm/vim-multicursor
- https://github.com/felixr/vim-multiedit
- https://github.com/hlissner/vim-multiedit (基于以前)
- https://github.com/adinapoli/vim-markmultiple
- https://github.com/AndrewRadev/multichange.vim
如果您发现任何正在改进的情况,请随时编辑。
有几种方法可以在Vim中完成。 我不知道哪一个与Sublime Text最相似。
第一个将通过多行插入模式 。 将光标移到第一行的第二个“a”,按下Ctrl-V
,select所有行,然后按I
,然后放入一个双引号。 按<esc>
键将重复每一行的操作。
第二个是通过macros。 把光标放在第一个字符上,然后用qa
开始录制一个macros。 用llll
进入右边,用a
,进入插入模式,放下一个双引号,退出插入模式,然后用<home>
(或等效)返回到你的行的开头。 按j
向下移动一行。 用q
停止录音。 然后用@a
重播macros。 几次。
以上任何一种方法都适合你吗?
如果你使用“全局”命令,你可以在一个在线的任意行上重复你可以做的事情。
:g/<search>/.<your ex command>
例:
:g/foo/.s/bar/baz/g
上面的命令查找所有具有foo的行,并用bazreplace该行上所有出现的行。
:g/.*/
将在每一行上做
我不确定vim
在做什么,但这是一个有趣的效果。 你描述你想要的方式听起来更像是macros如何工作( :help macro
)。 像这样的事情会做你想要的macros(从正常模式开始):
-
qa
:将macroslogging到寄存器。 -
0w
:0
开始行,w
跳一个字。 -
i"<Esc>
:进入插入模式,插入一个"
并返回到正常模式。 -
2e
:跳到第二个单词的结尾。 -
a"<Esc>
:追加一个"
。 -
jq
移到下一行并结束macros录制。
综合起来: qa0wi"<Esc>2ea"<Esc>
现在你可以用@a
来执行macros,用@@
重复上一个macros。 要应用到文件的其余部分,请执行类似于99@a
(假定您的行数不超过99行),macros执行将在文件结束时结束。
以下是如何使用visual-block-mode
(以正常模式启动)实现你想要的function:
- 导航到你想要的第一个报价。
- 进入
visual-block-mode
,select你想要影响的行,G
去文件的底部。 - 打
I"<Esc>
。 - 移动到你想插入的下一个点
"
。 - 你想重复你刚刚做的这么简单
.
就足够了。
Ctrl-v ................ start visual block selection 6j .................... go down 6 lines I" .................... inserts " at the beginning <Esc><Esc> ............ finishes start 2fdl. ................. second 'd' l (goes right) . (repeats insertion)