콘텐츠로 건너뛰기
Home » 도구와 팁 » vi/vim in Linux » 페이지 3

vi/vim in Linux

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) 사용자 정의 함수를 작성하는 법

Vim에서 간단한 조작으로 좀 더 복잡한 기능을 만드는 기능으로는 키맵이나 사용자 정의 명령을 정의하는 방법들이 있다. 다만 이러한 기능들은 기본적으로 항상 똑같은 입력을 단축하여 수행하게 하는 수준에서 사용된다. 특정한 환경이나 조건에서 작동하도록 기능을 커스터마이징하고 싶거나, 보다 복잡하고 정교한 기능을 사용하고 싶다면 사용자가 직접 함수를 정의하여 사용할 수 있다.

사용자 정의 함수는 다음과 같이 사용할 수 있다.

  • 특정 키맵을 사용하여 사용자 정의 함수를 호출한다.
  • 사용자 정의 함수를 호출하는 사용자 정의 명령을 만들어 사용한다.
  • 삽입모드 키맵을 만들어서 입력 중에 특정 키를 눌러 사용자 함수를 호출한다.

사용자 함수를 정의하는 전통적인 명령은 :fu[nction] 으로, 명령을 선언한 후 :endfu[nction] 명령을 만날 때까지 입력된 모든 명령이 순서대로 함수의 body로 기록되는 방식이다.이 명령은 새로운 함수를 정의하는 동작 외에도 기존에 생성된 사용자 정의 함수를 모두 리스트업하는 기능을 수행한다. 예를 들어 이름이 “~Files”로 끝나는 사용자 함수들을 확인하려면 :function /Files$ 라고 실행하면 함수의 검색 결과를 볼 수 있다.

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

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

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

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

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

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

:%s/\s\+$//

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

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

VIM의 내장 자동완성 사용하기

vim은 단순한 텍스트나 설정 파일을 편집하는데 사용할 수도 있지만, 아주 오랜 역사에서 코드 에디터로 발전하며 여러 가지 기능들을 제공하고 있습니다 코드 에디터에서 가장 기본적으로 제공해야 하는 기능에서는 자동완성을 빼 놓을 수 없습니다. 물론 문맥에 맞는 자동완성 키워드를 추천해주는 vim 플러그인도 많이 있지만, 기본적으로 이러한 플러그인들 역시 vim의 내장 자동완성을 함께 사용하고 있는 경우가 많습니다. 즉, vim은 순정상태(?)에서도 기본적인 키워드 자동완성 기능은 제공할 수 있습니다. vim에서 자동완성을 사용하는 가장 기본적인 방법은 키워드의 앞 한 두 글자를 입력한 후 <C-N>(Ctrl + N)을… 더 보기 »VIM의 내장 자동완성 사용하기

Vim – 레지스터에 관해

Vim에서 문자열을 복사하는 동작을 지칭할 때 흔히 copy라는 단어 대신에 yank라는 단어를 사용한다. vim의 전신인 vi가 개발되던 때에는 OS의 사용환경이 터미널이었으며, 이 때에는 클립보드라는 개념이 없었기 때문에, 어떤 데이터를 임시로 복사했다가 다른 곳에 옮기는 것은 응용 프로그램이 사용하는 메모리의 특정 영역을 사용했고, 이 당시에는 ‘copy’라는 단어는 복사본을 만드는 것이지 지금처럼 클립보드에 데이터를 넣어두는 개념이 아니었기 때문이다.

Vim은 내부에서 임시로 복사해두는 메모리 영역을 하나가 아니라 여러 개를 사용하며, 이는 CPU의 기억장치와 같이 “레지스터”라는 이름으로 부른다. 이 레지스터들은 알파벳이름과 숫자 그리고 몇 가지 기호로 이름이 붙은 여러 개가 존재하는데, 보통 알파벳 이름의 레지스터는 사용자가 임의로 사용할 수 있으며, 숫자와 기호로 이름이 붙은 레지스터들은 특정한 동작이 발생할 때 변경된 데이터가 자동으로 임시로 보관되는 영역으로 사용된다.

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

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

:bufdo 명령

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

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

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