검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/커맨드 라인 트릭
참조 원문 : Tips for Using Vim as an IDE

  Vim은 커스터마이징과 확장성이 매우 뛰어나기 때문에 그냥 에디터가 아닌 IDE(Integrated Development Environment=통합개발환경)로 활용할 수 있습니다.

1. 자동 들여쓰기 및 문법 하일라이팅
  본인 홈 디렉토리의 .vimrc 파일에 아래를 추가합니다.
filetype indent on
syntax on
  첫 번째 줄은 파일타입을 보고 그에 알맞는 들여쓰기를 해주며, 두 번째 줄은 문법 하일라이팅을 해줍니다. 그리고 들여쓰기의 기본 공백 길이는 8칸이지만 아래처럼 값을 바꿀 수 있습니다.
set shiftwidth=2

2. 탭 관련
  탭을 누를 때 탭 문자 대신 공백을 넣으려면 본인 홈 디렉토리의 .vimrc 파일에 아래를 추가합니다. 이 옵션을 사용할 때 탭 문자를 넣고 싶다면 Ctrl+v<tab>을 누르면 됩니다.
set expandtab
  단, 이미 있는 탭 문자는 변하지 않는데 이것들을 현재 탭 세팅에 맞게 바꿔주려면 아래 명령어를 에디터에서 사용합니다.
:retab
  탭을 누를 때마다 입력될 공백 칸의 개수는 아래를 통해 설정할 수 있습니다.
set tabstop=4

3. 실시간 검색(Incremental Searching)
  Vim은 기본적으로 검색을 할 때 /를 누른 후 검색할 단어를 입력하고 엔터를 눌러 검색합니다. 여기에는 2가지 단점이 있는데 첫 째로 검색대상을 짧게 입력하면 원치 않는 결과가 많이 걸려 나온다는 겁니다. 두 번째로 앞의 단점을 이유로 길게 치자니 너무 많은 글자를 쳐야 하고 이 경우 들이는 수고는 물론이고 오타가 발생할 확률이 늘어난다는 겁니다. 이를 해결하기 위해 한 글자를 누를 때마다 매칭되는 곳으로 이동하려면 본인 홈 디렉토리의 .vimrc 파일에 아래의 내용을 추가합니다.
set incsearch
  그러면 검색을 위해 키를 누를 때마다 그때까지 입력한 것과 일치하는 곳으로 즉시 커서가 이동합니다. 덤으로 위 세팅과 상관 없이 *를 누르면 현재 커서에 있는 단어를 대상으로 검색을 합니다.

4. Ctags
  Ctags는 소스 트리에서 함수, 변수, 클래스 멤버, 클래스 메소드 등의 이름을 인덱스 파일로 생성해주는 기능으로서 작성하고 있는 언어를 기준으로 작동하여 높은 정확성을 갖습니다.

  별도의 설치가 필요하며 리눅스의 경우 데비안 계열은 'exuberant-ctags'란 이름으로, 레드햇 계열의 경우 'ctags'라는 이름으로 다운받아 설치할 수 있습니다.

  설치가 끝나면 코드 프로젝트의 최상단 디렉토리에서 ctags -R 명령어로 태그파일을 생성합니다. 그 후 소스 파일 중 하나를 Vim으로 열어서 커서를 메소드 이름이나 오브젝트 타입에 둔 후 Ctrl+]을 눌르면 그 본체가 있는 곳으로 갈 수 있으며 Ctrl+t를 통해 이전으로 돌아갈 수 있습니다.

  Vim의 플러그인인 를 설치하면 이 기능을 더 유용하게 사용할 수 있습니다. 다운받아 압축을 해제한 후 taglist.vim 파일을 ~/.vim/plugins 디렉토리에, taglist.txt 파일은 ~/.vim/doc 디렉토리에 옮깁니다. taglist에 대한(그리고 ~/.vim/doc에 있는 다른 플러그인의 문서) 도움말 파일을 생성하기 위해 ~/.vim/doc 디렉토리에서 Vim을 실행하고 :helptags . 를 실행합니다.

  태그리스트를 사용하려면 Ctags를 실행 후 그 프로젝트의 소스 파일들 중 하나를 열어 :TlistToggle 를 실행하여 태그 윈도우를 오픈합니다. 태그를 더블 클릭하거나 엔터를 치면 소스 코드 윈도우에 있는 그 태그로 이동합니다. 새로운 파일을 열면 그 파일의 태그가 리스트 윈도우에 추가됩니다. 또한 태그를 클릭한 후 t를 눌러 새로운 Vim 탭에 그 태그를 열 수 있습니다. 파일을 수정한 후 저장했다면 :TlistUpdate를 통해 태그리스트를 업데이트하여 새로운 태그를 추가할 수 있습니다.

