[英]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
开始视线选择
`]
将选择范围扩展到移动文本的最后一个字符,准备进一步移动。
根据您的描述,我认为您的问题是双重的:
您似乎在映射的右侧使用命令序列而不是映射本身。
您正在使用v
(可视模式,小写字母v
,性格明智),而不是V
(视线模式,资本v
,行明智)。 这些映射的目的是“冒泡”线条,而不是单词,如果你真的想要所需的效果,你必须使用正确的视觉模式。
正确的命令序列是:
Vj<C-j>
或者,如果你坚持不使用Drew Neil的映射:
Vjxp`[V`]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.