[vim] Vim에서 전체 라인을 위아래로 이동

메모장 ++에서는 Ctrl+ Shift+ Up/ Down를 사용 하여 현재 줄을 위아래로 이동할 수 있습니다 . Vim에서도 이와 비슷한 명령이 있습니까? 나는 끝없는 가이드를 보았지만 아무것도 찾지 못했습니다.

없는 경우 해당 키 조합에 작업을 어떻게 바인딩 할 수 있습니까?

편집 : Mykola의 대답은 버퍼의 시작과 끝을 제외한 모든 줄에 적용됩니다. 첫 번째 줄을 위로 올리거나 맨 아래 줄을 아래로 내리면 줄이 삭제되고 맨 아래 줄을 위로 올리면 폰처럼 처음 두 칸씩 점프합니다! 누구나 개선을 제안 할 수 있습니까?



답변

.vimrc에 다음을 넣어 작업을 수행하십시오.

noremap <c-s-up> :call feedkeys( line('.')==1 ? '' : 'ddkP' )<CR>
noremap <c-s-down> ddp

줄이 사라지면 Vim 버그처럼 보입니다. 나는 그것을 피하기 위해 핵을 두었다. 아마도 더 정확한 해결책이있을 것입니다.

최신 정보

Vim 조합 만 사용하면 설명 할 수없는 어려움이 많이 있습니다. 이것들은 라인이 누락되고 여분의 라인 점프입니다.

.vimrc 또는 ~ / .vim / plugin / swap_lines.vim 안에 배치 할 수있는 스크립팅 솔루션은 다음과 같습니다.

function! s:swap_lines(n1, n2)
    let line1 = getline(a:n1)
    let line2 = getline(a:n2)
    call setline(a:n1, line2)
    call setline(a:n2, line1)
endfunction

function! s:swap_up()
    let n = line('.')
    if n == 1
        return
    endif

    call s:swap_lines(n, n - 1)
    exec n - 1
endfunction

function! s:swap_down()
    let n = line('.')
    if n == line('$')
        return
    endif

    call s:swap_lines(n, n + 1)
    exec n + 1
endfunction

noremap <silent> <c-s-up> :call <SID>swap_up()<CR>
noremap <silent> <c-s-down> :call <SID>swap_down()<CR>


답변

한 줄을 위의 줄로 바꾸려면 일반적으로 다음을 수행하십시오.

ddkP

설명

  • dd는 행을 삭제하고 기본 레지스터에 추가합니다.
  • k는 한 줄 위로 이동합니다 (j는 줄 아래로 이동합니다)
  • P는 현재 줄 위에 붙여 넣습니다.

답변

커서가 이동하려는 행에 있다고 가정합니다.

위아래 :m로 이동 :
이동

:m +1 -한 줄 아래로 이동

:m -2 -한 줄 위로 이동

(위 또는 아래로 이동하려는 행 수에 따라 +1을 임의의 숫자로 바꿀 수 있습니다. 즉, +2는 2 행 아래로 이동하고, -3은 2 행 위로 이동합니다)

특정 줄로 이동

:set number -번호 줄 표시 (이동하는 위치를 더 쉽게 볼 수 있음)

:m 3 -세 번째 줄 다음으로 줄을 이동하십시오 (3을 원하는 줄로 바꾸십시오)

여러 줄 이동 :

V(예 ShiftV) 상하 이동 준마는 VIM에서 여러 행을 선택합니다

히트를 선택하면 :위의 명령을 실행 m +1


답변

줄을 위로 이동하십시오. ddkP

줄을 아래로 이동하십시오. ddp


답변

이것은 나를 위해 일했다 :

http://vim.wikia.com/wiki/Moving_lines_up_or_down_in_a_file

BTW, ALT + some_key를 사용하고 터미널 (urxvt 가이 작업을 수행하지 않음)을 거부하려면 .vimrc에 다음과 같이 입력해야합니다.

" For moving lines (^] is a special character; use <M-k> and <M-j> if it works)
nnoremap ^]k mz:m-2<CR>`z==
inoremap ^]j <Esc>:m+<CR>==gi
inoremap ^]k <Esc>:m-2<CR>==gi
vnoremap ^]j :m'>+<CR>gv=`<my`>mzgv`yo`z
nnoremap ^]j mz:m+<CR>`z==
vnoremap ^]k :m'<-2<CR>gv=`>my`<mzgv`yo`z

여기서 ^]는 ALT 키를 나타내는 단일 문자 입니다. 해당 문자를 입력하려면 C+v, EscVim 에서 사용하십시오 ( C+q, EscWindows).


답변

~ / .vimrc 파일에 다음을 추가하십시오 (n, m에 대한 매핑이 없는지 확인하십시오)

nmap n :m +1<CR>
nmap m :m -2<CR>

이제 n키를 누르면 줄이 아래 m로 이동하고 줄이 위로 이동합니다.


답변

명령 모드에서 아래로 이동하려는 줄에 커서를 놓은 다음

ddp

설명 : dd는 일반 버퍼에 대한 현재 행을 삭제합니다. p는 커서 위치 이후 또는 전체 행의 경우 한 행 아래에 다시 넣습니다.

많은 문서에서 명령 p 및 P와 관련하여 약간의 혼동이 있습니다. 실제로 p는 AFTER 커서와 P AT 커서를 붙여 넣습니다.