본문 바로가기

Editor/Editor [Vim]

VIM Tip

ViEditor 를 사용할 때 알아두면 유용하지만, 기존 문서나 초보자용 가이드 등에서 언급되고 있지 않은 내용들을 모아 두는 페이지


1 한 화일의 여러 곳을 동시에 편집할 때 

터미널 두 개를 띄워서 vi 를 쓸 수는 없다. 일관성 유지를 위해서 하나의 화일은 하나의 vi 에서만 write 할 수 있도록 하기 때문이다. 이런 경우
:new 현재편집중인화일이름
으로 화일을 열면, 하나의 화일을 분할된 두 창에서 동시에 편집할 수 있다. 한쪽 창에서 수정한 내용은 다른쪽 창에도 실시간으로 반영된다. 힘들게 화일의 이곳 저곳을 왔다갔다하느라 애쓸 필요가 없다. new 명령은 화면을 분할해서 다른 화일을 동시에 편집할 수 있게 하는 명령인데, 현재 편집 중인 화일을 다시 열 수도 있다는 점을 이용한 것이다.
약간의 차이는 있지만, :sp 하면 현재 편집중인 파일을 다른 창에서 편집하게 됩니다. :new 의 설명을 보면 This behaves like a ":split" first, and then a ":e" command. 

2 folding 

  • 원하는 구역을 v 로 visual block 을 잡는다. (% 를 사용하여 괄호의 양끝을 블럭으로 잡으면 편하겠다)
    vi_folding_1.png
  • zf 를 하면 해당 구역에 fold 가 만들어진다.
    vi_folding_2.png
  • :set fdc=숫자 을 하면 왼쪽에 fold 의 범위를 나타내는 컬럼이 '숫자'개 너비만큼 생긴다.
    vi_folding_3.png
  • fold 를 중첩해서 만들 수도 있다. 하지만 일부만 겹치게 만들 수는 없다.
    vi_folding_4.png
  • fold 를 펼치는 것은
    • zo - 현재 커서가 위치한 곳의 가장 바깥쪽의 fold
    • zO - 현재 커서가 위치한 곳에 중첩된 모든 fold
    • zr - 전체적으로 제일 바깥쪽에 위치한 모든 fold
    • zR - 모든 fold
  • fold 를 접는 것은
    • zc - 현재 커서가 위치한 곳의 가장 안쪽의 fold
    • zC - 현재 커서가 위치한 곳에 중첩된 모든 fold
    • zm - 전체적으로 제일 안쪽에 위치한 모든 fold
    • zM - 모든 fold
  • za 는 fold 의 상태를 토글
  • zd 는 fold 를 제거
    • zE 는 모든 fold 를 제거
  • :set foldmethod=방법 으로 fold 를 생성하는 방법을 결정한다
    • manual - 수동
      • 사용자가 수동으로 fold 를 지정, 해제한다.
      • 화일 편집을 종료하면 fold 정보를 잃어버린다. 그게 싫으면 종료전에 :mkview 로 정보를 저장하고 새로 열 때 :loadview 로 불러올 것
    • indent - 들여쓰기
      • 들여쓰기 상태에 따라 자동으로 fold 가 설정된다.
    • marker - 표식
      • 사용자가 수동으로 fold 를 지정, 해제한다.
      • fold 가 생성될 때 범위의 양끝에 특정한 표식 ( { { { 와 } } } ) 을 추가한다. (C 프로그램의 경우는 자동으로 주석처리까지 해줌) 

  • (참고) 파일이 열릴때 vim 설정 유지하기
    • 주석문에 vim: 설정.... 형태로 기술한다
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */

//탭스페이스는 4로 맞춰지고
// {{{ 여기는 폴딩되는구역
   //여기는 열릴때 폴딩되어보입니다.
// } }}
?>


3 backup 화일을 한 곳에 몰아서 보관하기 

set backupdir=~/.vim/backup
이미 존재하는 화일을 수정하여 저장할 때 생성되는 백업화일 (화일명 뒤에 ~가 붙는다) 이 지저분하므로, 이런 백업화일들을 지정한 디렉토리에 생성하도록 한다.

또한 backup 화일을 생성하고 싶지 않을 경우 ~/.vimrc 파일에 다음과 같이 한 줄 추가 수정하여 사용할 수 있다.
:set nobackup


4 Copy&Paste 할 때 들여쓰기 금지 

출처: KLDPBBS:29886

마우스로 붙여넣기를 할 때 autoindent 나 textwidth 등이 작동해 버려서 원하지 않는 들여쓰기가 되는 것을 막으려면:
:set paste
한 후에 붙여넣기를 하고
:set nopaste
를 하여 계속 작업하면 된다. 한 술 더 떠서,
:set pastetoggle=<Ins>
로 설정하면, Ins 를 누를 때마다 paste 와 nopaste 상태가 전환된다. (명령 모드, 입력 모드 둘 다에서 사용 가능하다) 와우~

5 VIM Setting for Python 

6 현재 작업중인 파일을 HTML 로 보관하기 

