Як я гортаю символи чи слова, як-от транспортування emacs?


10

Під час читання лінії Bash в режимі emacs я нещодавно виявив функцію транспонування , що дає мені можливість швидко виправити помилку на друку

dc dir

до

cd dir

натискаючи CTRL+ Tна cсимволі.

Чи є щось подібне у Vi / Vim, що дозволяє мені міняти символи та слова навколо?


1
Ви, звичайно, можете зробити макрос / прив'язку, яка це робить. vim.wikia.com/wiki/Reverse_letters - приклад
fruglemonkey

Відповіді:


13

Для символів це досить просто: xpпідміняти літеру під курсором наступною літерою та Xpпідміняти букву під курсором попередньою літерою.

xКоманда видаляє символ під курсором, залишаючи курсор на наступний символ. XКоманда видаляє символ безпосередньо перед курсором, залишаючи курсор на той же характер , він був включений.

pставить (вставляє) останній видалений або останній викреслений текст відразу після поточної позиції курсору. ( PСтавить його безпосередньо перед поточним положенням курсора, так xPі XPяк залишити текст так , як це було раніше , ніж ви почали.)

Що стосується заміни слів, я не впевнений; можливо, хтось ще може відповісти на це. Ви можете наблизитись до dawwP(або перевстановити його, щоб бути коротшим), але це порушиться на декількох крайових випадках, наприклад, наприкінці рядка.


2
Якщо непрофільні рішення прийнятні, є github.com/tommcdo/vim-exchange, який дасть вам змогу обмінюватися не лише словами, а й цілими регіонами vimcasts.org/episodes/…
dkns

2

Відображення розміщення слов для латинських мов

Відображення відображення слов із вікі Vim працюватиме неправильно зі словами з наголошеними символами.

Ці відображення адаптовані для роботи з (європейськими) символами 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{
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.