나는 이것이 가능한지 아닌지를 결정하기에 vim에 충분하지 않다.
예를 들어 def function(param1, param2)
빠르거나 쉬운 방법으로 def function(param2, param1)
????
답변
나는 원래 이것을 어디서 얻었는지 기억하지 못하지만 적어도 몇 년 동안 ~ / .vimrc에있었습니다.
" Swap the word the cursor is on with the next word (which can be on a
" newline, and punctuation is "skipped"):
nmap <silent> gw "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><C-o>:noh<CR>
이것을 정의하고 나면, 보통 모드에서 커서를 “param1″어딘가에 놓고 입력하면됩니다 : gw
답변
@Heptite의 답변에 +1.
더 완벽하게하기 위해 여기에 .vimrc에있는 것이 있습니다.
" push current line up or down
nnoremap <leader><Up> ddkP
nnoremap <leader><Down> ddp
" exchange character under cursor with the next character without moving the cursor
nnoremap gc xph
" exchange word under cursor with the next word without moving the cursor
nnoremap gw "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><C-o><C-l>
" push word under cursor to the left
nnoremap <leader><Left> "_yiw?\w\+\_W\+\%#<CR>:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><C-o><C-l>
" push word under cursor to the right
nnoremap <leader><Right> "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><C-o>/\w\+\_W\+<CR><C-l>
출처 : vim wiki .
내 (그리고 위키) gw
는 Heptite의 것과 약간 다릅니다. 어느 것이 더 좋은지 잘 모르겠습니다.
답변
그 긴 해결책은 못 생겼습니다. 커서가 왼쪽에 첫 단어의 첫 글자 인 ‘p’라고 가정하십시오. 이렇게하십시오 : dwlpldw%p
. 이것은 당신의 특별한 경우에 적합합니다. 매일 편집하는 것은 어떻습니까? dwwP
또는을 사용해보십시오 dWWP
. :디
팁 : 자주 수행 할 필요가없는 경우 항상 긴 정규 표현식을 작성하지 마십시오. 그렇지 않으면 vimrc가 붐을 일으 킵니다. 모든 vim 사용자는 내장 커서 이동에 익숙해야합니다.
답변
vim-exchange , Repeatable ( repeat.vim에 의존 함 ) 및 argtextobj 의 조합을 사용하여 반복 가능한 매핑을 작성했습니다 .
" Swap function arguments, move the argument under the cursor to the left or to
" the right.
Repeatable map <leader>al cxiaf,cxia
Repeatable map <leader>ah cxiaF,hcxia
이러한 맵핑에 교환 및 반복 가능한 플러그인을 사용하면 다음과 같은 이점이 있습니다.
- 실행 취소
u
를 한 번 수행하면 스왑이 실행 취소 됩니다 (원자 변경 사항 임). - 를 사용하여
.
인수를 왼쪽 / 오른쪽으로 계속 이동할 수 있습니다 .
나는, 그것은 간단한 조작을위한 플러그인 훨씬처럼 보인다 알고 있지만, 어떻게 생각하는지 다른 사람들 플러그인을 제공합니다 :
- argtextobj는 삭제 ( 및 ) 및 yanking ( )을 위한
ia
및aa
textobj를 제공합니다 .dia
daa
yia
- 를 사용하여 매핑을 반복 할 수 있도록 vim-repeat 및 Repeatable
.
. - vim-exchange는 반복 가능한 원자 교환 텍스트를 제공합니다.
답변
라틴 언어에 대한 스왑 매핑
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{
답변
Eclim 플러그인은 좋은 것을 제공합니다. 그들에게 모든 크레딧 🙂
:SwapWords
.. 그리고 전체 플러그인을 설치하지 않으려면 다음과 같이 기능을 추출하십시오.
" Swap words:
" taken from Eclim
" https://github.com/ervandew/eclim
function! SwapWords() " {{{
" Initially based on http://www.vim.org/tips/tip.php?tip_id=329
" save the last search pattern
let save_search = @/
normal! "_yiw
let pos = getpos('.')
keepjumps s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/
call setpos('.', pos)
" restore the last search pattern
let @/ = save_search
silent! call repeat#set(":call SwapWords()\<cr>", v:count)
endfunction " }}}
command! SwapWords :call SwapWords()