vim과 쉘을 연동하여 사용하기

vim은 그 자체로도 상당히 강력하지만, 쉘과 함께 사용함으로써 서로의 강력함을 곱할 수 있다. vim과 쉘을 연동해서 쓰는 방법들을 몇가지 소개한다.

여기서 소개하는 방법들은 gvim이 아닌 터미널에서 실행하는 vim을 위한 것이다.

쉘로 나갔다가 돌아오기

vim 사용중에 Ctrl+z로 쉘로 나가서 명령을 실행한 뒤, 쉘에서 fg를 입력해 vim으로 돌아온다. 이건 vim과는 아무 상관도 없는 기능이지만, 사실 vim에서 쉘 명령을 써야 할 때 가장 많이 쓰는 방법이다. (쉬우니까)

screen 혹은 tmux

vim은 자신 안에서 쉘을 띄우는 기능이 없다. 플러그인이 있긴 한데 그다지 쓸만하지 않다. 필요하다면 그냥 screen이나 tmux를 써서 창을 쪼개 한쪽 창에 vim을 띄우는 것이 훨씬 낫다.

옛날엔 screen에서 세로 쪼개기를 지원하지 않아 영 쓰기기 좋지 않았지만, 버전 4.01이후부터는 잘 지원한다.

screen에서는 C-a S로 창을 쪼개고, C-a <Tab>으로 창을 오가며, C-a c로 쪼개진 창에 쉘을 띄운다.

tmux에서는 C-b "로 창을 쪼개고, C-b o로 창을 오간다. 창이 쪼개지는 순간 바로 해당 창에 쉘이 실행되므로 별도로 쉘을 실행해 줄 필요는 없다.

쉘 명령 실행

쉘 명령은 :!로 실행할 수 있다. 예를 들어, ls를 실행해본다면,

:!ls

:r!로 표준출력을 바로 붙여넣을 수 있다. ls를 실행한 결과를 vim에 바로 붙여넣고 싶다면,

:r!ls

선택한 영역을 쉘명령의 표준입력으로 넣어 표준출력으로 출력된 결과가 그 영역을 대체하게 할 수도 있다. 선택한 영역에서 특정 단어가 포함된 줄만 남기려면,

:'<,'>!grep word

클립보드

엄밀히 말해 클립보드는 쉘과 아무련 관련이 없지만, 많은 사용자들이 GUI 환경에서 가상터미널을 띄워 쉘을 사용하고 있을 것이고, 그렇다면 클립보드를 통해 vim에 복사-붙여넣기를 해야하는 상황도 꽤 자주 발생할 것이다.

클립보드에 복사하려면 복사할 영역을 선택하고,

"+y

클립보드에 들어있는 문자열을 vim에 붙여넣기하려면,

"+gP

클립보드와 연동하여 복사/붙여넣기를 하려면, vim이 xterm_clipboard가 가능한 상태로 빌드되어 있어야 한다. vim --version을 했을 떄, +xterm_clipboard가 보인다면 가능한 상태인 것이다.

vim-slime

shell 연동의 종결자라 할 수 있는 굉장한 플러그인이다. 뭐가 가능한고 하니, screen이나 tmux로 창을 쪼개서 한쪽 창에는 vim을 띄우고 다른 창에는 repl을 띄운 다음에, vim에서 작성한 코드를 바로 다른 창의 repl에 보내서 실행시킬 수 있다.

단점은 잘 동작하지 않는다는 것이다.

vim-slime은 screen과 tmux를 지원하는데, 여기서는 screen과 함께 사용하는 법을 소개하겠다.

우선 .vimrc 설정에 몇가지 추가해야 하는 것이 있다.

$ echo 'let g:slime_target = "screen" >> ~/.vimrc

screen은 표준입력을 받아들이지 못하므로, 대신 파일을 이용해 통신해야 한다. 이 때 사용할 파일도 설정해준다.

$ echo 'let g:slime_paste_screen = "~/$HOME/.slime_paste"' >> ~/.vimrc

screen을 실행한 뒤 창을 하나 쪼개고 세션의 이름을 적당히 붙여준다. 여기서는 ‘shell’이라고 이름붙였다.

$ screen -S shell

그리고 다른 창에 가서 vim을 열고 간단히 코드를 작성한 뒤,

Ctrl+c Ctrl+c

이렇게 하면 현재 줄이 옆 창의 쉘에 입력된다. 다만 처음에는 세션 이름과 윈도 이름을 물어본다. 세션 이름은 위에서 정했고, 윈도 이름은 아마 0일 것이다.

한번 입력하고 나면 다시 묻지 않는다. 잘못 입력했다면 다음의 명령으로 다시 입력할 수 있다.

Ctrl+c Ctrl+v
Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중