· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Vi Editor Tips

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
    [PNG image (15.52 KB)]
  • zf 를 하면 해당 구역에 fold 가 만들어진다.
    vi_folding_2.png
    [PNG image (15.23 KB)]
  • :set fdc=숫자 을 하면 왼쪽에 fold 의 범위를 나타내는 컬럼이 '숫자'개 너비만큼 생긴다.
    vi_folding_3.png
    [PNG image (15.62 KB)]
  • fold 를 중첩해서 만들 수도 있다. 하지만 일부만 겹치게 만들 수는 없다.
    vi_folding_4.png
    [PNG image (15.56 KB)]
  • 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: 설정.... 형태로 기술한다
{{{#!vim php
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */

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


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

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


== Copy&Paste 할 때 들여쓰기 금지 ==
출처: KLDPBBS:29886

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

== VIM Setting for Python ==
See Also PyKug:VimEditor , (링크x)ZeroPage:VimSettingForPython, (변경)http://wiki.zeropage.org/wiki.php/VimSettingForPython
== 현재 작업중인 파일을 HTML 로 보관하기 ==
간단하게, :!TOhtml 이렇게 입력해 주면 된다. 이 기능은 에디터에 기본적으로 포함되어 있는 2html 스크립트로 동작하며, syntax/2html.vim 에서 스크립트 소스를 볼 수 있다.

attachment:2html.png

== vim에서 make시에 에러가 나는 sub directory로 자동으로 이동하기 ==
http://kldp.org/node/21317

== 파일 브라우저 (네비게이션, 탐색기) 열기 ==
기본적으로 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 이다.
== 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을 참고한다.

== VIM 7.x 에서 파일브라우져에서 파일 열리지 않는 문제 ==
(에러메세지 : ***netrw*** local browsing directory and current directory are identical)[[br]]
http://kldp.org/node/79586

== visual block 설정 안됨 ==
http://vi.kldp.org/jsboard/read.php?table=qna2006&no=2240&page=2
----
CategorySoftware

ID
Password
Join
You attempt things that you do not even plan because of your extreme stupidity.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2011-08-03 14:32:11
Processing time 0.0123 sec