[vim] Vim에서 두 줄을 어떻게 바꾸나요?

나는 이것을 가지고있다:

pick 887b66f add 222 Dziewiecsil to flowers new title
pick dc331cb new name of beginning commit

그리고 나는 이것을 얻고 싶다.

pick dc331cb new name of beginning commit
pick 887b66f add 222 Dziewiecsil to flowers new title

키보드 단축키를 사용하여이 작업을 빠르게 수행 할 수있는 방법이 있습니까?



답변

현재 줄을 다음 줄로 바꾸려면 ddp명령 모드에서 입력 합니다.

  • dd-줄을 삭제하고 (실제로 다른 편집기에서는 cut이라고 함) 레지스터에 저장
  • p-레지스터에서 줄 붙여 넣기


답변

dd현재 줄을 삭제 한 다음을 사용하여 제거 된 줄을 붙여 넣을 수 있습니다 p. 사용하는 다른 방법이 있습니다 m. 으로 m당신은 즉, 주변의 라인을 이동할 수 있습니다

:m 1 현재 행을 1 행 뒤로 이동합니다.

:m 0 현재 줄을 맨 위로 이동합니다.

:m $ 현재 줄을 맨 아래로 이동합니다.

귀하의 예에서는 커서를 첫 번째 줄에 놓고 다음을 입력하십시오. :m $

추가 정보 : http://vim.wikia.com/wiki/Moving_lines_up_or_down


답변

질문이 꽤 오래되고 답변으로 표시되어 있음에도 불구하고 Sven Marnach에서 다음nnoremap같이 제공 한 일반 모드 명령을 사용할 수 있다고 말하여 답변을 확장하고 싶습니다.

:nnoremap <C-Up> <Up>ddp<Up>
:nnoremap <C-Down> ddp

이렇게하면 파일 내에서 Ctrl+ UpCtrl+가 Down있는 행을 이동할 수 있습니다. 그러나 이것은 @"마지막으로 복사 한 문자열 / 단어 / 문자 / 등을 저장하는 레지스터 를 덮어 씁니다 . 따라서 앞에 “(reg) ddp명령 을 추가 하여이 문제를 해결할 수 있습니다.

:nnoremap <C-Up> <Up>"add"ap<Up>
:nnoremap <C-Down> "add"ap

여기에서 "a삭제하기 전에 명령을 추가 하고 @a레지스터에 우리 줄을 저장 하므로 기본 복사 레지스터를 덮어 쓰지 않습니다. 그러나 @a레지스터의 내용을 덮어 쓸 수 있습니다.

:nnoremap <silent><C-Up> :let save_a=@a<Cr><Up>"add"ap<Up>:let @a=save_a<Cr>
:nnoremap <silent><C-Down> :let save_a=@a<Cr>"add"ap:let @a=save_a<Cr>

( <silent>우리의 명령이 하단의 메시지 라인에 반향되는 것을 방지하기 위해 필요합니다.)

이제 키보드 단축키를 사용하여 파일 내에서 행을 이동할 수있는 두 개의 매핑이 있습니다. 당신은 버튼을 다시 정의 할 수 있습니다, 내가 사용 Alt+ j/ k이 될 것이다, <A-j>그리고 <A-k>그 명령에 대해. 그러나 모든 터미널 에뮬레이터가 Alt 키 매핑 AFAIK를 지원하는 것은 아닙니다.


답변

예:

  1. one
> 2. two

:m-2스위치 (전류 선 – 2)

> 2. two
  1. one

:m+1스위치 (전류 선 + 1)

  1. one
> 2. two

원한다면 이것을 매핑 할 수 있습니다.


답변

Vim wikia 페이지에 제안 된 매핑 은 실제로 Sublime 및 다른 편집자가이 기능을 구현하는 방식을 모방하는 키 조합을 매핑하는 가장 좋은 방법입니다.

여기에는 이동 후 들여 쓰기 작업이 포함되며, 이는 또한 좋습니다 ( ==원하지 않는 경우 이중 등호 ).

또한 시각적삽입 모드를 지원 하므로 편집하는 동안 또는 풀 블록으로 선을 이동할 수 있습니다.

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

나는 개인적으로로 매핑 <D-J>하고 <D-K>대신, 내 Mac에서 <A-받는 사람 매핑하는 Alt키입니다. 그런 식으로 Cmd+ Shift+ j/를 사용하면 k손끝이 더 자연스럽게 느껴집니다.


답변