프로그래밍할 때 유용한 기능
Vim/Tutorial 2013. 2. 6. 14:20 |How To: Compile every language from Vim
탭 대신 공백 사용하기
탭을 눌렀을 때 탭 대신 몇개의 공백 문자를 넣는 :set expandtab 옵션을 제공한다. (줄여서 et)
예를 들어, 설정 파일에 set et ts=4 로 설정되어 있다면 사용자가 탭을 누르는 순간 네 칸의 공백 문자가 입력된다.
Tip: 진짜 탭 문자를 입력하고 싶다면..
expandtab 옵션이 설정된 상태에서 진짜 탭 문자를 입력하려면, 특수 문자를 입력할 때 썼던 <CTRL-V> <CTRL-I> 로 입력하면 된다.
기존 탭 문자 <----> 공백 변환
et 옵션은 새로 입력하는 탭만 공백으로 바꿀 뿐 기존의 탭 문자들은 건드리지 않는다. 따라서 기존의 탭 문자들도 모두 공백으로 변환하거나 반대로 공백을 탭으로 변환하려면 :retab 명령을 사용해야 한다. (줄여서 ret)
retab 명령은 expandtab 옵션이 on 상태이면 탭을 공백으로 변환하고, off 상태면 공백을 탭으로 변환한다.
:[range]ret [new_ts]
여기서 new_ts 는 연속된 공백 문자의 길이이다. 만약 :ret 4 라고 명령했다면 변환 대상은 공백 문자 네칸이 된다. new_ts 옵션을 생략하면 tabstop 설정을 따른다.
예를 들어, expandtab 옵션을 on 상태로 만들고 retab을 실행하면 기존에 입력된 탭을 공백 네 칸으로 변환한다.
:set et
:ret 4
또한 expandtab 옵션을 off 상태로 만들고 retab 을 실행하면, 공백 여덞 칸을 탭 하나로 변환한다.
:set noet
:ret 8
단, ret 명령을 사용하여 공백을 탭으로 변환할 때, 공백 문자로만 구성된 부분은 사용자가 의도적으로 입력했다고 판단하여 변환하지 않는다.
그러나 이를 무시하고 모든 공백을 탭으로 변환하고 싶다면 강제 명령어인 느낌표(!) 를 붙여 다음처럼 명령해야 한다
:[range]ret! [new_ts]
C로 작성된 소스코드를 열면, 자동으로 탭을 공백으로 변환하는 방법
set et
au FileType c retab
단어 완성
프로그래밍을 하다보면 변수나 함수 혹은 메소드 이름에서 오타가 발생하기도 한다. 이를 위해, 단어 완성(keyword completion) 기능이 도입되었다.
단어 자동 완성
단어 자동 완성은 본문에 이미 등장한 단어나 예약된 단어의 앞 글자 몇 개만 입력한 후 <CTRL-N> 을 누르면 나머지를 완성시켜 주는 기능이다.
더하기 낱말 모드
aa까지만 입력한 뒤 <CTRL-N> 을 누르면, aaaaa까지만 완성되고 @nadf.vom 은 완성되지 않는다. 이는 @ 이 단어에 포함되지 않는 문자 부호라서 발생하는 문제이다.
이런 경우를 대비하여 더하기 낱말 모드가 존재한다. 일단 aaaaa까지 완성된 상태에서 <CTRL-X><CTRL-N> 을 누르면 aaaaa@sdf.vim 이 완성된다.
단어 완성 기능의 확장 모드(입력 모드에서 사용)
<CTRL-X> <CTRL-N> 더하기 낱말 모드로 작동하여 추가 검색을 함.
<CTRL-X> <CTRL-K> <CTRL-N> 사전 검색 모드로 작동한다.
HTML 변환하기
소스코드를 웹에 게재했을 때 들여쓰기나 줄바꿈 모양이 망가지는 경우가 있다. 웹에 프로그래밍 소스코드를 게시하려면 많은 부분을 수정해야 하는데, 간단한 코드라면 직접 수정해도 되겠지만 코드가 길어지면 이 작업도 만만치 않다. 그래서 vim에서는 현재 화면에 보이는 상태를 HTML로 변환하는 기능이 탑재되어 있다.
:TOhtml 을 명령하면 된다.
생성된 HTML에서 <head>나 <body> 등 html 문서에 필요한 모든 뼈대가 포함되어 있으므로, 코드만 다른 곳에 붙이고 싶다면 <body> 태그부터 </body> 태그 앞까지만 복사하면 된다.
'Vim > Tutorial' 카테고리의 다른 글
C++ code completion (0) | 2016.02.27 |
---|---|
vim Regular Expression (0) | 2013.05.12 |
반복적인 작업 녹화하기 (0) | 2013.02.06 |
자동화 (0) | 2013.02.05 |
오퍼레이션 펭딩 모드 / 약어 매크로 / 레지스터 활용 (0) | 2013.02.05 |