我开始使用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,$选中所有内容,然后按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;
发生了什么事?我以为会出现与sublimetext类似的行为:
如果你不知道它是如何工作的,它只是重复每一行的操作。怎么能做到呢?Vim在这里做什么?
8条答案
按热度按时间w8biq8rn1#
帮你自己一个忙,删除Windows兼容层。
进入可视块模式的正常快捷方式是
<C-v>
。其他人已经处理过记录宏,下面是一些其他想法:
仅使用 * 可视块 * 模式。
1.将光标放在第二个单词上:
1.点击
<C-v>
进入 visual-block 模式,并向底部扩展您的选择:1.点击
I"<Esc>
以获得:1.将光标放在第三个单词的最后一个字符上:
1.点击
<C-v>
进入 visual-block 模式,并向底部扩展您的选择:1.点击
A"<Esc>
以获得:具有 * 视觉阻断 * 模式和Surround.vim。
1.将光标放在第二个单词上:
1.点击
<C-v>
进入 visual-block 模式,并向右下方扩展您的选择:1.按
S"
,在您的选取项目周围加上“:具有 * 可视线路 * 模式和
:normal
。1.点击
V
选择整行并向底部展开::'<,'>norm ^wi"<C-v><Esc>eea"<CR>
以获得::norm[al]
允许您在一定范围的行上执行 normal 模式命令('<,'>
部分由Vim自动添加,表示“对选定区域执行操作”)^
将光标放在该行的第一个字符上w
移动到下一个字i"
在光标前插入"
<C-v><Esc>
是Vim在此上下文中输入控制字符的方式,这里是<Esc>
,用于退出 insert 模式ee
移动到下一个字的结尾a"
在光标后追加一个"
<CR>
执行命令使用Surround.vim,上面的命令变为
deyfvvtc2#
在Vim中有几种方法来实现这一点。我不知道哪一种最类似于崇高文本的。
第一种方法是通过 * 多行插入模式 *。将光标放在第一行的第二个“a”上,按Ctrl-V,选择所有行,然后按I(大写i),并输入双引号。按Escape将对每一行重复该操作。
第二种方法是通过宏。将光标放在第一个字符上,然后使用
qa
开始录制宏。使用llll
向右移动,使用a
进入插入模式,输入双引号,退出插入模式。然后返回到行的开头,输入<home>
(或等效键)。按j
向下移动一行。使用q
停止录制。然后使用@a
重新播放宏。重复几次。以上方法是否适合您?
kcwpcxri3#
这些都是上面给出的一些很好的开箱即用的解决方案,但是我们也可以尝试一些提供多个光标的插件,比如Sublime。
我觉得这个看起来很有希望:
它似乎被遗弃了一段时间,但在2014年有一些贡献。
这是相当强大的,虽然我花了一点时间来适应流(这是相当崇高的,但仍然像Vim模态)。
根据我的经验,如果你安装了很多其他的插件,你可能会遇到一些冲突!
还有一些其他的尝试功能:
如果您注意到其中任何一项正在改进,请随时进行编辑。
sdnqo3pr4#
如果你使用“global”命令,你可以重复你可以在一个在线上做的任何数量的行。
例如:
上面的命令查找所有包含foo的行,并用baz替换该行中出现的所有bar。
每一行都要做
qacovj5a5#
kmynzznz6#
我不知道
vim
在做什么,但这是一个有趣的效果。你描述你想要的东西的方式听起来更像宏的工作方式(:help macro
)。类似这样的东西会做你想要的宏(在正常模式下开始):qa
:将宏记录到a
寄存器。0w
:0
后藤行首,w
跳转一个字。i"<Esc>
:进入插入模式,插入"
并返回正常模式。2e
:跳到第二个单词的结尾。a"<Esc>
:附加一个"
。jq
移到下一行并结束宏录制。综合考虑:
qa0wi"<Esc>2ea"<Esc>
个现在你可以用
@a
执行宏,用@@
重复上一个宏。要应用到文件的其余部分,请执行类似99@a
的操作,假设你没有超过99行,宏执行将在到达文件末尾时结束。下面是如何使用
visual-block-mode
实现您想要的效果(在正常模式下启动):1.导航到要放置第一个报价的位置。
1.输入
visual-block-mode
,选择要影响的行,然后输入G
以转到文件的底部。1.点击
I"<Esc>
。1.移动到下一个要插入
"
的位置。1.您希望重复刚才的操作,因此简单的
.
就足够了。n8ghc7c17#
我的解决方案是使用这两个Map:
使用方法:
1.选择你的线。如果我想选择接下来的12条线,我只需按
V12j
1.按下
<leader>n
1.对行进行更改
1.确保您处于正常模式,然后按
<leader>m
要进行另一次编辑,您无需再次选择。只需按
<leader>n
,进行编辑,然后按<leader>m
应用即可。工作原理:
<Esc><Esc>0qq
退出可视选择,转到行首并开始录制宏。q
停止录制宏。:'<,'>-1normal!@q<CR>
从视觉化选取范围的开头到结尾的前一行,在每一行上播放宏。<Down>
返回到最后一行。您也可以只Map相同的键,但用于不同的模式:
虽然这会使您无法进行其他编辑,但您必须重新选择行。
a9wyjsp78#
如果有人像我一样发现了这个古老的主题:
一个很棒的插件:https://github.com/mg979/vim-visual-multi/
它真的很接近SublimeText多行编辑体验,效果很好。