Vim多行编辑是否与SublimateText类似?
我开始使用gvim,但我不太明白多行编辑在gvim中是如何工作的 例如: 原文:Vim多行编辑是否与SublimateText类似?,vim,sublimetext,text-editor,Vim,Sublimetext,Text Editor,我开始使用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,JJJJJ$ 选择所有内容,然后按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;
ctrl+q,JJJJJ$
选择所有内容,然后按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;
发生了什么事?我期待一个类似于Sublimitext的行为:
如果您不知道它是如何工作的,它只会对每一行重复这些操作。如何才能做到这一点?vim在这里做什么?如果您使用“global”命令,您可以在一行或多行线上重复您可以执行的操作
:g/<search>/.<your ex command>
上面的命令将查找具有foo的所有行,并用baz替换该行上所有出现的bar
:g/.*/
在每一行上都可以在Vim中有几种方法可以实现这一点。我不知道哪一个是最重要的 类似于升华文本的想法
第一种是通过多行插入模式。将光标放在屏幕上 在第一行中的第二个“a”,按Ctrl-V键,选择所有行,然后按I键,然后 加上双引号。按
将在每一行上重复该操作
第二种是通过宏。将光标放在第一个字符上,然后开始 使用
qa
录制宏。
使用llll
向右移动,使用进入插入模式
a
,放下双引号,退出插入模式,然后返回到
使用
(或等效项)的行。按j
向下移动一行。
使用q
停止录制。
然后用@a
重播宏。好几次
上述任何一种方法对您有效吗?我不确定vim正在做什么,但这是一个有趣的效果。描述所需内容的方式听起来更像宏的工作方式(
:help macro
)。类似这样的操作可以对宏执行您想要的操作(从正常模式开始):
qa
:将宏记录到a
寄存器0w
:0
转到行的开头,w
跳转一个单词i“
:进入插入模式,插入一个”
,然后返回正常模式2e
:跳到第二个单词的末尾a“
:追加一个”
jq
移动到下一行并结束宏录制qa0wi“2ea”
现在您可以使用@a
执行宏,使用@
重复上一个宏。要应用于文件的其余部分,请执行类似于99@a
假设您的行数不超过99行,宏执行将在到达文件末尾时结束
以下是如何使用可视块模式
(从正常模式开始)实现所需的功能:
visual block mode
,选择要影响的行,G
转到文件底部I“
“
的下一个位置
就足够了帮自己一个忙,去掉Windows兼容层 进入可视块模式的正常快捷方式是
其他人处理过录制宏,以下是一些其他想法:
仅使用可视块模式。
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;
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;
进入视觉块模式并向底部展开选择:
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;
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;
[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;]
I“
获取:
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 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 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;
进入视觉块模式并向底部展开选择:
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;
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;
[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;]
A“
可获得:
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 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 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 |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;
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;
进入视觉块模式,并向底部和右侧展开您的选择:
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“
以将您的选择包围起来:
:正常
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;
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;
[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;]
:“以上给出了一些很好的现成解决方案,但我们也可以尝试一些提供多个游标的插件,如Sublime
我认为这一点很有希望:
它似乎被抛弃了一段时间,但在2014年有所贡献
它非常强大,尽管我花了一点时间来适应这个流程(它非常崇高,但仍然像Vim一样模态)
根据我的经验,如果你安装了很多其他插件,你可能会遇到一些冲突
此功能还有其他一些尝试:
- (仅搜索替换,但使用实时预览)
- (基于上一步)
如果您注意到其中任何一项正在改进,请随时进行编辑。Ctrl-v。。。。。。。。。。。。。。。。启动视觉块选择
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)
6j。。。。。。。。。。。。。。。。。。。。下6行
I.在开头插入
............ 完成开始
2fdl。。。。。。。。。。。。。。。。。第二个“d”l(向右)。(重复插入)
我的解决方案是使用以下两种映射:
map <leader>n <Esc><Esc>0qq
map <leader>m q:'<,'>-1normal!@q<CR><Down>
尽管这会使你无法进行另一次编辑。您必须重新选择您的线路。无需99@a. 如果要在文件的每一行执行宏,请尝试:%norm@a、 没有点(它们只是句子的结尾,不是命令的一部分)9999@a
可能很难看,但它比更容易键入:%norm@一个
,它不会在您刚刚编辑的行上重新运行。很高兴认识我