(Vim) 사용자 정의 함수를 작성하는 법

사용자 함수 정의

사용자 함수를 정의하는 명령은 :fu[nction]이다. 뒤에 !을 붙이면 이전에 정의한 함수를 새로 정의하게 된다. 해당 명령 이후에 :endfunction을 만날 때까지 이어지는 명령들은 모두 함수의 본문으로 인식된다.

:function 명령은 함수를 정의하는 것 외에 EX명령으로 모든 함수의 목록을 출력하는 기능을 가지고 있다. 이 때 함수 이름을 인자로 주면 해당 이름의 함수를 출력한다. 또 :function /{pattern}의 형식으로 호출하여 특정한 패턴의 이름을 가진 함수를 출력한다. 예를 들어 File로 끝나는 이름의 함수들은 :function /Files$ 명령으로 출력할 수 있다.

(Vim) 사용자 정의 함수를 작성하는 법 더보기

(Vim) 선택영역을 괄호로 둘러싸기

텍스트나 코드를 편집할 때 종종 특정 단어나 영역을 괄호, 따옴표 등으로 둘러싸야 하는 경우가 있다. 이런 경우 보통 영역선택 > 잘라내기 > ( ) 입력 > 괄호내부에 붙여넣기 하는 식으로 편집하게 된다. 편집기에 따라서는 영역을 선택하고 ( 만 입력하면 자동으로 선택 영역 뒤에 )를 붙여주는 경우도 있다. 이런 기능을 vim에서 키 맵으로 만들어보자.

(Vim) 선택영역을 괄호로 둘러싸기 더보기

(Vim) Ex 프롬프트에서의 편집 방법

vim을 사용하다보면 입력모드 만큼이나 명령모드도 많이 쓰게 된다. 기본적으로 vim은 명령 입력 프롬프트에서도 탭 키만 누르면 다양한 자동완성을 이미 지원해주고 있다. 오늘은 Ex모드에서 알아두면 유용할 몇 가지 팁을 소개한다.

맵핑을 적용하기

cmap을 사용하면 Ex모드에서 명령줄을 편집할 때 사용될 키맵을 작성할 수 있다. 입력모드와 마찬가지로 jk를 눌러서 빠져나온다던지, 혹은 <expr> 키 맵을 사용해서 특정한 변수나 함수 실행 결과를 사용할 수도 있다.

:cnoremap jk <Esc>

하지만, Ex모드에서도 기본적인 커서이동, 삭제와 같은 편집 기능은 물론 자동완성도 제공해준다. 굳이 할 필요는 없을 듯… 또, 기본적으로 위/아래 화살표 키를 눌러서 이전 입력 히스토리를 탐색할 수 있다. (이전 입력 히스토리는 <C-F>를 눌러서 전체를 보면서 찾을 수도 있다.)

(Vim) Ex 프롬프트에서의 편집 방법 더보기

(Vim) 필요없는 공백제거하기

왠만한 편집기들은 파일을 저장하기 전에 각 라인의 뒤에 들어있는 쓸데없는 공백들을 제거해주는 기능을 제공한다. (이러한 trailing space들의 해악에 대해서는 따로 말할 필요가 없을 것 같다.) 물론 vim에서도 이걸 사용할 수 있다. :s 명령을 사용하면 각 줄에서 맨 뒤쪽 공백을 제거할 수 있다.

:%s/\s\+$//

간단히 설명하면 이 명령은 다음과 같이 동작한다.

(Vim) 필요없는 공백제거하기 더보기

(Vim) 입력모드의 자동완성

vim은 사실 기본적으로 현재 버퍼에 입력된 키워드를 기반으로 자동완성을 제공한다. 다만 그게 <Tab> 키가 아닐 뿐이다. 어떤 내용이든 입력하는 사이에, 입력모드에서 <C-n>을 입력해보자. (Ctrl + N) 그러면 커서 왼쪽의 단어의 일부로 시작하는 현재 버퍼 내의 키워드들로 자동완성이 시작된다. (후보가 2개 이상이면 팝업으로 표시된다.)

이렇게 자동완성 모드가 시작되면 <C-n>은 다음 후보로 진행하며, 이전 후보로 진행하는 것은 <C-p>이다.

이 자동완성 후보 목록은 'complete' 옵션에서 정할 수 있는데, 이 옵션은 콤마로 연결되는 문자들의 목록이고 다음과 같은 의미를 갖는다. 생각보다 엄청많고 별도의 설명이 또 필요할 것 같지만.. 여기서는 생략한다. 기본적으로 이 값은 . u b t i로 정해진다.

(Vim) 입력모드의 자동완성 더보기