tools/vim

Learn Vimscript The Hard Way - 28. Execute

seul chan 2020. 4. 5. 23:35

Execute

execute 명령어는 string을 vimscript의 명령어로 evaluate 할 때 쓰인다

:execute "echom 'Hello, world!'"
Hello, world!

vim은 echom 'Hello, world!'를 그대로 실행시킨다.

더 유용한 예시를 들어보자. 새로운 파일을 vim에서 열어보고, 해당 윈도우에서 :edit foo.txt를 열어 새로운 버퍼를 열어보자.

$ vi bar.txt

:edit foo.txt

그리고 다음 코멘드를 실행해보자.

:execute "rightbelow vsplit " . bufname("#")

vim은 처음에 열었던 bar.txt를 vertical split 창으로 띄워줄 것이다.

  • vim은 . 명령어를 통해 "rightbelow vsplit "bufname("#")의 결과로 나온 string을 합쳐준다.
  • bufname("#")은 바로 직전의 buffer 이름인 bar.txt를 반환하여 "rightbelow vsplit bar.txt"가 된다.
  • execute 명령어는 이를 실행시킨다.

Is Execute Dangerous?

대부분의 프로그래밍 언어에서도 eval과 같은 string 실행 함수가 존재한다. 대부분은 이를 사용하는 것을 지양하는데, vimscript에서는 적용되지 않는다.

첫째, 대부분의 vimscript는 input을 사용자에게서만 받는다. 만약 사용자가 execute를 이상한 방법으로 사용한다고 하더라도 해당 사용자의 컴퓨터에서만 이상하게 동작할 것이다.

두번째 이유는 vimscript는 다른 이상하고 교활한 문법이 많기 때문에 (ㅋㅋㅋ) 상대적으로 쉬운 execute는 직관적인 방법이기 때문이다.

Exercises

  • Skim :help execute to get an idea of some of the things you can and can't use execute for. Don't dive too deeply yet -- we're going to revisit it very soon.

  • Read :help leftabove, :help rightbelow, :help :split, and :help :vsplit (notice the extra colon in the last two topics).

    • leftabove: 명령어를 실행해서 window를 split 해야하면 vertical split일 경우 왼쪽, 수직 분할일 때에는 위쪽에 표시
    • rightbelow는 반대
    • split: 수평 분할 (:[N]sp[lit] [++opt] [+cmd] [file])
    • vsplit: 수직 분할(:[N]vs[plit] [++opt] [+cmd] [file])
  • Add a mapping to your ~/.vimrc file that opens the previous buffer in a split of your choosing (vertical/horizontal, above/below/left/right).

nnoremap <Leader>vs :execute "rightbelow vsplit " . bufname("#")<CR>