我在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,并且不知道如何在其中插入空格。
欢迎您的帮助(和解释)
答案 0 :(得分:1)
问题是由于P
在光标之前粘贴了:因为光标在空格上,粘贴将其推到行尾(是的,你应该有一个尾随空格,现在)。
使用p
可以修复这个特定用例的映射,&#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。 (插件页面包含指向其他插件的链接。)