'vim 단축키'에 해당되는 글 2건

  1. 2013.02.05 자동화
  2. 2013.01.16 Vim Key mapping

자동화

Vim/Tutorial 2013. 2. 5. 21:00 |

vim 의 자동화 기능은 매우 간단하고 직관적이지만 강력하다. 자동화를 잘 사용하면 지루한 작업에서 해방될 수 있다.


키 매핑(단축키)

키 매핑은 특정 키가 눌릴 때, 미리 설정한 기능을 호출하도록 한다. 약어 매크로와 크게 다를 것은 없지만, 약어 매크로가 입력 모드, 명령행 모드에서만 사용가능한 반면, 

키 매핑은 모든 모드에 대해 사용할 수 있다는 점이 다르다.


vim에는 일반 모드, 입력 모드, 명령행 모드, 비주얼 모드에 따라서 키 매핑을 설정하는 명령어가 다르다. 하지만 nmap 명령의 n은 일반(normal) 모드를, imap 명령의 i는 입력(insert) 모드를, vmap 명령의 v는 비주얼(visual) 모드를 의미하므로 따로 외울 필요없이 이해할 수 있다.


일반, 입력, 비주얼, 명령행 모드의 단축키 지정 방법

nmap key command                일반 모드에서 key를 누르면 command를 실행

imap key command                 입력 모드에서 key를 누르면 command를 실행

vmap key command                비주얼 모드에서 key를 누르면 command를 실행

cmap key command                명령행 모드에서 key를 누르면 command를 실행

이 외에도 omap, xmap, smap, map!, lmap 등 다양한 단축키 매핑 명령이 있다. vim의 도움말 참조.


단축키를 해제하는 명령

map 대신 unmap을 사용하면 된다. 

모드에 따라 각각 nunmap, iunmap, vunmap, cunmap 등으로 하면 된다.




자동 명령

자동 명령은 특정 파일을 열거나 저장하는 이벤트가 발생할 때 사용자가 지정한 vim 명령을 자동으로 수행시키는 기능이다.

이 기능을 이용하면, 파일 형식에 따라 자동으로 특정 옵션을 켜거나 특정 명령을 내리는 것이 가능해진다. 

autocmd는 자동 명령을 의미하며 au로 많이 쓰인다. 

BufRead 는 파일을 읽는 이벤트, BufNewFile은 파일을 새로 만드는 이벤트를 의미한다.

ex) autocmd BufRead,BufNewFile *.txt colo shine|set ts=2 sw=2

예를 들어 이 같이 설정이 되어있다면, 이것은 확장자가 txt인 파일을 새로만들거나 열 때, 컬러스키마를 shine으로 하고 들여쓰기 관련 옵션을 2칸으로 설정하라는 뜻이된다. 그리고 이렇게 여러 명령을 실행하는 경우는 수직 바(|)를 사용하여 구분한다.


파일 관련 이벤트에 따른 자동 명령

자동 명령에 사용되는 파일 관련 주요 이벤트

BufNewFile                    파일을 새로 생성했을 때의 이벤트

BufRead                          파일을 읽은 후의 이벤트

BufWrite                         파일을 저장한 후의 이벤트

SwapExists                     스왑 파일이 이미 존재하는 경우의 이벤트


파일을 열 때 스왑 파일이 존재하면 중복해서 여는 것으로 보고 에러가 발생한다. 그런데, 이벤트를 활용하면 자동으로 읽기 전용으로 열 수 있다.

au SwapExists let v:swapchoice='o'

:swapchoice 라는 변수에 영문 소문자 o를 넣으라는 vim 내장 스크립트 구문이다. 여기서 let은 변수를 지정하는 명령어이다. 따라서 스왑 파일이 존재하면(SwapExists) 자동으로 v:swapchoice 변수를 영문자 o로 설정한다.

v:swapchoice 변수는 차후 vim이 스왑 파일이 존재하는 경우 어떻게 작동할 지 경정하는데, o는 읽기 전용(read-only)으로 파일을 연다는 의미이다.

다른 예를 들자면, 파일을 중복해서 열었을 때 나중에 연 vim은 자동으로 종료하게끔 하려면 이렇게 하면 되겠다.

let v:swapchoice='q'

그리고 확장자가 c나 h인 파일을 이 같이 지정하려면 이렇게 하면 되겠다.

au SwapExists *.[ch] let v:swapchoice='q'


파일 타입에 따른 자동 명령

