Vim ide

From kangssu
Jump to: navigation, search
Using VIM as IDE
Basic Literacy

Since we are not dealing with vim introduction, we do not explain vim plugin or vim keymap to some extent. I've already been using vim for simple editor purposes, but it's for people who need a REPL (Read-Eval-Print Loop).

VIM can be used like IDE.

  You can configure it as IDE with VIM. However, you should consider that VIM is a general-purpose editor. It is not specialized like pycharm, visual studio.

Must have plugin

vim is a very hard-to-use editor without a plugin. Many of the people who learn vim are exhausted before they even use plugins. There are many ways to install plugins, too many plugin managers, and many fork versions. The most common plugin manager is vundle or plug, but I use plug. You can use anything. If you want to use vundle, please refer to vim plugin vundle.

Plugin 'VundleVim/Vundle.vim'
Plugin 'vim-airline/vim-airline'
Plugin 'scrooloose/nerdtree'

Vim ide.png


여기서 필요한 최소의 플러그인정도로 생각하면 된다. 이까지 설치하면 vim 도 나름 모양을 갖춘 이쁜 에디터가 된다.

    1. 컴파일형 언어 스크립트형 언어

여기서는 말하는 컴파일은 스크립트형 언어는 바로 실행, 컴파일형 언어는 말 그대로 컴파일이 되게끔 구성을 하겠다.

function! Kompile()

 let b:buildstr = ""
 let l:ext = expand("%:e")
 echo "call kompile"
 if l:ext == "cpp" 
   let b:buildstr = "g++ -std=c++11 -O2 ".expand("%:p")." -o ".expand("%<")
 elseif  l:ext == "py"
   let b:buildstr = "python ".expand("%:p")
 elseif l:ext == "r"
   let b:buildstr = "Rscript ".expand("%:p")
 elseif l:ext == "pl"
   let b:buildstr = "perl ".expand("%:p")
 endif
 if filereadable("input.txt")
   let b:buildstr .= " < input.txt"
 endif
 let b:buildstr = substitute(b:buildstr, " ", "\\\\ ", "g")
 echo b:buildstr
 silent execute "setlocal makeprg=".b:buildstr
 make
 vertical botright copen

endfunction

어려운 스크립트가 아니라서 찬찬히 읽어보면 알겠지만 몇가지만 설명하면 먼저 expand 라는게 있는데 이건 현재 파일명에 대한 각종 포매팅을 할 수 있는 함수다. 현재 /home/ksoo/main.cpp 을 편집하고 있을 때 expand 를 살펴보면..

expand("%") " main.cpp.. expand("%<") " main expand("%:p") "/home/ksoo/main.cpp expand("%:p:h") " /home/ksoo expand("%:n") "main.cpp 좀 더 자세한 내용을 원하면 vim 에서 :help expand 쳐본다.

그 밑에 각종 확장자에 따라 다른 컴파일 및 실행 명령어가 분기된다. 사실 나는 간단한 스크립트 언어를 짤 때 input.txt 를 stdin 으로 놓고 테스트하는 타입이라서 해당 디렉토리에 input.txt 이 있다면 redirection 하는 코드를 한줄 넣는다. 이 부분은 안쓰면 빼도 된다.

그리고 마지막으로 공백을 \\ 으로 치환하는 substitue 를 쓰고 make 하고 스크립트가 끝나게 된다.

당장 저 함수만 만들고 임의의 cpp 파일을 생성하고 저장하고 >:call Kompile()

라고 치게 되면 바로 오른쪽 화면에 QuickFix 로 컴파일 결과가 나타나게 된다.


noremap <C-S-B> :wa<CR>:call Kompile()<CR><c-w>p

이 함수를 자기가 원하는 keymap 으로 설정하면 더욱 편하게 쓸 수 있다.



Vim perl.png perl 스크립트를 실행해본 모습

## 실행

하여 결과 리턴받기 이미 위에서 스크립트형 언어는 위에서 결과를 리턴 받았을 것인데, 컴파일형 언어는 컴파일만 됐을 뿐, 아무런 실행을 하지 못한 상태다.


function! Exekute() ....???? endfunction

그래서 위와 같은 실행 하는 함수를 정의하면 편하게 실행결과를 리턴 받을 수 있다.

expand("%:p:r") 에 대해서 궁금하면 :echo expand("%:p:r") 을 vim 에 쳐보자.

여기서 마찬가지로 마지막에 <input.txt 이 있는데 이건 기호에 맞게 빼주시고 사용하셔도 된다.