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

vi/vim in Linux

vim에서 패턴에 매칭되는 영역을 추출하기

지난 글에서 notepad++에서 특정 패턴에 매칭되는 영역만 추출하는 방법에 대해 소개하였는데요, 이번에는 vim에서 같은 기능을 어떻게 구현할 수 있는지에 대해서 알아보겠습니다. :s/{pattern}/\= 버퍼 내의 텍스트를 치환하는 :s 명령에서, 패턴 다음에 오는 치환할 문자열 부분이 \= 으로 시작하는 경우에는 이 영역이 표현식(expression)으로서 평가됩니다. 만약 표현식을 평가한 결과가 리스트 타입인 경우에는 최종 결과는 개행 문자로 결합된 형태가 됩니다. 이 표현식 내부에서는 submatch()함수가 매치된 텍스트를 얻는데 사용될 수 있습니다. 매치된 전체 영역은 submatch(0)으로 표현하며, 만약 매치 패턴에 그룹을 지정했다면, 괄호 안에는 그룹의 번호가… 더 보기 »vim에서 패턴에 매칭되는 영역을 추출하기

vim에서 설정파일을 메뉴로 열기

개인적으로 vim 설정을 하나의 vimrc 파일에 몰아서 만들기 보다는 여러 개의 파일로 쪼개어 사용자 설정 폴더 내에 배치해두고 사용하고 있다. 그러다보니 특정한 설정을 수정하려 할 때, 해당 파일을 빨리 찾아서 여는 기능이 필요했다. 사용자 정의 Ex 명령으로 만드는 방법이 있지만, Vim8의 팝업 기능을 사용하면 메뉴에서 원하는 파일을 선택해서 여는 기능을 구현할 수 있다.

더 보기 »vim에서 설정파일을 메뉴로 열기

Ex명령을 반복하기

vim 에서 Ex명령(콜론(:)으로 명령모드로 진입해 실행하는 명령)을 노멀모드에서 반복하려면 @: 을 사용합니다. 한 번 반복한 후에는 @@ 를 사용해서 반복할 수 있습니다. 참고로 변경이나 치환, 삭제등의 편집 명령은 노멀모드에서 . 명령을 통해 반복할 수 있어요. 이러한 반복 명령은 모두 앞에 숫자를 붙여서 한 번에 원하는 횟수만큼 자동으로 반복할 수 있습니다. @는 원래 특정한 레지스터에 들어있는 내용을 자동으로 실행해주는 명령이에요. 보통 q 를 사용해서 매크로를 녹화한 후에 매크로를 실행할 때 사용합니다. 이전 명령을 실행하는 다른 방법으로는 : 키로 명령모드로 전환한 후에… 더 보기 »Ex명령을 반복하기

vim9script 로 autoload 함수 작성하기

vim의 플러그인 스크립트는 런타입 디렉토리 내 plugin 디렉토리 아래에 위치하며, vim이 시작될 때 해당 디렉토리 하위의 모든 vim 파일을 로딩하게 됩니다. 만약 라인 수가 많은 스크립트가 있거나 혹은 읽어들여야 하는 스크립트 파일이 많다면 vim의 초기 시작 시간에 영향을 주게 됩니다. 따라서 많은 플러그인들은 이러한 시작 성능의 영향을 최소화하기 위해서 스크립트의 로딩 시점을 최대한 뒤로 미루는 방법을 적용합니다.

  1. 특정한 타입의 파일을 편집하려할 때 필요한 기능이 있다면 ftplugin 디렉토리 내에 vim 파일을 위치 시킵니다. 여기에 있는 스크립트들은 그 이름과 동일한 타입의 버퍼가 열릴 때 로드됩니다.
  2. 공통적으로 사용하는 함수라면 autoload 디렉토리에 작성합니다. 이 디렉토리에 있는 파일은, 특별한 패턴의 이름으로 함수를 정의하며, 해당 함수가 실제로 호출되기 전까지는 파일이 로드되지 않습니다
더 보기 »vim9script 로 autoload 함수 작성하기

vim에서 여러 파일에 찾기/바꾸기

리눅스 쉘에서, 여러 텍스트 파일의 내용들 중 특정한 단어나 패턴을 찾는데 사용되는 유틸리티인 grep 이라는 프로그램이 있습니다. vim에서도 grep과 같이 여러 파일에서 단어나 패턴을 한꺼번에 찾을 수 있는 기능을 제공합니다. vim의 이러한 기능은 다시 두 가지로 나뉩니다. 첫째로 vim은 그 자체로 grep과 비슷한 기능을 제공하도록 구현되어 있어서 내장된 :vimgrep 이라는 명령을 사용합니다. 이 방식은 vim만 있으면 사용할 수 있고, 플랫폼마다 개행문자가 다르게 쓰이는 부분이나 파일 인코딩을 자동으로 처리해주는 장점이 있습니다만, 속도가 느리다는 단점이 있습니다. 두번째 방법으로는 아예 grep을 사용하여 텍스트를 탐색하고, 그 결과를 vim으로 가져오는 방식이 있습니다. 오늘은 vim에서 grep과 같이 여러 파일에서 텍스트를 검색하고 결과를 사용하는 방법에 대해서 살펴보겠습니다.

더 보기 »vim에서 여러 파일에 찾기/바꾸기

vim의 탭 및 들여쓰기 관련 설정