5. 자동완성
  본인 홈 디렉토리의 .vimrc 파일에 아래를 추가합니다.
filetype plugin on
set ofu=syntaxcomplete#Complete
  이제 단어나 메소드명을 입력 중 Ctrl+n을 눌러 추천 완성 목록을 볼 수 있습니다. Ctrl+n을 계속 눌러 목록의 다음 항목을 선택할 수 있으며 Ctrl+p로 이전 항목을 선택할 수 있습니다. 완벽한 메소드명 완성을 이용하려면 먼저 ctags를 실행해야 하며 그렇지 않으면 현재 파일 내에 있는 것만 인식할 수 있습니다.

  그 외에도 Ctrl+x->Ctrl+f로 파일명 완성, Ctrl+x->Ctrl+l로 전체 줄 완성 기능을 사용할 수도 있습니다.(더 자세한 내용은 :help ins-completion을 참조.) Vim 스크립트인 을 사용하면 탭으로 자동 완성 기능을 사용할 수도 있습니다.



2013/06/20 13:36 2013/06/20 13:36
Posted
Filed under 프로그램과 명령어/커맨드 라인 트릭
참조 원문 : Absolutely Essential Vim/vi Commands

  vi는 고전 유닉스 텍스트 에디터 프로그램이고 Vim(Vi IMproved)은 그것을 개량한 버전입니다. 사실상 현재 (아마도)모든 리눅스에서는 vi가 Vim으로 연결되는 심볼릭 링크이기 때문에 Vim을 사용하고 있다고 할 수 있습니다. 하지만 자세하게 파고들지 않으면 둘을 사용하는 데는 별 차이가 없기 때문에 대략 'Vim = vi'로 생각하셔도 당장은 무방합니다.

vi의 3가지 모드
  vi를 처음 접하는 사람들은 상당히 당황할 수 밖에 없는 그 이유는 텍스트 에디터인데도 그냥 글자를 입력하는 방법부터 다른 에디터와 다르기 때문입니다. vi에는 Insert 모드, Command 모드, Last-line(=Ex) 모드로 총 3가지의 모드가 있습니다.

  Insert 모드는 일반적으로 볼 수 있는 텍스트 에디터의 그 상태와 같습니다. 즉, 키를 누르면 그 키가 입력됩니다. 따라서 모드 자체는 따로 설명할 것이 없습니다. 단, 다른 모드에서 이 모드로 넘어오는 방법을 알아야 입력을 할 수 있겠죠? Command 모드에서 ia를 누르면 이 모드로 전환할 수 있는데 자세한 건 잠시 후 아래에서 알아보겠습니다. 여기서 알아야 할 것은 이 모드에서 아래의 Command 모드로 가려면 Esc를 눌러야 한다는 겁니다.

  Command 모드는 각종 제어를 위한 모드로 일반적인 에디터의 커서 이동, 복사, 붙여넣기 등 입력 등 대부분의 작업을 이 모드에서 할 수 있습니다. 아래에 나오는 내용도 대부분 이 모드에서 실시합니다. vi를 실행하면 이 모드에서 시작합니다.

  Last-line 모드도 Command 모드와 비슷한데 주로 치환과 같이 여러 번 키를 눌러야 하는 작업, 저장, 줄 번호 표시 같이 문서 편집에 있어서 간접적인 작업을 하기 위해 사용합니다. Command 모드에서 :(shift + ;)를 누르면 Last-line 모드로 진입하면서 화면의 마지막 줄에 : 문자와 함께 명령어를 입력할 수 있게 됩니다. Insert 모드와 마찬가지로 Command 모드로 가려면 Esc를 눌러야 한다는 것이 중요합니다.


