예를 들어 다음과 같이 네 줄이있는 경우 :
첫 번째 줄
두 번째 줄
세 번째 줄
네 번째 줄
나는 그것들을 반대로 바꾸고 싶다
네 번째 줄
세 번째 줄
두 번째 줄
첫 번째 줄
Vim에서 어떻게 할 수 있습니까?
:command! -bar -range=% Reverse <line1>,<line2>global/^/m<line1>-1
vi.stackexchange.com/a/2107/10254
예를 들어 다음과 같이 네 줄이있는 경우 :
첫 번째 줄
두 번째 줄
세 번째 줄
네 번째 줄
나는 그것들을 반대로 바꾸고 싶다
네 번째 줄
세 번째 줄
두 번째 줄
첫 번째 줄
Vim에서 어떻게 할 수 있습니까?
:command! -bar -range=% Reverse <line1>,<line2>global/^/m<line1>-1
vi.stackexchange.com/a/2107/10254
답변:
파일의 모든 줄을 반대로 바꾸려면
:g/^/m0
설명을 보려면
:help 12.4
또한 선의 범위를 반대로 바꾸는 방법도 보여줍니다.
ma
) 2. 커서를 블록의 첫 번째 줄로 이동합니다. 3. type:'a,.g/^/m 'a
원하는 선을 선택 !
하고을 누른 다음 결과 프롬프트에서 선을 tac
la를 통해 파이프합니다 :'<,'>!tac
. 자세한 내용 man tac
은 참조하십시오.
shift+v
하여 시각적 선 모드를 시작한 다음 j
선을 선택에 추가하십시오.
gvim
있습니다! 그렇지 않으면, 절대 줄 번호를 사용해야합니다 (아마도 상대를 사용할 수는 있지만 조심 :g/^/m0
해야합니다). 당신은, 그러나 그것은 100 % vimscript가 아닙니다, 그러나 관심있는 사람 : P
:.,'a!tac
최소한의 노력으로 작동합니다.
shift+v
, 당신이 사용할 수있는 }
다음 단락, 또는 비어있는 수직 공간까지 도달 할 수 있습니다. 또한 man tac: concatenate and print files in reverse
.
Mac OS X tac
에는 존재하지 않지만 tail -r
동일한 효과를 사용할 수 있습니다 .
:%!tail -r
이것은 시각적 모드에서도 잘 작동합니다.
:'<,'>!tail -r
tail(1)
의 맨 페이지 에서 발췌 :
-r 옵션을 사용하면 입력이 행별로 역순으로 표시됩니다. 또한이 옵션은 -b, -c 및 -n 옵션의 의미를 변경합니다. -r 옵션이 지정되면이 옵션은 표시를 시작할 입력의 시작 또는 끝에서 바이트, 행 또는 블록 대신 표시 할 바이트, 행 또는 512 바이트 블록 수를 지정합니다. -r 옵션의 기본값은 모든 입력을 표시하는 것입니다.
alias tac='tail -r'
brew install coreutils
사용할 수 있습니다 gtac
.
시각 모드에 익숙한 사용자를 위해 :
1.를 사용하여 뒤집 으려는 선택 위의 줄 번호를 식별하십시오 :set nu
.
2. Shift-V
뒤집기를 원하는 선택을 강조 표시합니다 (시각적 모드).
3 :g/^/m <Line number from step 1>
.
비주얼 모드에서는 :'<,'>g/^/m <Line number>
3에서 명령을 입력 할 때 자동으로 표시됩니다
.
이 명령은 한 번에 한 줄씩 선택한 줄 번호로 이동하여 작동합니다. 두 번째 항목이 주어진 줄 번호로 푸시되면 첫 번째 줄을 줄 번호 + 1로 푸시합니다. 그런 다음 세 번째 항목은 전체 목록이 단일 줄 번호로 푸시 될 때까지 첫 번째와 두 번째 줄을 아래로 푸시합니다. 역순으로 정렬 된 목록.
'<
줄 번호를 수동으로 입력 하는 대신 대신 사용할 수 있습니다. 한 줄 이전에 선택을 시작하고 실행하십시오 :'<,'>g/^/m'<
.
에 대한 명령 :Rev[erse]
및 선택적 매핑이므로이 vimrc
레시피의 명백한 단계를 기억하고 수행 할 필요가 없습니다.
" Reverse the lines of the whole file or a visually highlighted block.
" :Rev is a shorter prefix you can use.
" Adapted from http://tech.groups.yahoo.com/group/vim/message/34305
command! -nargs=0 -bar -range=% Reverse
\ let save_mark_t = getpos("'t")
\<bar> <line2>kt
\<bar> exe "<line1>,<line2>g/^/m't"
\<bar> call setpos("'t", save_mark_t)
nmap <Leader>r :Reverse<CR>
xmap <Leader>r :Reverse<CR>
( 인쇄 가능한 문자를 매핑하는 데 도움이 :xmap
되므로 시각적으로는 선택되지만 선택 모드는 아닙니다 :help mapmode-x
.)
:'<,'>g/^/m'<
:)
:-1,+1Rev
찾고 있는 것과 같은 것이 있습니까? 반전하려는 범위를 시각적으로 선택할 수 있습니다 (예 :) V7j:Rev
. 그래도 귀하의 질문에 대한 답변이 없으면, 이해하지 못 했으므로 정교하게 바꾸거나 다시 바꿔야합니다.
3 행에 있다고 가정하면 3에서 6까지의 범위가 있습니다.
:3,6g/^/m2
:,6g/^/m2
; 또는 범위의 마지막 줄에있을 때 : :3,g/^/m2
; 그리고 :3,6g/^/m2
어디서나 파일에서 작동합니다.