Vim에서의 골프 팁 나는 최근에 vim이

나는 최근에 vim이 골프, 특히 어떻게 잘 작동하는지 깨달았습니다 . 또한, 메타 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도움말 창 을 닫습니다.