본문 바로가기

Linux & Mac

Vi 사용법 3 (Tip과 플러그인)

반응형

 이전 글들에서는 명령 모드와 ex모드를 다루었으니 입력 모드를 다루어야겠죠. 하지만 입력 모드는 일반 텍스트 에디터와 동일하게 동작하는 모드입니다. 그러니 딱히 설명할 부분이 없습니다. 그래서 이번 글에서는 입력 모드를 간단히 설명한 후, Vi를 이용하면서 유용한 팁들과 플러그인의 설정 및 사용에 대해서 작성했습니다.

 먼저 이전 글들에 대한 링크를 남겨 두고 시작하겠습니다.

2021.04.13 - [Linux & Mac] - Vi 사용법 1 (명령 모드)

 

Vi 사용법 1 (명령 모드)

 Vi의 사용법에 대한 글은 10여 년 전에 이미 올렸었습니다. 그 후 계속 다양한 환경에서 Vi를 사용하면서 꾸준히 사용하는 기능과 사용하지 않는 기능, 그리고 여러 가지 팁들도 생겨서 업데이트

sbinroom.tistory.com

2021.04.19 - [Linux & Mac] - Vi 사용법 2 (ex 모드 : 검색과 치환)

 

Vi 사용법 2 (ex 모드 : 검색과 치환)

먼저 기본 설명과 명령 모드에 대한 설명은 이전 글을 참조해 주시기 바랍니다. 2021.04.13 - [Linux & Mac] - Vi 사용법 1 (명령 모드) Vi 사용법 1 (명령 모드)  Vi의 사용법에 대한 글은 10여 년 전에 이미

sbinroom.tistory.com

입력 모드

 입력 모드는 명령 모드에서 i, a, o, s 키를 이용해서 입력 모드로 변환합니다. 입력 모드에서는 키보드의 입력을 전부 문자로 입력받습니다. 유일하게 'esc' 키 만이 입력 모드에서 명령 모드로 변환하는 키로 동작합니다.

 사용자는 원하는 대로 문서를 편집하고, 특수한 편집이 필요한 경우 'esc'키를 이용해 명령 모드로 변경 후 이용합니다. 이외에 입력 모드에서 특별한 동작은 자동 완성입니다.

자동 완성

 사용자가 소프트웨어 엔지니어 라면, 편집기는 자동 완성 기능을 제공해야 합니다. 일반 텍스트 문서에서도 그런 경우가 많지만 특히 소스 코드에서는 이전에 사용한 키워드( 변수명, 함수명 등 )가 반복적으로 사용됩니다. 따라서 편집기는 사용자가 입력한 문자들을 토대로 예상되는 문장의 예시를 보여 주는 자동 완성 기능을 제공해야 합니다. Vi의 자동 완성 기능은 입력 모드에서 동작합니다. 자동 완성을 하는 키는 "ctrl + p"와 "ctrl + n"입니다. 

  • ctrl + p : 예측되는 문장들을 이전에 사용된 순서로 선택함.
  • ctrl + n : 예측되는 문장들을 이후에 사용된 순서로 선택함.

