program story

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

inputbox 2020. 10. 26. 07:58
반응형

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를 지원하는 것은 아닙니다.

참고 URL : https://stackoverflow.com/questions/28178239/how-do-i-swap-two-lines-in-vim

반응형