나는 최근에 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
도움말 창 을 닫습니다.