例如,猜猜我有这个块。
if( first > second)
{
}
我想把这些单词换成一个操作符。
if( second > first)
{
}
自然如何处理vim命令?
答案 0 :(得分:2)
如果您想手动执行此操作,可以执行以下操作(光标位于first
):
yiw yank current word
ww move cursor to 'second'
viw visually select current word
p put from unnamed register (selected word goes to unnamed register)
bbb move cursor back to 'first'
viw visually select current word
p put from unnamed register
这是相对直观的,但无可否认,非常涉及。
您可以将其映射到一些易于键入的键组合:
nnoremap <key> yiwwwviwpbbbviwp
但你可能最终不得不在角落案件之后与角落案件作斗争。
或者您可以将此代码段(找到here)放在vimrc
中,然后只需按<key1>
即可将当前“字”与之前的<key2>
交换为交换当前的“单词”与下一个:
nnoremap <key1> "_yiw?\v\w+\_W+%#<CR>:s/\v(%#\w+)(\_W+)(\w+)/\3\2\1/<CR><C-o><C-l>
nnoremap <key2> "_yiw:s/\v(%#\w+)(\_W+)(\w+)/\3\2\1/<CR><C-o>/\v\w+\_W+<CR><C-l>
答案 1 :(得分:2)
我有vim-exchange插件,允许我以这种方式更改单词。
在第一个单词时按cxiw
,然后跳到第二个单词并按.
答案 2 :(得分:1)
以更自然的方式做到这一点,怎么样?
:map <f7> <esc>dbwPwdwbbPl<esc>
将光标放在<
上,然后按 F7 。
答案 3 :(得分:1)
此解决方案使用以下功能:
function! Swap()
normal di)
let a=split(@")
let @b=a[2]." ".a[1]." ".a[0]
normal %"bp
endfunction
可以映射到gs
,例如:
nnoremap <silent> gs :call Swap()<cr>
这种方法的一个缺点是它比基于mappigs的解决方案更复杂。它的优点是它可以将光标放在括号(...)
内的任何位置。