만약 C++파일을 열 때 색상 테마를 slate타입으로 바꾸는 자동 명령을 작성해 보면 이렇게 될 것이다.

au BufRead,BufNewFile *.cpp colo slate

그런데, 작동은 하겠지만 완벽하지는 않다. 왜냐하면 C++ 파일의 확장자는 cpp 외에도 cc, cxx, 대문자 C 등으로 다양하기 때문에, 이 확장자들을 모두 등록해야 한다. 

여러 파일을 적을 때는 쉼표로 구분하여 다음과 같이 설정해야 한다.

au BufFead,BufNewFile *.cpp,*.cc,*.cxx,*.C colo slate


헌데 이 방법은 조금 지저분하고 비효율적으로 보인다. 그래서 파일 형식을 구분할 수 있는 새로운 이벤트가 있다.

au FileType cpp colo slate

FileType 은 filetype 옵션을 확인하여 자동 명령을 실행하는 이벤트이다. C++ 파일의 filetype은 cpp 이다.

vim에서 지원 가능한 파일 타입을 보려면 $VIMRUNTIME/ftplugin 에서 찾아 볼 수 있다.


자동 명령 그룹화와 해제

자주 사용하지는 않지만 autocmd를 해제하는 au! 명령과 자동 명령을 그룹으로 묶는 augroup 명령이 있다. 

이 명령어는 상관 관계가 있는 명령어들을 묶어서 필요에 따라 실행하거나 제거하는 용도로 많이 사용한다. 

augroup UserDefinedColorScheme

au!

au FileType sh,perl,python,ruby    colo shine

au FileType c,cpp    colo slate

au BufRead,BufNewFile *.txt    setfiletype text

au FileType text    colo evening

augroup End

이것은 UserDefinedColorScheme 란 그룹을 만들고 몇몇 기능을 설정한 예제이다. 이렇게 하면 해당 자동 명령 그룹의 기능이 중복 설정되는 것을 방지 할 수 있다.

autocmd는 사용자에게 다양하게 확장된 기능을 제공할 수 있다. 더 많은 이벤트 목록은 autocmd-events 도움말 항목에서 확인.


'Vim > Tutorial' 카테고리의 다른 글

프로그래밍할 때 유용한 기능  (0) 2013.02.06
반복적인 작업 녹화하기  (0) 2013.02.06
오퍼레이션 펭딩 모드 / 약어 매크로 / 레지스터 활용  (0) 2013.02.05
공백 지우기  (0) 2013.02.05
파일 열기(고급)  (0) 2013.02.05
Posted by scii
:

Vim Key mapping

Vim/Tutorial 2013. 1. 16. 17:10 |

I want to map <Ctrl + S> as Save command in Vim.

Becuase <Ctrl+s> stops the output in the terminal, it's important to change the shortcut first using stty command. 



># stty stop ^K        // vim에서 Ctrl+s를 쓰기위하여 리눅스의 stty중 stop부분을 Ctrl+K로 바꿨다.


In the terminal, <Ctrl+S> command is stop printing inputs 


># vim .vimrc

map <C-S> :w<CR>                 'command mode

map! <C-S> <Esc>:w<CR>       'insert mode        // map에 !를 붙여서 insert모드에서도 가능하게끔 하였다.




위에 처럼 셋팅하면 vim 에디터에서 ctrl+s로 저장을 할 수 있다. 

하지만 그 순간뿐이다. 재부팅하거나 터미널을 다시 시작하면 위에 했던 일련의 셋팅들이 모두 초기화된다. 

그래서 자신의 shell 환경설정 파일을 수정해야 한다. 

내 shell은 bash shell 이므로 $HOME ./bashrc 를 수정하였다. 




References

1. How to map keys in vim, http://how-to.wikia.com/wiki/How_to_map_keys_in_vim

2. Mapping keys in Vim - Tutorial, http://vim.wikia.com/wiki/Mapping_keys_in_Vim_-_Tutorial_%28Part_1%29

3. Mapping Keys, http://newbiedoc.sourceforge.net/tutorials/vim/mapping-vim.html.en


'Vim > Tutorial' 카테고리의 다른 글

vim 에러 처리  (0) 2013.02.02
명령어 표기법에 대해서  (0) 2013.02.02
유용한 명령어들 몇가지  (0) 2013.01.15
vim Tutorial (PDF파일)  (0) 2012.05.09
vi editor  (0) 2012.05.02
Posted by scii
: