시각적 선택의 모든 줄에 Vim 매크로
머리에있는 줄 수를 합산하는 대신 선택 항목의 모든 줄에서 매크로를 실행하고 싶습니다. 예를 들어 변환 할 매크로를 작성할 수 있습니다.
Last, First
으로
First Last
이 모든 라인에서 실행하고 싶습니다.
Stewart, John
Pumpkin, Freddy
Mai, Stefan
...
어떤 아이디어 Vim 전문가?
편집 : 이것은 단지 예일뿐입니다. 분명히 이것은 상식적으로 정규식이지만 매크로를 사용하는 것을 선호하는 너무 쉽지 않은 다른 인스턴스가 있습니다.
q
한 줄에서 실행 된 (남아있는) 매크로 가 있다고 가정합니다 . 그런 다음 다음을 사용하여 선택한 모든 줄에서 실행할 수 있습니다.
:'<,'>normal @q
(이미 선택된 라인의 그룹이있는 경우, 타격은 :
생산 :'<,'>
명령 행에서)
예를 들어, 다음 매크로는 한 줄의 첫 번째 단어를 제외한 모든 단어를 대문자로 표시합니다.
:let @q="^dwgU$P"
따라서 다음에서 실행하십시오 ( +
줄이 선택된 곳)
0000: a long long time ago
0001: in a galaxy far away
+0002: naboo was under an attack
+0003: and i thought me and qui-gon jinn
+0004: could talk the federation in
0005: to maybe cutting them a little slack.
위의 normal @q
명령으로 다음을 생성합니다.
0000: a long long time ago
0001: in a galaxy far away
0002: naboo WAS UNDER AN ATTACK
0003: and I THOUGHT ME AND QUI-GON JINN
0004: could TALK THE FEDERATION IN
0005: to maybe cutting them a little slack.
라인을 선택한 다음 키를 눌러 :
명령 모드로 들어갑니다. Vim은 자동으로을 채워 '<,'>
선택한 라인으로 범위를 제한합니다. 예를 들어 다음 :s
명령을 사용 하여 스왑을 수행 할 수 있습니다 .
:'<,'>s/\(\w\+\), \(\w\+\)/\2, \1/
이렇게하면 시각적 선택 항목의 모든 줄에서 쉼표로 구분 된 두 단어가 바뀝니다.
또한 사용 '<
하고 '>
있으므로 일반 모드에서 이동 명령의 일부로서 다른 북마크 또는 라인 위치, 예를 들어, 같은 d'<
시각적 선택의 첫 번째 행의 시작에 현재 커서 위치에서 삭제됩니다. 블록이 더 이상 시각적으로 강조 표시되지 않더라도 마크는 유효합니다.
기록 된 매크로를 모든 행에서 재생하려면 :normal
명령 과 함께 매크로를 실행해야합니다 . 안타깝게도이 :normal
명령은 여러 줄에서 작동하지 않지만 명령을 사용하여 수정할 수 있습니다 :global
. 이것은 :ex
정규식과 일치하는 모든 줄 에서 명령을 실행 하므로 다음과 같이 할 수 있습니다.
:'<,'>g/^/ norm @a
설명:
:'<,'> for every line in the visual block
g/^/ on every line that matches the regex /^/ - i.e. every line
norm run in normal mode
@a the macro recorded in a
아래 기능을 추가 ~/.vimrc
하거나 브라우저에 복사하여 실행할 수 있습니다.:@+
fun! RunMacroOverSelection(macroname)
execute "'<,'>normal @". a:macroname
endfun
com -nargs=1 Rover :call RunMacroOverSelection(<f-args>)
nnoremap <leader>r :Rover<space>
장점은 시각적 선택에 모든 매크로를 적용 할 수 있다는 것입니다. 다음과 같이 매크로 문자를 인수로 제공해야합니다.
:Rover a
참고 URL : https://stackoverflow.com/questions/3337926/vim-macro-on-every-line-of-visual-selection
'developer tip' 카테고리의 다른 글
ASP.net Repeater는 현재 인덱스, 포인터 또는 카운터를 가져옵니다. (0) | 2020.10.14 |
---|---|
PHP-이 잘못된 오프셋 유형 오류를 어떻게 수정합니까? (0) | 2020.10.14 |
VIM : Ubuntu에서 정확한 줄로 이동하는 방법 (0) | 2020.10.14 |
Python : 경고음 만들기 (0) | 2020.10.13 |
여러 줄 문자열을 쉼표로 구분 된 단일 문자열로 바꾸기 (0) | 2020.10.13 |