간단하게, :TOhtml 이렇게 입력해 주면 된다. 이 기능은 에디터에 기본적으로 포함되어 있는 2html 스크립트로 동작하며, syntax/2html.vim 에서 스크립트 소스를 볼 수 있다.

2html.png

7 vim에서 make시에 에러가 나는 sub directory로 자동으로 이동하기 

8 파일 브라우저 (네비게이션, 탐색기) 열기 

기본적으로 Explore command가 있다. (E까지만 적어줘도 되고 Explore라고 전부 적어줘도 된다.)
:E[xplore]
Variation으로서 다음과 같이 쓸 수도 있다. width가 25이고 수직선으로 구분된 explore 창이 뜬다.
:25Ve[xplore]
다음과 같이 써도 비슷한 기능을 한다. 디렉토리 경로를 적어줄 경우에만 파일 네비게이션으로서 동작한다. (그렇지 않으면 단순한 text editor 창이 하나 더 생긴다.)
:25vs[plit] [원하는 경로]
Explore 창에서 j,k 또는 상,하 화살표를 이용해 파일이나 디렉토리를 선택할 수 있다. 선택된 것들은 별도의 명령어를 통해 삭제하거나 실행하는 등의 작업을 수행할 수 있다.
  • o 를 누르면 새 창에서 실행
  • Enter를 누르면 현재 창에서 실행.
  • 파일이 너무 많은 경우 /[ 검색어 ]를 이용해 검색, 해당 파일로 빠르게 이동할 수도 있다.
Explore 창 <--> 편집 창 이동 (일반적인 창 전환) 단축키는 Ctrl + w + w 이다.

9 cmdline을 활용한 컴파일 단축키 설정 (in Linux, bash shell) 

터미널에서 .vimrc파일(설정파일)을 열자.
$ vi ~/.vimrc
다음 구문을 추가하고 저장하면, 'g++ 컴파일러로 현재 열려있는 파일을 컴파일한뒤 실행하는 명령'이 단축키 F5로 설정된다.
map <F5> :w<CR>:!g++ -Wall "%:p" -o "%:p:r:r:r"<CR>:!"%:p:r:r:r"<CR>
  • map <F5> : F5키를 누르면 뒤에 따라오는 command(cmd)를 자동으로 실행해줌
  • :w<CR> : 현재 파일을 저장
  • :!g++ -Wall "%:p" -o "%:p:r"<CR>
    • ! : cmdline에서 !을 사용하면 뒤따라오는 쉘 명령어, 프로그램들을 (쉘에서) 실행해준다.
    • g++ -Wall [ 소스파일이름 ] -o [ 결과물이름 ] : g++ 사용법을 참조하기 바란다. (터미널에서 $ man g++을 입력하면 볼 수 있다.) 가령 -Wall은 컴파일 과정에서 생기는 waring을 모두 보여주는 옵션이다. 간~혹 g++이 설치되어있지 않다면 이 명령어는 아무 짝에도 쓸모가 없으니 주의.
    • <CR> : cmdline에서 여러 줄의 cmd를 한 줄에 입력하려 하는 경우, 각각을 <CR>로 구분해 준다. <CR>은 Enter키를 나타낸다고 이해하면 편하다.
    • "%:p" : %는 current file name. % 뒤에 :p를 붙이면 file name이 full path를 포함하여 표시된다. 양쪽에 붙은 ""는 file name이나 path에 space(띄어쓰기)가 포함되어있는 것도 인식할 수 있게 해준다.
    • "%:p:r:r:r" : :p, :r, :t 등의 옵션은 연달아 붙여 쓸 수 있다. % 뒤에 :r이 붙으면 현재 파일명에서 가장 마지막 확장자를 제외한 앞부분만 인식하게 해준다. 가령 "%:p" = /home/me/abc.tar.gz인 경우, "%:p:r" = /home/me/abc.tar 이고, "%:p:r:r" = /home/me/abc이며, "%:p:r:r:r" = /home/me/abc이다. (:r을 많이 붙이면 확장자를 제외한 파일명을 얻을 수 있다.). 이를 통해 컴파일 결과물 파일 이름을, 원본 파일과 이름은 같되 확장자가 사라진 형태로 만들 수 있다. 가령 소스파일 이름이 /home/me/abc.cpp 이었으면 컴파일 결과 생성된 파일명은 /home/me/abc가 된다.
  • !"%:p:r:r:r"<CR> : 컴파일을 수행하고 (제대로 오류 없이 시행되었는지 알 수는 없지만 일단) 결과물 파일(프로그램)을 실행해보도록 한 것이다.
자세한 사항은 http://vimdoc.sourceforge.net/htmldoc/cmdline.html#cmdline-editing을 참고한다.

10 VIM 7.x 에서 파일브라우져에서 파일 열리지 않는 문제 

(에러메세지 : ***netrw*** local browsing directory and current directory are identical)
http://kldp.org/node/79586


출처>
http://wiki.kldp.org/wiki.php/ViEditorTips