문제

Emacs에는 유용한 기능이 있습니다. transpose-words 구두점을 유지하면서 커서 앞의 단어를 커서 뒤의 단어와 교환할 수 있는 명령입니다.

예를 들어, 'stack |overflow’ + M-t = ‘overflow stack|’ (‘|’는 커서 위치입니다.)

<a>|<p> 된다 <p><a|>.

Vim에서 에뮬레이트하는 것이 가능한가요?나는 내가 사용할 수 있다는 것을 안다 dwwP, 하지만 구두점에서는 잘 작동하지 않습니다.

업데이트: 아니요, dwwP ~이다 정말 해결책이 아닙니다.상상하다:

SOME_BOOST_PP_BLACK_MAGIC( (a)(b)(c) )
//             with cursor here ^

Emacs의 M-t는 교환되었을 것입니다 b 그리고 c, 를 야기하는 (a)(c)(b).

작동하는 것은 무엇입니까 /\w yiwNviwpnviwgp.하지만 망친다 "" 그리고 "/.더 깨끗한 솔루션이 있습니까?

업데이트²:

해결됨

:nmap gn :s,\v(\w+)(\W*%#\W*)(\w+),\3\2\1\r,<CR>kgJ:nohl<CR>

불완전하지만 작동합니다.

가져와주신 Camflan에게 감사드립니다. %# 내 관심을 끄는 항목입니다.물론, 모든 것이 위키, 하지만 그것이 문제를 해결할 수 있다는 것을 몰랐습니다. 정확한 (Emacs는 완전히 올바르게 이해했습니다) transpose-words 특징.

도움이 되었습니까?

해결책

이것들은 내 .vimrc에서 왔으며 나를 위해 잘 작동합니다.

" swap two words
:vnoremap <C-X> <Esc>`.``gvP``P
" Swap word with next word
nmap <silent> gw    "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<cr><c-o><c-l> *N*

다른 팁

상황에 따라 DWWP에서와 같이 W 또는 B 명령을 사용할 수 있습니다. "자본"버전은 구두점을 포함하여 다음/이전 공간으로 건너 뜁니다. F 및 T 명령은 삭제 된 범위의 끝을 지정하는 데 도움이 될 수 있습니다.

에 대한 토론도 있습니다 VIM 팁 위키 다양한 스와핑 기술에 대해.

줄의 중간에서 첫 번째 단어의 첫 글자로 가서

dw wP

줄의 끝에서 (즉, 줄의 마지막 두 단어), 단어 사이의 공간으로 가서

2dw bhP

편리한 VIM & EMACS 명령의 동등성


VIMRC 파일에 다음과 같은 것을 추가하여 사람들을 위해 바로 가기 키를 추가 할 수 있습니다.

map L dwwP
map M 2dwbhP 

이 경우 Shift-L (명령 모드)은 줄의 중간에 단어를 전환하고 Shift-M은 끝에이를 수행합니다.

NB : 이것은 공간 분리 된 단어와 가장 잘 작동하며 OP의 특정 사례를 잘 처리하지 않습니다.

팁이 있습니다 http://vim.wikia.com/wiki/vimtip10. 그러나 나는 내 자신을 굴리기로 선택합니다. 내 스 니펫은 팁에 언급 된 방법에 비해 두 가지 명백한 장점이 있습니다. 1) 커서가 한 마디에 없을 때 작동합니다. 2) 전체 화면에서 높은 조명이 아닙니다.

전치가 불가능할 때 아무것도하지 않는다는 점을 제외하고는 Emacs 'Transpose-Words'와 거의 비슷합니다. (Emacs의 'Transpose-Words'는 깜박임과 현재 단어의 시작으로 커서 위치를 변경합니다.)

"transpose words (like emacs `transpose-words')
function! TransposeWords()
    if search('\w\+\%#\w*\W\+\w\+')
    elseif search('\w\+\W\+\%#\W*\w\+')
    endif
    let l:pos = getpos('.')
    exec 'silent! :s/\(\%#\w\+\)\(\W\+\)\(\w\+\)/\3\2\1/'
    call setpos('.', l:pos)
    let l:_ = search('\(\%#\w\+\W\+\)\@<=\w\+')
    normal el
endfunction

nmap <silent> <M-right> :call TransposeWords()<CR>
imap <silent> <M-right> <C-O>:call TransposeWords()<CR>

Mark와 CapnNefarious가 말했듯이 dwwP 또는 dWwP를 사용할 수 있지만 나만의 메모가 몇 가지 있습니다.

  • 제시한 예에서와 같이 커서가 두 번째 단어의 첫 번째 문자에 있는 경우 dwbP(또는 구두점을 처리하려면 dWbP)를 사용할 수 있습니다.
  • 커서가 단어 중간에 있으면 dawbP/daWbP를 사용할 수 있습니다.

거기에 전환 단어 스크립트 vim.org에서 아름답게 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top