[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
(예 Shift– V) 상하 이동 준마는 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 커서를 붙여 넣습니다.