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-exchange 를 통해 단어뿐만 아니라 전체 지역을 교환 할 수 있습니다. vimcasts.org/episodes/…
dkns

2

라틴어에 대한 단어 스왑 매핑

Vim 위키 의 단어 스왑 매핑은 악센트 부호가있는 단어에서 올바르게 작동하지 않습니다 .

이 맵핑은 (유럽) 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.