emacsの転置のように文字や単語を反転するにはどうすればよいですか?


10

emacsモードのbashのreadlineで、転置機能を最近発見しました。

dc dir

cd dir

文字の上でCTRL+ Tを押すc

文字と単語を入れ替えることができるVi / Vimの類似のものはありますか?


1
あなたは確かにこれを行うマクロ/バインディングを作ることができます。 vim.wikia.com/wiki/Reverse_letters例である
fruglemonkey

回答:


13

文字の場合xp、カーソルの下の文字を次の文字とXp入れ替えたり、カーソルの下の文字を前の文字と入れ替えたりするのはかなり簡単です。

このxコマンドは、カーソルの下の文字を削除し、カーソルを次の文字に残します。このXコマンドは、カーソルの直前の文字を削除し、カーソルと同じ文字にカーソルを残します。

p最後に削除または最後にヤンクされたテキストを現在のカーソル位置の直後に配置(貼り付け)します。(P現在のカーソル位置の直前に配置されるためxPXPどちらもテキストは開始前の状態のままになります。)

単語の入れ替えについては、よくわかりません。おそらく他の誰かがそれに答えることができます。あなたは近づくこともできますdawwP(または短くするために再マッピングすることもできます)が、たとえば行の終わり近くなど、いくつかのエッジケースで壊れます。


2
非コアソリューションが受け入れられる場合は、github.com / tommcdo / vim
vimcasts.org/episodes/…– dkns

2

ラテン語のワードスワップマッピング

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{
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.