선을 쉽게 옮기려면 어떻게해야합니까?


47

vim에서 줄을 위 또는 아래로 이동하는 명령 (또는 바로 가기)은 무엇입니까? 현재 진행중인 작업 과정은 줄을 잡아 당겨 (복사)하고 그 줄을 삭제하고 그 줄을 넣는 것입니다.


8
실제로 컷을 삭제하므로 yank :을 건너 뛸 수 있습니다 . ddkP아래로 이동하는 것이 더 쉽습니다 ddp.
muru

답변:


52

첫째, 당신은 잡아 당기 거나 삭제할 필요가 없습니다 . 후자는 또한 삭제 된 내용을 (기본 또는 지정된) 레지스터에 넣습니다. 따라서 ddp/ ddkP는 줄을 한 줄 아래로 이동하는 일반적인 명령입니다.

또는 다음 :move명령을 사용할 수 있습니다 . :move +1/ :move -2; 이것은 레지스터를 방해하지 않으며 전체 범위를 이동할 수도 있습니다. 키 매핑을 쉽게 정의하여이를 단축 할 수 있습니다.

플러그인 (그리고 종종 함께 제공되는 추가 편의성)을 신경 쓰지 않으면 Tim Pope의 손상되지 않은 플러그인LineJuggler 플러그인 은 라인을 이동 하기위한 ]e/ [e매핑을 제공 합니다 (여러 가지; 다양한 용도의 Tim은 처리에 중점을 둡니다) 윤곽)).


36

가장 쉬운 방법은 다음 :m+과 같습니다. 또는 Ingo가 제안한 :m-2약어입니다 :move.

또는 시각적 모드 ( V)를 사용 하여 선 ( d/ x)을 자른 다음 붙여 넣기 전에 커서를 올바른 위치로 이동 한 후 붙여 넣습니다 ( p커서 P위 -커서 위) (요약하면 Vxp/ Vdp).

비주얼 모드에서 여러 줄 :m '>+1을 이동할 때는 (한 줄 아래 :m '<-2로 이동 ) 또는 (한 줄 위로 이동 ) 을 사용해야 합니다.


다음은 유용한 매핑 예제 ( Shift+ ↑/ Shift+↓)입니다.

nnoremap <S-Up> :m-2<CR>
nnoremap <S-Down> :m+<CR>
inoremap <S-Up> <Esc>:m-2<CR>
inoremap <S-Down> <Esc>:m+<CR>

이것은 Sublime Text ( Win / OSX ) 와 유사합니다 .

다음은 vim wikia 에서 제안 된 내용입니다 .

nnoremap <A-j> :m .+1<CR>==
nnoremap <A-k> :m .-2<CR>==
inoremap <A-j> <Esc>:m .+1<CR>==gi
inoremap <A-k> <Esc>:m .-2<CR>==gi
vnoremap <A-j> :m '>+1<CR>gv=gv
vnoremap <A-k> :m '<-2<CR>gv=gv

일반 모드 또는 삽입 모드에서 Alt-j를 눌러 현재 줄을 아래로 이동하거나 Alt-k를 눌러 현재 줄을 위로 이동하십시오.

시각적으로 선 블록을 선택한 후 (예 : V를 누른 다음 커서를 아래로 이동) Alt-j를 눌러 전체 블록을 아래로 이동하거나 Alt-k를 눌러 블록을 위로 이동하십시오.

또한보십시오:


2
Vim wikia 링크의 경우 +1 거기서 몇 가지를 배웠습니다.
Gonçalo Ribeiro

이유를 모르지만 Gvim에서는 잘 작동하지만 터미널 vim에서는 예상대로 작동하지 않습니다. (tmux의 문제인 것 같습니다)
CodyChan

11

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

ddkP

설명

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

3
현재 줄을 아래로 이동하려면ddp
Qinjie

4

FWIW, 여기 내가 몇 년 동안 사용한 것입니다. 들여 쓰기를 자동으로 조정하면서 현재 모드를 일반 모드에서 선택하거나 시각적 모드에서 선택을 위아래로 이동합니다.

nnoremap ,<Up>   :<C-u>silent! move-2<CR>==
nnoremap ,<Down> :<C-u>silent! move+<CR>==
xnoremap ,<Up>   :<C-u>silent! '<,'>move-2<CR>gv=gv
xnoremap ,<Down> :<C-u>silent! '<,'>move'>+<CR>gv=gv
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.