Alf*_*oVR 112 vim text-editor 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;
Run Code Online (Sandbox Code Playgroud)
ctrl + q,jjjjjj,$ everything被选中,然后我按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;
Run Code Online (Sandbox Code Playgroud)
发生了什么?我期望一种类似于sublimetext的行为:

如果你不知道它是如何工作的,它只是重复每一行的动作.怎么能实现呢?vim在这做什么?
rom*_*inl 188
删除Windows兼容性层,帮自己一个忙.
进入Visual-Block模式的常规快捷方式是<C-v>.
其他人已经处理过录制宏,这里有一些其他的想法:
仅使用可视块模式.
将光标放在第二个单词上:
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;
Run Code Online (Sandbox Code Playgroud)点击<C-v>进入视觉块模式并将选择范围扩展到底部:
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;
Run Code Online (Sandbox Code Playgroud)命中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;
Run Code Online (Sandbox Code Playgroud)将光标放在第三个单词的最后一个字符上:
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;
Run Code Online (Sandbox Code Playgroud)点击<C-v>进入视觉块模式并将选择范围扩展到底部:
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;
Run Code Online (Sandbox Code Playgroud)命中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;
Run Code Online (Sandbox Code Playgroud)使用visual-block模式和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;
Run Code Online (Sandbox Code Playgroud)点击<C-v>进入视觉区块模式并向左下方展开您的选择:
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;
Run Code Online (Sandbox Code Playgroud)点击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;
Run Code Online (Sandbox Code Playgroud)用视线模式和:normal.
点击V选择整行并向下展开:
[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;]
Run Code Online (Sandbox Code Playgroud)执行以下命令::'<,'>norm ^wi"<C-v><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;
Run Code Online (Sandbox Code Playgroud)
:norm[al]允许您在一系列行上执行正常模式命令(该'<,'>部分由Vim自动添加,意味着"作用于所选区域")
^ 将光标放在该行的第一个字符处
w 转到下一个单词
i""在光标前插入一个
<C-v><Esc>是Vim在这种情况下输入控制字符的方法,这里它<Esc>用于退出插入模式
ee 移到下一个单词的末尾
a""在光标后附加一个
<CR> 执行命令
使用Surround.vim,上面的命令变为
:'<,'>norm ^wvees"<CR>
Run Code Online (Sandbox Code Playgroud)joe*_*dle 27
这些是上面给出的一些优秀的开箱即用解决方案,但我们也可以尝试一些提供Sublime等多个游标的插件.
我觉得这个很有希望:
它似乎已经放弃了一段时间,但在2014年有一些贡献.
它非常强大,虽然我花了一些时间来习惯流程(这很像Sublime,但仍然像Vim一样模态).
根据我的经验,如果你安装了很多其他插件,你可能会遇到一些冲突!
此功能还有其他一些尝试:
如果您发现任何这些正在改进,请随时编辑.
Roo*_*ook 26
在Vim中有几种方法可以实现这一点.我不知道哪些与Sublime Text最相似.
第一个是通过多线插入模式.将光标放在第一行的第二个"a",按Ctrl-V,选择所有行,然后按I,然后放入双引号.按下<esc>将在每一行重复操作.
第二个是通过宏.将光标放在第一个字符上,然后开始录制宏qa.向右移动llll,进入插入模式
a,放下双引号,退出插入模式,然后用<home>(或等效的)返回行的开头.按j向下移动一行.停止录制q.然后重播宏@a.几次.
上述任何一种方法都适合您吗?
sri*_*lla 12
如果你使用"全局"命令,你可以在一个在线的任何行上重复你可以做的事情.
:g/<search>/.<your ex command>
Run Code Online (Sandbox Code Playgroud)
例:
:g/foo/.s/bar/baz/g
Run Code Online (Sandbox Code Playgroud)
上面的命令查找所有具有foo的行,并用baz替换该行上所有出现的bar.
:g/.*/
Run Code Online (Sandbox Code Playgroud)
将在每一行做
我不确定vim是做什么的,但这是一个有趣的效果.你描述你想要什么的方式听起来更像是宏工作(:help macro).像这样的东西可以用宏做你想要的(从正常模式开始):
qa:记录要a注册的宏.0w:0转到行首,w跳一个字.i"<Esc>:输入insert-mode,插入a "并返回正常模式.2e:跳到第二个单词的结尾.a"<Esc>:附加一个".jq 移至下一行并结束宏录制.合在一起: qa0wi"<Esc>2ea"<Esc>
现在您可以执行宏@a,重复上一个宏@@.要应用于文件的其余部分,执行类似99@a假设您没有超过99行的操作,宏执行将在到达文件末尾时结束.
以下是如何实现您想要的visual-block-mode(从正常模式开始):
visual-block-mode,选择要影响的行,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)
Run Code Online (Sandbox Code Playgroud)