emacsモードのbashのreadlineで、転置機能を最近発見しました。
dc dir
に
cd dir
文字の上でCTRL+ Tを押すc
。
文字と単語を入れ替えることができるVi / Vimの類似のものはありますか?
emacsモードのbashのreadlineで、転置機能を最近発見しました。
dc dir
に
cd dir
文字の上でCTRL+ Tを押すc
。
文字と単語を入れ替えることができるVi / Vimの類似のものはありますか?
回答:
文字の場合xp
、カーソルの下の文字を次の文字とXp
入れ替えたり、カーソルの下の文字を前の文字と入れ替えたりするのはかなり簡単です。
このx
コマンドは、カーソルの下の文字を削除し、カーソルを次の文字に残します。このX
コマンドは、カーソルの直前の文字を削除し、カーソルと同じ文字にカーソルを残します。
p
最後に削除または最後にヤンクされたテキストを現在のカーソル位置の直後に配置(貼り付け)します。(P
現在のカーソル位置の直前に配置されるためxP
、XP
どちらもテキストは開始前の状態のままになります。)
単語の入れ替えについては、よくわかりません。おそらく他の誰かがそれに答えることができます。あなたは近づくこともできますdawwP
(または短くするために再マッピングすることもできます)が、たとえば行の終わり近くなど、いくつかのエッジケースで壊れます。
Vim wikiからの単語交換マッピングは、アクセント付き文字を含む単語では正しく動作しません。
これらのマッピングは、(ヨーロッパ)ISO / IEC_8859-1 Latin-1 Supplement文字で動作するように適合されています。これは、すべてのインスタンス代入することによって行われている\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{