Home » 도구와 팁

도구와 팁

Vim 설정 관련 팁

옵션 목록과 도움말 찾기 옵션을 설정하기 전에 옵션에 관한 도움말을 읽어보는 것을 권장한다. 전체 옵션을 한 눈에 볼 수 있는 명령으로 :opt 가 있다. 이 명령을 실행하면 현재 창에서 새 분할 창이 생겨서, 전체 옵션이 망라되고 간단한 설명과 현재 설정되어 있는 값을 확인할 수 있다. 분할창을 전체 창으로 보려면 ctrl-w o를 누른다. (<ctrl-w>를 누른 후 <o> 키를 한 번 더 누르면 된다.) 옵션 창에서 옵션 이름 위에서 K (대문자이므로 <shift-k>를 누를 것)를 누르면 해당 항목에 대한 도움말을 추가로 표시할 수… 더 보기 »Vim 설정 관련 팁

cocnvim rename 이 작동하지 않을때

cocnvim + jedi-language-server 조합을 사용중인데, 언제부터인가 rename 기능이 작동을 안하기 시작했다. 같은 버전의 cocnvim을 설치했을 때, nvim에서는 잘 되고, vim에서는 PC에 따라서 되는 것도 있고 안되는 것도 있고 원인을 찾을 수가 없었다. (심지어 같은 소스로 빌드한 vim에서도 같은 cocnvim 버전, 같은 nodejs 버전에서도 결과는 모두 달랐다. 또 대상 파일의 언어에 무관하게 재현되는 문제이다.) 일단 임시 방편으로 cocnvim 설정에서 coc.preferences.promptInput 값을 false로 두면 이름 변경할 때 팝업창이 아닌 명령줄에서 이름을 입력하도록 바뀌는데, 이렇게 설정을 바꿔둔 경우에는 테스트 해 본 모든 환경에서… 더 보기 »cocnvim rename 이 작동하지 않을때

vim에서 터미널로 코드를 실행하기

vim에서 파이썬이나 자바스크립트 코드를 작성하고 바로 실행하는 가장 쉬운 방법은 :!python % 과 같이 외부 명령을 바로 호출하는 것이다. 이 경우 vim은 잠시 숨겨지고 해당 명령을 실행하는 상태로 화면이 전환된다.

보다 IDE와 비슷한 느낌(느낌 알잖아요…)이 중요하다면 vim내에서 창을 나누고 그 창에서 실행 결과를 보는 방법이 있다. vim8에서 도입된 job 기능을 사용하여 백그라운드에서 해당 프로그램이 실행되면 그 결과를 새 버퍼로 받아서 보여주는 방법도 있고, 또 아예 :term 명령으로 해당 파일을 여는 방법도 있다.

더 보기 »vim에서 터미널로 코드를 실행하기

(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) 입력모드의 자동완성

Vim – 레지스터에 관해

vim에서 문자열을 복사하는 것을 매뉴얼에서는 copy가 아니라 yank로 설명한다. 이는 전통적인 이유가 있긴한데, 어쨌든 보통의 응용프로그램에서의 ‘복사’는 클립보드에 콘텐츠를 써 넣는 것을 의미한다. 하지만 vim은 항상 클립보드를 사용할 수 있는 것은 아니다. 대신에 ‘레지스터’라는 별도의 메모리 공간을 사용해서 텍스트를 따로 보관했다가 나중에 사용한다. 이는 sed의 홀드 영역과 비슷하다고 할 수 있다. 대신에 vim은 단순히 하나의 저장 영역을 사용하는 것이 아니라 매우 다양하고 많은 레지스터를 사용한다.

레지스터 사용방법

레지스터는 각각의 이름이 있고, 각 이름은 모두 키 하나에 맵핑되어 있다. 레지스터는 기본적으로 편집 명령을 통해서 쓰거나 읽을 수 있다. 복사(y)는 물론 삭제(d, x) 및 교체 (r, s)시에도 제거되는 내용은 즉시 폐기된다기 보다는 특정한 레지스터에 복사할 수 있다. 특정 레지스터에 복사된 내용을 p 등으로 붙여넣는 경우에 레지스터를 사용할 수 있다.

더 보기 »Vim – 레지스터에 관해

열려진 모든 파일에서 문자열 찾기 – Vim

:bufdo 명령

:bufdo는 버퍼 리스트의 모든 버퍼에 대해서 동일한 명령을 반복 수행하는 기능으로, 찾기/바꾸기 외에도 어떤 명령이든 여러 파일에 대해서 한꺼번에 적용하는 기능을 제공한다. 참고로 :silent 처럼 문자열이 아닌 일반 명령 시퀀스가 뒤에 오게 된다. 예를 들어 vim에서 열어놓은 모든 버퍼에서 ‘sample’ 이라는 단어를 ‘fixed’라고 변경하려면, 모든 버퍼를 일일이 옮겨다닐 필요 없이 다음과 같이 :bufdo %s/sample/fixed/g를 실행하면 된다.

이와 비슷하게 모든 창에 대해서 동일한 명령을 반복하거나, 탭 단위로 반복할 수 있다. :windo 명령은 모든 창에 대해서 적용되며, (따라서 창에서 보이지 않는 버퍼에 대해서는 실행되지 않는다.) :tabdo 은 모든 탭에서 실행된다.

더 보기 »열려진 모든 파일에서 문자열 찾기 – Vim