vim 설정 파일을 작성할 때, 초반에는 누군가의 설정 내용을 참고해서 만들고 불편한 부분들을 나에게 맞게 고쳐나가는 방식을 많이 사용하다 보니, 어떤 부분은 설정 파일에 떡하니 설정은 해두었지만 무슨 내용인지, 어떤 효과를 내는지 모르는 것이 많다. 특히 탭이나 들여쓰기 관련 설정이 그러한데, 일부 언어에서는 공백의 수가 문법적으로 크리티컬한 경우도 있다. 이런 문제 외에도 들여쓰기와 탭 동작은 취향과 필요에 따라서 잘 설정해야 하는 부분일 것이다. 오늘은 탭과 관련된 설정 몇 가지에 대해서 알아보도록 하자.

더 보기 »vim의 탭 및 들여쓰기 관련 설정

Vim에서 점프하기

Vim에서 우리는 ‘마크’라는 것을 사용하여 특정한 파일의 특정한 위치에 표식을 남겨두고 단축키를 사용하여 해당 위치로 언제든 돌아갈 수 있습니다. 특정 위치에 a 라는 마크를 남기고 다시 다른 파일을 편집하던 중에 이전에 마킹해놓은 위치로 돌아가는 동작을 Vim에서는 “점프”라고 합니다. Vim에서 이러한 점프는 현재 창에서 새로운 버퍼를 연다거나, 이전 편집 위치로 이동하거나 하는 등의, 스크롤을 통한 이동을 제외한 대부분의 이동이 해당됩니다. Vim에서 편집을 하던 중에 점프가 발생하면, Vim은 점프를 하기 전에 현재 ‘위치’를 “점프 리스트”라는 큐에 기록합니다. 그래서 점프를 통해 다른 곳으로… 더 보기 »Vim에서 점프하기

vim에서 긴 행을 자동 줄바꿈하는 올바른 설정

세상에는 메모장을 위시로 하여 수 없이 많은 GUI 기반 텍스트 편집기가 있습니다. 그 중 가장 간단한 텍스트 편집기인 윈도 메모장에서도 “자동 줄 바꿈”이라는 옵션은 존재합니다. 메모장에도 있을 정도의 기능이면 줄바꿈 없이 긴 문장을 화면에서 읽으려고 할 때, 가장 필요한 기능이라고도 할 수 있겠습니다. 오늘은 vim에서 긴 행은 어떻게 처리되는지, 그리고 이런 ‘자동줄바꿈’과 관련된 옵션은 어떤 것들이 있고 어떻게 설정하면 좋을지에 대해 생각해 보도록 하겠습니다.

더 보기 »vim에서 긴 행을 자동 줄바꿈하는 올바른 설정

vim에서 작성중인 코드를 바로 실행하기

vim에서 파이썬이나 자바스크립트 코드를 작성하면서 실행 결과를 보고 싶을 때에는 보통 :!python % 명령을 실행해서 현재 파일을 실행하는 쉘로 잠시 넘어가서 결과를 볼 수 있습니다. 이 방법은 쉽게 실행해볼 수 있다는 장점이 있지만, 실행되는 동안 vim 화면을 볼 수 없고, 실행을 마치고 vim으로 돌아가면 출력된 결과를 다시 확인하기가 어렵다는 것입니다. VSCode 처럼 별도의 창에서 소스를 실행해보고 그 결과를 계속 확인할 수 있으면 참 좋을 것 같습니다. 이런 일을 도와주는 플러그인이 있을 것 같은데, 그냥 직접 만들어보기로 했습니다. 참고로 vim9 스크립트로 작성하였습니다.

더 보기 »vim에서 작성중인 코드를 바로 실행하기

vim9 스크립트에서 달라진 점

요 며칠전 vim 9.0 정식 버전이 사전 예고도 없이 갑작스럽게 릴리즈되었습니다. 뭐 예전부터 따로 베타 릴리즈 같은 걸 했던 코드는 아니어서… 오랜만의 메이저 릴리즈라 그런지 여기 저기서 많은 소식이 들려오고 있습니다. 개인적으로는 vim 8.0에서 새로운 기능은 더 많이 도입됐던 것 같은데, 이번에는 vimscript의 개선이라는 정말 거창한 주제 하나로 메이저 업데이트를 시행해서인지 주변에 vim을 쓴다는 사람들은 다들 관심을 보이는 것 같습니다. 사실, vim 8.2를 유지하던 시점에서도 vim의 새로운 스크립트 처리 관련 패치는 꾸준하게 이뤄지고 있었습니다. 즉 소스를 계속 받아서 빌드해본 사람이라면 오히려 9.0 릴리즈가 그렇게 새로운 것인가… 하고 약간 어리둥절해지는 그런 기분이 듭니다.

vim 8.0 이전부터 vimscript의 성능 개선에 대한 요구는 굉장히 많았습니다. vim 8.0 에 대거 추가된 많은 기능들은 사실, 사용자들로부터 투표를 받아서 채택한 기능들입니다. 이 때에도 vim script의 성능 개선 요구는 굉장히 많았지만, 그러한 니즈가 Bram 자신에게도 있었고, 아마도 그는 단순한 성능 개선 이상의 무엇인가를 원했던 것 같습니다. 그래서 다른 스크립트 언어의 런타임을 내장하면서 기존 vim script를 다른 언어로 컴파일하는 Neovim 과 같은 전략을 채택하는 대신, vim9script 라는 새로운 문법의 스크립트를 도입하는 것을 선택했습니다.

더 보기 »vim9 스크립트에서 달라진 점