(1) 커서 이동
  • h - 왼쪽으로 한 칸 이동.
  • l - 오른쪽으로 한 칸 이동.
  • j - 아래로 한 줄 이동.
  • k - 위로 한 줄 이동.
  • w - 한 단어(word) 오른쪽으로 이동.
    ※ 여기서 '단어'의 종류는 숫자와 문자가 조합된 문자열, 그 외 문자의 조합으로 이뤄진 문자열로 2가지가 있다. 따라서 'o1n1e-t2w2o'라는 문장의 맨 왼쪽에서 w를 누르면 '-'에서 커서가 멈추고 다시 w를 누르면 't'에서 커서가 멈춘다. 'o1n1e---t2w2o'의 경우 커서가 첫 번째 '-' 문자에 있을 때 한 번 더 w를 누르면 커서가 다음 '-' 문자로 가는 것이 아니라 't' 문자로 간다.
  • b - 한 단어 왼쪽으로 이동.

(2) 삭제
  • x - 커서 위에 있는 문자 삭제.
  • dw - 커서부터 현재 단어 끝까지 삭제.
  • db - 커서의 왼쪽 문자부터 그 문자를 포함하고 있는 단어의 처음까지 삭제.
    ※ 예를 들어 'abc-def'라는 문자열에서 커서가 'd' 문자에 있다고 할 때 db를 누르면 '-' 문자가 삭제된다. 커서가 '-' 문자에 있다면 'abc' 문자열이 삭제된다.
  • dd - 커서가 있는 줄 삭제.
  • d$ - 커서가 있는 곳부터 그 줄 끝까지 삭제.
  • d0 또는 d^ - 커서의 왼쪽 문자부터 그 줄의 처음까지 삭제.

(3) 복사와 붙여넣기
  • v - 누른 지점부터 커서가 이동하는 곳까지 대상 범위로 지정. 일반적인 윈도우용 에디터에서 Shift를 누르고 커서를 움직이는 것과 동일한 효과.
  • V - 누른 지점부터 커서가 있는 곳까지의 모든 줄 전체를 대상 범위로 지정.
  • Crtl+v - 누른 지점부터 커서가 있는 곳까지 직사각형(칼럼)으로 대상 범위 지정.
  • y - 위에서 지정한 범위를 복사.
  • p - 복사한 내용을 커서 오른쪽에 붙여넣기.
  • P - 복사한 내용을 커서 왼쪽에 붙여넣기.

(4) 검색과 치환(치환은 Last-line 모드)
  • / - 누른 후 검색할 문자열을 입력하고 엔터를 누르면 커서 위치를 기준으로 정방향으로 해당 문자열을  검색. 이후 '/' 문자만 입력하고 엔터를 누르면 다음 검색 위치로 이동.
  • ? - 위의 /와 거의 동일하며 커서 위치를 기준으로 역방향 검색.
  • :%s/old/new/ - 문서 전체에서 'old' 문자열을 'new' 문자열로 치환. 단, 같은 줄에 2개 이상의 'old' 문자열이 있을 경우 첫 번째 문자열만 치환.
    ※ '%' 문자는 global로서 문서 전체를 의미.
  • :%s/old/new/gc - 위와 거의 동일하며 맨 뒤에 'g' 옵션(global)으로 인해 한 줄에 여러 'old' 문자열이 있어도 모두 치환 대상으로 취급한다는 것과 'c' 옵션(confirm)으로 인해 치환 전마다 치환 여부를 물어본다는 것이 다르다.
    ※ %와 g 옵션 모두 global이라는 뜻이지만 효과는 다르다.
  • :1,15s/old/new/gc - 문서 전체 대신 1번째 줄에서 15번째 줄까지만 치환 대상으로 함.

(5) 실행 취소와 재실행
  • u - 실행 취소. 윈도우의 Crtl+z와 동일.
    ※ Vim이 아닌 vi(그리고 vi 호환 모드로 실행되고 있는 Vim)는 바로 이전 명령만 실행 취소가 가능.
  • Crtl+r - 재실행. 윈도우의 Ctrl+y와 동일.

(6) 저장과 종료(모두 Last-line 모드)
  • :w - 저장.
  • :q - 종료.
  • :wq - 저장 후 종료.
  • :q! - 저장하지 않고 종료.
  • :w newfile - 'newfile'이라는 새 이름으로 저장. 원본 파일은 그대로 존재.
2010/12/04 18:10 2010/12/04 18:10