单词选择交换

时间:2014-07-30 20:38:33

标签: vim

我在vim.wikia中找到了一个非常有用的提示(提示47),它建议进行视觉模式交换。

  

要使用此映射:首先,删除一些文本(使用如下命令)   正常模式下的daw或dt,或视觉模式下的x)。然后,使用视觉模式   选择其他文本,然后按Ctrl-X。这两段文字   然后应该交换。

:vnoremap <C-X> <Esc>`.``gvP``P

我按照指示做了,并且工作正常,除了一个小故障(非常小,我必须承认):如果我想交换以下两个文本:

[some text not to be swapped] London and Barcelona
...
[some other text not to be swapped] New York and Buenos Aires

我最终得到了:

[some text not to be swapped]New York and Buenos Aires
...
[some other text not to be swapped] London and Barcelona 

]和纽约之间没有空间。

这可能是因为我不完全理解(至少可以说)上面的内容:vnoremap,并且不知道如何在其中插入空格。

欢迎您的帮助(和解释)

2 个答案:

答案 0 :(得分:1)

问题是由于P在光标之前粘贴了:因为光标在空格上,粘贴将其推到行尾(是的,你应该有一个尾随空格,现在)。

使用p可以修复这个特定用例的映射,&#34;行尾的文本&#34;但是它会混淆我认为该映射的一般情况在#34;。

中创建了#34;文本

修改

这个快速和脏的函数检查光标是否在行的末尾,然后决定它是p还是P,但是......你也可以使用该提示中列出的插件之一

function! Swap()
    normal `.``gvP``
    if col('.') == len(getline('.'))
        normal p
    else
        normal P
    endif
endfunction

xnoremap <F7> <Esc>:call Swap()<CR>

答案 1 :(得分:1)

如果您不介意安装插件,有几个提供此插件以及更多内容:其中包括SwapText plugin。 (插件页面包含指向其他插件的链接。)