繁体   English   中英

为什么这个冒泡文本的Vim映射不能按预期工作?

[英]Why doesn't this Vim mapping for bubbling text work as expected?

所以我按照这里的说明: http//vimcasts.org/episodes/bubbling-text/

我的想法是进入视觉模式并选择几行文字。 然后我按CTRL-k或CTRL-j在我的文件中向上或向下移动选定的文本。 我的.vimrc文件中的映射如下:

nmap <C-k> ddkP
nmap <C-j> ddp
vmap <C-k> xkP`[V`]
vmap <C-j> xp`[V`]

前两个映射用于普通模式( nmap ),它们按预期工作。 对于下降, dd命令删除一行, p命令将光标向下移动并插入该行。 对于上行dd命令删除该行, k命令将光标向上移动一行,然后P命令插入上面的行。

但是,在可视模式下,它不起作用。 以移动几行选定文本为例。 选择文本后, x命令将删除它。 但是p命令将文本准确插入光标所在的位置。 所以,如果我有一个包含以下内容的文件:

one
two
three

并且光标位于一个“o”上。 我点击vj$来选择前两行。 然后我点击x删除它们。 然后我点击p将它们插入下面。 结果如下:

tone
two
hree

在我点击p之前,文件中有一行,光标位于“三”中的“t”。 所以这种行为对我有意义。 我不明白的是为什么专家VimCast教程期望我看到不同的行为。 此外,我想得到我想要的行为。

那些映射完美地工作。

如果我们采用<Cj>可视模式映射:

  • x删除视觉选择,将光标放在删除行正下方的行上。

  • p将删除的行放在当前行下,这是预期的效果。

  • `[将光标移动到已更改文本的第一个字符,此处它是您移动的行的第一个字符。

  • V开始视线选择

  • `]将选择范围扩展到移动文本的最后一个字符,准备进一步移动。

根据您的描述,我认为您的问题是双重的:

  1. 您似乎在映射的右侧使用命令序列而不是映射本身。

  2. 您正在使用v (可视模式,小写字母v ,性格明智),而不是V (视线模式,资本v ,行明智)。 这些映射的目的是“冒泡”线条,而不是单词,如果你真的想要所需的效果,你必须使用正确的视觉模式。

正确的命令序列是:

Vj<C-j>

或者,如果你坚持不使用Drew Neil的映射:

Vjxp`[V`]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM