08 Vim 기본 - 특정 문자로 커서 이동

Vim 특정 문자로 커서 이동하기

이번에는 f, F, 't', T' 키를 활용해서 한 줄 안에서 특정(지정한) 키로 이동할 수 있는 방법을 알아본다. 앞서 살펴보았듯, 문자 단위로 한 글자씩 좌, 우로 이동할 수 있었는데 h, l 로 가능했다. 단어 단위로 점프하고자 할 때는 w, W, b, B, e, E 등을 활용했다. 그러나 때로는 단어 단위가 아니라 '특정 문자까지'를 명령의 대상으로 삼고싶을 때가 있다. 다음 코드를 보자.

Calculator c2 = new CalculatorDecoMinus(); // 주석만 남기고 싶다면?
↑ 커서는 C 위치에 있다고 가정

현재 커서가 맨 첫번째 문자 - C 에 있다고 가정하자. 이 때, 주석만 남기고자 한다면 어떻게 할 수 있을까? 한번 생각해보자. 다양한 답이 나올 수 있다. vim 고수라면, 여러가지 방법들이 생각해낼 수 있을 것이다. '특정 문자로 커서 이동하기' 기능을 활용하면 단 한번의 명령 - dt/로 해결할 수 있다. (미리 명령어를 풀어 설명하자면, '지워라(d) "/" 문자 까지(t)' 로 해석할 수 있다.)

vim 에서 특정 문자로 이동하는 모션을 활용하여 커서를 한번에 해당 문자로 이동시킬 수 있다.

f, t - 지정 문자까지 앞으로 이동하기

  • f 명령어는 지정한 문자가 존재하는 위치로 이동한다.
  • t 명령어는 지정한 문자 바로 직전 위치로 이동한다.

다음 스크린샷과 같이 f 명령어는 지정한 문자 직전 문자로 이동한다. 반면 t 명령어는 해당 문자 직전 문자까지 이동한다. t 는 till 의 앞글자를 의미하는데, '~까지'라는 의미를 담고 있다. 따라서 '지정 문자 직전까지'라고 이해하면 기억하기 쉽다. f 는 find 의 앞글자를 따온 것 같다. 실제로 해당 문자를 찾겠다라는 의미로 이해하면 되겠다.

f 와 t 명령어의 차이

F, T - 지정 문자까지 뒤로 이동하기

  • F(shift + f) 명령어는 지정한 문자의 위치로 뒤로 이동한다.
  • T(shift + T) 명령어는 지정한 문자 바로 직전 위치로 뒤로 이동한다.

f, t 와 동일한 원리로 거꾸로 이동할 뿐이다. 커서로부터 전에 있는 문자를 찾는다.

F, T 는 지정 문자까지 '거꾸로' 커서를 이동시킨다.

; - 이전 커서 이동 명령 재실행

다음 코드를 보자.

load('some', 'thing', 123, 345, 234, 'apple', 'micro soft')
↑현재커서위치                       ↑이동하고싶은 위치

(

파라미터들이 좀 억지스럽기는 하지만...

) '현재커서 위치'와 '이동하고싶은 위치'를 표시해보았다. 이동하는 방법은 여러가지가 있을 수 있다. w 를 여러번 눌러도 된다. 하지만 그러지는 말자. vim 은 그렇게 쓸 수도 있지만, 항상 더 나은 방법이 있는지 고민해보아야 한다. 그게 The Vim Way 이다. ',' 라는 문자로 이동하기를 활용하면 된다. 다음 스크린샷을 보자.

vimi 에서 특정 문자로 이동하기. 정확히 ',' 문자로 이동하고 있는 모습을 볼 수 있다. 하지만 아직 부족하다. 

원하는 위치까지 이동하기 위해서 키스트로크가 총 몇번 일어났는지 세어보자. 총 10번이다. 더 줄일 수 있는 방법이 있다. vim 에서는 f, F, t, T 명령어에 대해서는 직전에 수행한 찾기를 반복할 수 있는 기능을 제공한다. ; 키를 누르면 직전에 했던 찾기를 바로 수행할 수 있다.

vim ';' 키를 활용하여 직전에 수행한 커서 이동 명령 반복하기

