回答:
私が最初にこれを手に入れた場所を覚えていませんが、少なくとも数年間は〜/ .vimrcにあります:
" Swap the word the cursor is on with the next word (which can be on a
" newline, and punctuation is "skipped"):
nmap <silent> gw "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><C-o>:noh<CR>
これを定義したら、通常モードで「param1」のどこかにカーソルを置き、次のように入力するだけです。 gw
@Heptiteの回答に対して+1。
完全を期すために、ここに私の.vimrcにあるものを示します。
" push current line up or down
nnoremap <leader><Up> ddkP
nnoremap <leader><Down> ddp
" exchange character under cursor with the next character without moving the cursor
nnoremap gc xph
" exchange word under cursor with the next word without moving the cursor
nnoremap gw "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><C-o><C-l>
" push word under cursor to the left
nnoremap <leader><Left> "_yiw?\w\+\_W\+\%#<CR>:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><C-o><C-l>
" push word under cursor to the right
nnoremap <leader><Right> "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><C-o>/\w\+\_W\+<CR><C-l>
出典:VIMウィキ。
私(およびwiki)gw
は、Heptiteのものとは少し異なります。どっちがいいのかわかりません。
その長い解決策はいです。カーソルが左にある最初の単語の最初の文字、つまり「p」であるとします。これを行いますdwlpldw%p
。これは特別な場合に適合します。毎日の編集はどうですか?dwwP
またはをお試しくださいdWWP
。:D
ヒント:頻繁にこれを行う必要がない場合は、常に長い正規表現を作成しないでください。そうでなければ、vimrcがブームになります。すべてのvimユーザーは、組み込みのカーソル移動に精通している必要があります。
vim-exchange、Repeatable(repeat.vimに依存)、およびargtextobjの組み合わせを使用して、繰り返し可能なマッピングを作成しました。
" Swap function arguments, move the argument under the cursor to the left or to
" the right.
Repeatable map <leader>al cxiaf,cxia
Repeatable map <leader>ah cxiaF,hcxia
これらのマッピングに交換および反復可能なプラグインを使用する利点は次のとおりです。
u
に戻すと、スワップが元に戻ります(アトミックな変更です).
て、引数を左右に移動し続けることができます。簡単な操作のための多くのプラグインのように思えますが、それらのプラグインが他に何を提供するかを考えてください:
ia
およびaa
textobjを提供します。dia
daa
yia
.
。Vim wikiのスワップマッピングは、アクセント付き文字が含まれる単語では正しく動作しません。
これらのマッピングは、(ヨーロッパの)ISO / IEC_8859-1 Latin-1補足文字で動作するように適合されています。これは、すべてのインスタンス代入することによって行われている\w
と[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]
のすべてのインスタンス\_W
では\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]
。
さらに、検索の強調表示は必要に応じてクリアされます。これは:nohlsearch<return>
、必要な各マッピングの最後に追加することにより実現されます。
最終結果は次のとおりです。
" Use gc to swap the current CHARACTER with the next, WITHOUT changing the cursor position.
nnoremap <silent> gc xph
" Use gw to swap the current WORD with the next, WITHOUT changing the cursor position.
nnoremap <silent> gw "_yiw:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o><c-l>:nohlsearch<return>
" Disable Alt+[menukey] menu keys (i.e. Alt+h for help)
set winaltkeys=no
" Use Alt + ← or Alt + h to swap the current WORD with the previous, keeping the cursor on the current word. This feels like "PUSHING" the word to the left.
nnoremap <silent> <A-Left> "_yiw?[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]\+\%#<CR>:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o><c-l>:nohlsearch<return>
nnoremap <silent> <A-h> "_yiw?[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]\+\%#<CR>:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o><c-l>:nohlsearch<return>
" <A-h> corresponds to è
" Use Alt + → or Alt + l to swap the current WORD with the next, keeping the cursor on the current word. This feels like "PUSHING" the word to the right.
nnoremap <silent> <A-Right> "_yiw:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o>/[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+<CR><c-l>:nohlsearch<return>
nnoremap <silent> <A-l> "_yiw:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o>/[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+<CR><c-l>:nohlsearch<return>
" <A-l> corresponds to ì
" Use g{ to swap the current PARAGRAPH with the next.
nnoremap g{ {dap}p{
Eclimプラグインは良いものを提供します。それらへのすべてのクレジット:)
:SwapWords
..そして、プラグイン全体をインストールしたくない場合、それらの機能を抽出します。
" Swap words:
" taken from Eclim
" https://github.com/ervandew/eclim
function! SwapWords() " {{{
" Initially based on http://www.vim.org/tips/tip.php?tip_id=329
" save the last search pattern
let save_search = @/
normal! "_yiw
let pos = getpos('.')
keepjumps s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/
call setpos('.', pos)
" restore the last search pattern
let @/ = save_search
silent! call repeat#set(":call SwapWords()\<cr>", v:count)
endfunction " }}}
command! SwapWords :call SwapWords()