글로는 무슨 의미 인지 설명하기 어렵습니다. 그래서 아래와 같이 스냅숏을 준비했습니다.

 가장 왼쪽과 같이 각 줄마다 a를 입력합니다. 6번째 줄에서 여섯 개의 a를 입력하는 대신 "aa"를 입력하고, "ctrl + p"와 "ctrl + n"을 입력합니다. 가운데 스냅숏을 "ctrl + p"이고, 오른쪽 스냅숏은 "ctrl + n"입니다.

 키 입력과 동시에 Vi는 자동 완성이 가능한 키워드들을 팝업 해서 보여 줍니다. 이미 입력한 문자열 "aa"가 첫 줄의 문자열 "a"가 될 가능성은 없으니, 다른 8가지 문자열을 리스트업 해서 보여 줍니다. 보여주는 문자열의 목록은 "ctrl + p"와 "ctrl + n"이 동일합니다. 목록은 커서의 다음 열부터 사용한 문자열을 보여주고, 문서의 끝까지 보여준 뒤에는 문서의 처음부터 커서의 위치까지 대응되는 문자열 목록을 표기합니다.

 두 입력의 차이는 커서의 위치입니다. "ctrl + p"는 바로 윗줄에서 사용된 "aaaaa"에 가있습니다. "ctrl + n"키는 바로 아랫줄에서 사용된 "aaaaaaa"에 가있죠. 만약 선택된 키워드가 아닌 다른 키워드를 원하시면 화살표 상하 키 혹은 "ctrl + p"나 "ctrl + n"으로 선택하실 수 있습니다.

 Vi의 자동 완성 기능은 소프트웨어 엔지니어를 위해 개발된 고성능 IDE에 비하면, 수준이 낮습니다. 고성능 IDE들은 표준 함수들과 연동되어 사용자가 입력을 다 하지 않아도, 예상되는 함수명, 변수명을 알려주고, 함수의 형태까지도 보여 줍니다. 하지만 Vi는 해당 문서와 사용자 지정 문서 (#include를 이용해 호출한 사용자 지정 파일들)들에서 이용된 키워드만 찾아주고, 함수의 기본 형 같은 것도 보여주지 않습니다. 사용자에 따라서는 치명적인 단점이 될 수도 있습니다.

 위 단점을 가지고 있음에도 최소한 저는 Vi를 이용합니다. 이유는 상기 단점을 무시해도 좋은 빠르다는 엄청난 장점을 가지고 있습니다. 자동완성 기능도 편집 중인 문서와 사용자 지정 문서에서만 매칭 되는 키워드를 찾으니, 당연히 빠르겠죠. 함수의 원형을 보여 주는 기능이 없는 점은 화면 분할을 통해 다른 터미널에서 헤더 파일을 보거나, 표준 함수들의 API를 검색해서 해결할 수 있습니다.

 설명하다 보니 개인적인 의견까지 추가해 버렸네요. 다음으로 미세 팁을 하나 설명드립니다.

숫자 증가, 감소

 이 팁은 정말 사소한 미세 팁이지만, 제 경우에 많이 사용하고 있기 때문에 굳이 언급합니다. 문서를 작성하다 보면 숫자를 표기할 때가 많죠. 가끔은 숫자를 1 증가시키거나 감소시켜야 합니다. 일반 텍스트 에디터에서 이런 작업은 숫자를 지운 뒤, 다시 기재합니다.

 Vi에서는 어떻게 해야 할까요. 편집 모드에서 'x'키를 이용해 삭제한 뒤, 'i'키로 입력 모드가 되게 한 후, 숫자를 입력한 뒤, 'esc' 키로 편집 모드로 돌아가겠죠. 아니면 간단하게 편집 모드에서 "ctrl + a" 혹은 "ctrl + x"키를 눌러 주시면 됩니다.

  • ctrl + a : 커서의 위치 혹은 다음에 나오는 숫자를 1 증가.
  • ctrl + x : 커서의 위치 혹은 다음에 나오는 숫자를 1 감소.

  아래 스냅숏을 이용해 추가 설명드리겠습니다.

 문서의 원본은 왼쪽과 같이 count1이 다섯 줄에 쓰여있고, 커서는 첫 번째 줄의 c에 있습니다. 이 상태(명령 모드)에서 순서대로 'j', "ctrl + a", 'j', "ctrl + a", "ctrl + a", 'j', "ctrl + a", "ctrl + a", "ctrl + a", 'j', "ctrl + a", "ctrl + a", "ctrl + a", "ctrl + a"를  눌러 주면 오른쪽 스냅숏과 같이 변경됩니다.

 위 팁은 코딩 시에는 loop문의 조건을 변경하거나, 참조하는 변수의 인덱스를 변경하거나 하는 경우 잘 사용되며, 스크립트 구문 작성 시에 반복 조건을 변경하는 식으로 유용하게 사용되는 팁입니다.

플러그인

 Vi는 아주 좋은 에디터이지만, 단독으로 사용하기에는 기능이 부족한 것 또한 사실입니다. 이러한 기능을 보강하는 방법으로 플러그인이 이용됩니다. 이 글에서는 Vi의 다양한 플러그인 중 제가 활용하는 Buffer Explorer를 대상으로 설치 및 사용 방법에 대해 설명하겠습니다.  이외에도 유용한 플러그인이 많으니, 검색을 통해 본인에게 적합한 플러그인을 설치하시는 것을 추천드립니다.

 Vi는 다수의 파일을 열었을 때 버퍼로 각 파일을 관리합니다. 만약 10개의 파일을 열었다면, 각 파일에 대응되는 10개의 버퍼가 유지되고, ":b! [number]"를 이용해 버퍼 간 이동이 가능합니다. 각 파일들은 열은 순서로 번호를 부여받기 때문에, 번호를 기억하면 여러 파일을 이동하며, 편집할 수 있게 것이죠. 하지만, 각 파일의 번호를 기억하는 건 힘들기 때문에 실제로 사용하긴 어렵습니다.

 Buffer Explorer는 vi에서 버퍼 간 이동을 쉽게 해주는 플러그인입니다. 번호를 기억하는 대신 ":BufExplorer"를 실행해서, 열려 있는 파일의 리스트를 확인하고, 해당 파일로 쉽게 이동할 수 있도록 도와줍니다.

 글을 쓰면서 찾아보니 Buffer Explorer 보다 NerdTree라는 유사한 기능을 수행하는 플러그인이 더 인기 있는 것 같습니다. 나중에 한번 이용해 보고, 필요하면 다른 글로 정리해 볼까 합니다.

설치

 인터넷에서 플러그인을 받아 보면 doc폴더와 plugin 폴더가 있습니다. 이 두 개의 폴더를 원하는 위치에 복사해 주시면 플러그인의 설치가 끝납니다. 이때 설치 위치는 둘로 나누어집니다.

  • /usr/share/vim/vim[version]/
  • /home/[user ID]/.vim/

 위의 경로에 설치해 주시면, 설치한 본인뿐만 아니라 다른 사용자도 이용할 수 있습니다. 아래 경로는 설치한 본인만 사용 가능합니다. 위 경로의 경우 당연히 루트 유저의 권한이 필요합니다.

사용

 플러그인을 사용할 때에는 ex 모드에서 플러그인을 호출하는 키워드를 입력하면 됩니다. Buffer Explorer의 경우 "BufExplorer"입니다. 아래 스냅숏을 통해 추가 설명하겠습니다.

 예제로 제가 몇 년간의 저를 녹여 넣은 프로젝트를 이용했습니다. 소스코드에 블러를 하려다가 스냅숏을 만들면서 보니 별로 필요 없더군요. 1번 스냅숏에서는 프로젝트의 모든 소스코드를 보기 위해 main.cpp파일과 src폴더의 모든 파일을 열어 줍니다. 2번 스냅숏은 프로젝트의 main.cpp파일이 편집당할 준비를 하고 있습니다. ex 모드에서 "BufExplorer"를 입력합니다. 3번 스냅숏을 보시면 Buffer Explorer가 이용되어, 1번 스냅숏에서 열은 모든 파일이 리스트업 되어 있습니다. 가장 앞열의 숫자는 라인 넘버가 아니라 버퍼의 넘버입니다. 8번으로 열려 있는 파일을 열어 줍니다. 4번 스냅숏을 보시면 해당 파일이 열려 있는 것을 보실 수 있죠. 다시 한번 "BufExplorer"를 입력해서 Buffer Explorer를 열어줍니다. 5번 스냅숏에서 열린 파일 목록을 보면 8번 파일이 가장 위에 있습니다. 이렇게 최근 접근 순으로 Buffer Explorer는 파일을 재 정렬해서 보여줍니다.

 Buffer Explorer를 활용하면, 파일 간 이동이 쉬워져서, 훨씬 쉽게 Vi를 활용할 수 있습니다. 이 외에도 다양한 플러그인이 있으니, 자신의 편집 스타일에 맞는 플러그인을 받아서 사용해 보시길 추천드립니다.

 사실 이글에서 vim의 환경 설정에 관한 글도 추가하려고 했으나, 해당 부분은 조금 더 복습해 보고 써야 할 것 같네요. 향후 해당 부분을 정리해 보고, 분량에 따라 여기 추가해서 글을 수정하거나, 다른 글로 추가하겠습니다. 감사합니다.

반응형