사실 이런 기능을 제공하는 것은 당연하다. 한 줄에 동일한 문자가 충분히 여러번 출현할 수 있다. 위 코드에서 micro soft 의 t 문자로 이동하는 것도 한 번에 불가능하다. 이 때도 ft 로 thing 의 t 로 이동한 뒤, ; 키로 그 다음 t 로 점프할 수 있다.

 

여기서 한 설명은 f, F, t, T 에 대하여 모두 유효하다. T 명령어와 ; 키를 조합한 예제를 하나만 더 보도록 하자. 다음 코드와 같이 현재 커서는 줄의 마지막 문자에 위치하며, 첫번째 괄호 안 args 의 a 문자로 이동하고 싶다고 가정하자.

const onLineFunc = (args) => ({(+args[0].value) + (1000)});
                    ↑이동하고싶은 위치                     ↑현재커서위치

지금 당장은, a 를 지정해서 Fa 명령 수행 후 ; 를 사용하는 것이 더 효율적이지만, 이 부분에서는 T; 를 활용하는 방법을 확인하기 위해 T( 를 조합을 활용해서 점프해보도록 하자.

vim T 명령어와 ';' 키를 활용하여 직전에 수행한 커서 이동 명령 반복하기

f, F, t, T는 모션

f, t, F, T 는 모두 모션이다. 따라서 오퍼레이터와 조합하여 응용할 수 있다. 글 도입부에 dt/ 라는 명령어를 이용해서 주석까지 d 명령어를 수행했던 것처럼 다양한 응용이 가능하다. 즉, c, d, v 명령어와 조합하여 활용할 수 있다.

 

맨 처음에 예시로 d 를 살펴보았으니 여기서는 c, v 와 조합하여 사용한 예를 살펴본다.

오퍼레이터 c 와 조합

다음 코드에서 마지막 인자를 변경하고 싶다면 어떻게 해야할까? 커서는 맨 오른쪽 끝에 위치하고 있다고 가정하자.

load('some', 'thing', 123, 345, 234, 'apple', 'micro soft');
                                                           ↑현재커서위치

'apple', 'microsoft' 를 각각 'amazon' 를 'tesla' 으로 변경하고 싶다고 가정하자. 다음 스크린샷과 같이 할 수 있다.

vim T 와 t 를 활용한 예

물론 더 다양한 방법들이 있을 수 있다. 최적의 방법을 찾아보는 것도 좋은 경험이 될 것이다. 여기서는 특정 문자로 이동하는 방법을 '굳이' 활용한 예를 보여준 것이다. 사실, 여기서 알아본 특정 문자로 이동하는 방법은 추후 매크로와 조합되었을 때 그 효과를 더욱 실감할 수 있다.

오퍼레이터 v 와 조합

v 는 앞선 포스팅에서 살펴보았듯, Vim Visual Mode 로의 진입을 위한 명령이다. 다음 코드에서 load 함수의 숫자로 된 부분을 save 함수의 인자로 붙여넣고 싶은 상황을 가정해보자.

                      ↓ 2.숫자부분을 복사하여            ↓ 1.현재커서위치
load('some', 'thing', 123, 345, 234, 'apple', 'tesla');
save();
    ↑ 3.여기에 붙여넣기

vt, 와 ; 를 활용하여 영역을 지정했고, y 로 복사하여 붙여넣을 위치로 이동한 뒤 p 로 붙여넣었다.


이상으로 Vim 에서 특정 문자로 이동하고자 할 때 사용하는 명령어에 대해서 알아보았다. Vim 에서는 커서를 이동시키는 방법만 해도 여러가지이다. 장황하게 많은 것이 절대 아니고, 모두 적절하게 쓰일 적절한 순간들이 있다. 그만큼, 어떤 대상을 정확히 지시한다는 것이 수고로운 일인지 알 수 있다. 보통 논문이나, 전문적인 내용을 다루는 글들은 글의 도입부에 용어를 명확히 하고 시작하듯, Vim 도 그렇다. 대상을 정확히 지시하기 위해 지시하는 방법도 여러가지인 것이다.

 

[The Vim Way] 01 Vim 기본조작 - Vim 의 실행과 종료 글부터 여기까지 정주행했다면, 먼저 박수를 쳐주고 싶다. 곧 클라이맥스다. 다음 포스팅에서는 Vim 에서의 문자열 찾기에 대해서 다뤄보도록 하자.

반응형

Designed by JB FACTORY