나는 최근에 vim이 골프, 특히 kolmogorov-complexity에서 어떻게 잘 작동하는지 깨달았습니다 . 또한, 메타 vim 에 따르면 적어도이 사이트의 범위에서 완벽하게 수용 가능한 ‘프로그래밍 언어’입니다.
Vim에서 골프를 할 때 어떤 일반적인 팁이 있습니까? 코드 골프 문제에 적용 할 수 있고 Vim과 관련이있는 아이디어를 찾고 있습니다 (예 : “댓글 제거”는 답이 아닙니다).
답변 당 하나의 팁을 게시하십시오.
답변
일반적인 명령의 대문자 변형을 알고 있어야합니다. 이를 통해 많은 상황에서 한 번의 키 입력을 간단하게 저장할 수 있습니다. 예를 들면 다음과 같습니다.
A = $a
C = c$
D = d$
I = ^i
S = cc
X = dh
Y = yy
다른 하나는 G
대신에 gg
사용하는 것이지만 카운트를 사용하는 경우에만 사용하십시오! 예를 들어, 카운트가 gg
없으면 처음으로 G
이동하고 끝으로 이동합니다. 그러나 카운트를 사용하면 둘 다 지정한 줄로 이동하므로 5G
보다 짧지 만 같습니다 5gg
.
다른 하나는 H
대신에 사용 하는 gg
것이지만 입력이 기본 행 수보다 많은 것을 차지하지 않을 경우에만 작동한다는 점에 유의하는 것이 중요합니다 (24라고 생각하지만 다를 수 있음).
답변
명령이 실패 할 때마다 딩 노이즈가 발생하여 현재 매크로가 취소됩니다. 이것을 사용하여 원유 형태의 루프를 만들 수 있습니다. 예를 들어, <foobar>
버퍼에 3 줄 미만이 될 때까지 키 입력을 반복하려는 경우 . 넌 할 수있어
qq<foobar>3G``@qq
이는 다음을 의미합니다.
qq 'Start recording in register q
<foobar> 'Keystrokes
3G 'Go to line 3. If line 3 doesn't exist, this is effectively a "break" statement.
`` 'Jump back to previous cursor location
@q 'Call macro q
q 'Stop recording
vim 세션에서 이것을 테스트하는 경우 @q
매크로가에서로드되기 때문에 의도하지 않은 부작용 이 있을 수 있습니다 .vim_profile
. 이 문제를 해결하려면 몇 가지 방법이 있습니다. 아마도 가장 좋은 해결 방법은 vim을 시작하는 것입니다.
vim -i NONE
을 (를) 삭제할 수도 있습니다 .viminfo
.
이미 vim을 시작한 경우 다음을 입력 할 수 있습니다.
qqq
처음에는 매크로를 0으로 만듭니다.
3G를 대체 할 수있는 다른 조건은 다음과 같습니다.
f<char> 'Jump to first occurence of <char>. Also see F, t and T
또는
<number>| 'Go to the <number>'th character on the current line.
답변
더 짧은 버전의 ex 명령이 있다고 생각합니다. 예를 들어,을 :global
단축 할 수 있다는 것을 이미 알고 있었지만 :g
, :nnoremap
이 값이 :nn
?
:h :foo
더 짧은 버전이 있는지 확인하기 위해 답에 사용중인 모든 ex 명령 을 실행하는 것이 좋습니다 .
답변
:%s/\n//g
이다 항상 동일합니다
:%s/\n//
이는 또한
:%s/\n
놀랍게도 충분합니다. 일반적으로 플래그가 없으면 :s
표현식 의 마지막 슬래시 는 필요하지 않습니다.
답변
삽입 모드에 있고 단일 일반 모드 명령을 만들고 싶다고 가정 해 봅시다. 다음과 같이 작성할 수 있습니다.
isome_text<esc><foobar>gisome_more_text
그렇게하지 마십시오. 대신을 사용 <C-o>
하여 단일 일반 명령을 실행 한 다음 즉시 삽입 모드로 돌아갑니다.
isome_text<C-o><foobar>some_more_text
답변
세 가지 “변경 사례”연산자가 있습니다.
gu "Convert to lowercase
gU "Convert to uppercase
g~ "Toggle case
이들은 연산자이므로 동작을 취하므로 현재 문자를 소문자로 변환하십시오.
gul
재미있는 트릭이 나오는 곳은 다음과 같습니다. 🙂 단일 문자 또는 현재 줄의 대소 문자를 변경하려면 시각적 모드에서 바이트가 짧습니다. 예를 들어 gul
동등
vu
그리고 gu_
(_는 현재 줄)은
Vu
이 트릭은 시각 모드에서 뒤로 검색을 트리거 하기 때문에 전환을 위해 작동 하지 않습니다.v?
v/
반대 방향으로 이동)을vg?
. 그러나 여기에 ~
연산자를 사용하여 더 많은 바이트를 절약 할 수 있습니다 ! (이 점을 지적 해 주셔서 감사합니다 @Doorknob)
내 vim 답변과 here 및 post의 동등한 V 답변 에서이 트릭이 실제로 작동하는 것을 볼 수 있습니다 .
답변
10 번의 키 스트로크 알파벳
이 기술에 대한 모든 크레딧은 Lynn 이 사용합니다. 입니다. 나는 후손을 위해 여기에 쓰고 있습니다.
다음 10 가지 키 스트로크를 사용하여 소문자 알파벳을 잡아 당깁니다.
:h<_␍jjYZZ
( ␍
캐리지 리턴, 즉 Enter 키가있는 곳 )
설명
:h<_␍
v_b_<_example
텍스트를 포함 하는 도움말 섹션 (시각적 블록 선택의 예)을 엽니 다 abcdefghijklmnopqrstuvwyxz
. jjY
해당 줄로 내려 가서 줄을 서서 ZZ
도움말 창 을 닫습니다.