woonizzooni

MacOS 환경에서 vim 환경 설정 본문

MISC

MacOS 환경에서 vim 환경 설정

woonizzooni 2019. 10. 15. 17:39

 

Windows10환경에서 vim환경설정 을 MacOS에서 가능한 동일하게 설정,

윈도우즈에서는 gui vim이었다면 mac에서 vim은 터미널 환경에서의 vim임.

 

o 설치

neovim이 터미널에서 트루컬러를 지원하므로 neovim일 기본 vim에디터로 하자.

(https://github.com/morhetz/gruvbox/wiki/Terminal-specific)

$ brew install neovim

 

> vim을 neovim으로 변경 (~/.zshrc, ~/.bashrc, ~/.alias 등... 본인 환경에 적합한 곳에)

alias vim="nvim"
alias vi="nvim"
alias vimdiff="nvim -d"
export EDITOR=/usr/local/bin/nvim

 

> 기본 경로 확인
https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

https://github.com/neovim/neovim/blob/master/src/nvim/os/stdpaths.c

static const char *xdg_env_vars[] = {
  [kXDGConfigHome] = "XDG_CONFIG_HOME",
  [kXDGDataHome] = "XDG_DATA_HOME",
  [kXDGCacheHome] = "XDG_CACHE_HOME",
  [kXDGRuntimeDir] = "XDG_RUNTIME_DIR",
  [kXDGConfigDirs] = "XDG_CONFIG_DIRS",
  [kXDGDataDirs] = "XDG_DATA_DIRS",
};

#ifdef WIN32
  [kXDGConfigHome] = "~\\AppData\\Local",
  [kXDGDataHome] = "~\\AppData\\Local",
  [kXDGCacheHome] = "~\\AppData\\Local\\Temp",
  [kXDGRuntimeDir] = NULL,
  [kXDGConfigDirs] = NULL,
  [kXDGDataDirs] = NULL,
#else
  [kXDGConfigHome] = "~/.config",
  [kXDGDataHome] = "~/.local/share",
  [kXDGCacheHome] = "~/.cache",
  [kXDGRuntimeDir] = NULL,
  [kXDGConfigDirs] = "/etc/xdg/",
  [kXDGDataDirs] = "/usr/local/share/:/usr/share/",
#endif

:echo stdpath('data')   --> ~/.config/nvim

:echo stdpath('data_dirs') --> ['/usr/local/share/nvim', '/usr/share/nvim']

:echo stdpath('config') --> ~/.local/share/nvim

:echo stdpath('config_dirs') --> ['/etc/xdg/nvim']

 

 

o 플러그인 목록 & 설치

> 경로 확정 : init.vim 파일 위치 및 플러그인이 저장될 위치 지정

구분 설치 직후 (기본 설정) export 환경 변수 후 (경로 변경)
stdpath('config') ~/.config/nvim

'export XDG_CONFIG_HOME=~/myenv' 후
~/myenv/nvim

stdpath('data') ~/.local/share/nvim

'export XDG_DATA_HOME=$XDG_CONFIG_HOME' 후
~/myenv/nvim

 

> vimrc 파일 생성 : ${XDG_CONFIG_HOME:-~/.config}/nvim/init.vim

$ mkdir -p ${XDG_CONFIG_HOME:-~/.config}/nvim;

$ touch ${XDG_CONFIG_HOME:-~/.config}/nvim/init.vim

 

 

> 패키지 매니저 설치 (vim-Plug : https://github.com/junegunn/vim-plug)

curl -fLo ${XDG_DATA_HOME:-~/.local/share}/nvim/site/autoload/plug.vim \
   --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

 

> init.vim 파일에 플러그인 목록 설정

call plug#begin(stdpath('data')."/plugged")

Plug 'junegunn/vim-easy-align' 
if has("win32")
    Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } : 미설치되어 있는 경우 설치
else
    Plug 'Plug '/usr/local/opt/fzf' : brew로 설치했을 경우
endif
Plug 'junegunn/fzf.vim' 
Plug 'scrooloose/nerdtree' 
Plug 'scrooloose/nerdcommenter' 
Plug 'vim-airline/vim-airline' 
Plug 'vim-airline/vim-airline-themes' 
Plug 'terryma/vim-multiple-cursors' 
Plug 'tpope/vim-surround' 
Plug 'morhetz/gruvbox'

Plug 'neoclide/coc.nvim', {'branch': 'release'} " Use release branch
"Plug 'neoclide/coc.nvim', {'tag': '*', 'branch': 'release'} " Or latest tag
"Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} " Or build from source code by use yarn: https://yarnpkg.com

call plug#end()
....
let g:coc_extension_root=stdpath('data')."/coc-extensions"
...

 

> 플러그인 설치 : ${XDG_DATA_HOME:-~/.config}/nvim/plugged 에 설치됨.

:PlugInstall 

 

coc.nvim (https://github.com/neoclide/coc.nvim)

목적

- 자동완성, lint 오류 검출 정도.

- autocompletion engine을 lsp (language-server-protocol)지원 플러그인인 coc.nvim으로 이용해볼 것이다.

   (vim-lsp, ale등을 이용할 수도 있음)

 

대상 프로그래밍 언어

 - 확장모듈 : json, python, java, html,  html, xml

 - 추가모듈 : c/c++/obj-c, bash, groovy

 

기타 참고 

xcode 및 cli 툴 설치된 상태 (clang 등... path에 잡힌상태)

yarn, node, python 등 도 설치되어 있는 상태. 그 외 pre, 뭐 등등 필요한 것들도 다 있는 상태.

 

> Coc 확장 모듈 설치

:CosInstall coc-json
:CocInstall coc-python
:CocInstall coc-java
:CocInstall coc-html
:CocInstall coc-xml

아래 경로에 확장 모듈이 설치됨. 

기본 (경로 설정 변경 전 : g:coc_extension_root) 경로 설정 후 (g:coc_extension_root)
~/.config/coc/extensions XDG_DATA_HOME 미설정시 : ~/.local/share/nvim/coc/extensions
XDG_DATA_HOME 설정시 : ${XDG_DATA_HOME}/nvim/coc-extensions

 

python의 경우 language server 가 (=pyls) 설치되어 있어야 동작함. 내 환경에서만 이러나... 이런거 귀찮아서 이용하는 걸텐데..암튼

Python Language server 설치 (https://github.com/palantir/python-language-server)

$ pip3 install 'python-language-server[all]'

 

PYTHONPATH 변수 선언 (pyls 모듈이 설치된 곳에). 이게 경로에 잡혀있어야 연동됨 (중요)

export PYTHONPATH=/usr/local/lib/python3.7/site-packages

(내 맥 환경에서 python 버전별 PYTHONPATH

   python 2.x : /Users/myname/Library/Python/2.7/lib/python/site-packages

   python 3.x : /usr/local/lib/python3.7/site-packages)

 

 

> Coc 커스텀(?) 모듈 설치 (ccls, bash, groovy, ... )

C/C++/Objective-C Language server 설치 (https://github.com/MaskRay/ccls/wiki/Build)

직접 빌드는 귀찮으니, 리눅스가 주인데... 맥이지만 그냥 해놓는다.

$ brew install ccls --> llvm설치되는 과정이 무지 오래 걸림

$ which ccls

  /usr/local/bin/ccls

 

bash Language Server 설치  (https://github.com/mads-hartmann/bash-language-server)

$ npm -i -g bash-language-server

$ which bash-language-server

  /usr/local/bin/bash-language-server

 

Groovy Language Server 설치 (https://github.com/prominic/groovy-language-server)

$ git clone https://github.com/prominic/groovy-language-server.git

$ cd groovy-language-server

$ chmod 755 gradlew

$ ./gradlew build

$ cp build//libs/groovy-language-server-all.jar ${XDG_CONFIG_HOME:-~/.config}/nvim

 

설정 (참고 : Language servers https://github.com/neoclide/coc.nvim/wiki/Language-servers)

:CocConfig --> ${XDG_CONFIG_HOME:-~/.config}/nvim/coc-settings.json 파일 '없으면 생성' / '있으면 로딩'됨.

{
  "languageserver": {
    "ccls": {
      "command": "ccls",
      "filetypes": ["c", "cpp", "objc", "objcpp"],
      "rootPatterns": [".ccls", "compile_commands.json", ".vim/", ".git/", ".hg/"],
      "initializationOptions": {
         "cache": {
           "directory": "/tmp/ccls"
         }
       }
    },
    
    "bash": {
      "command": "bash-language-server",
      "args": ["start"],
      "filetypes": ["sh"],
      "ignoredRootPaths": ["~"]
    },
    
    
    "groovy": {
      "command": "java",
      "args" : ["-jar", "${XDG_CONFIG_HOME:-~/.config}/nvim/groovy-language-server-all.jar"],
      "filetypes": ["groovy"]
    }
    
  }
}

 

ex)

c

java

 

다른 플러그인 들은 'Windows10환경에서 vim환경설정 ' 참고.

 

 

o 기타 참고

LSP - Language Server 목록 참고

https://microsoft.github.io/language-server-protocol/implementors/servers/

 

coc.nvim (https://github.com/neoclide/coc.nvim)

      doc/coc.txt : g:coc_extension_root ==> Location that coc extensions would be installed to ...

      src/extensions.ts : private async initializeRoot().. let root = this.root = await workspace.nvim.call('coc#util#extension_root')

      src/model/extension.ts : private async _install(npm: ... let folder = path.join(this.root, 'node_modules', info.name)

      autoload/coc/util.vim : function! coc#util#extension_root() ... let dir = get(g:, 'coc_extension_root', '')

 

vim-lsp (https://github.com/prabirshrestha/vim-lsp)

ALE = AsynchAsynchronous Lint Engine (https://github.com/dense-analysis/ale)

 

LanguageClient-neovim (https://github.com/autozimu/LanguageClient-neovim)

 

 

 


 

 


커스텀 설정 참고

 

 

Python Language Server 설정 (https://github.com/neoclide/coc.nvim/wiki/Language-servers#python)

{
  "languageserver": {
    "ccls": {
      ....
    },
    "bash": {
      ....
    },
    "python": {
      "command": "python",
      "args": [
        "-mpyls",
        "-vv",
        "--log-file",
        "/tmp/lsp_python.log"
      ],
      "trace.server": "verbose",
      "filetypes": [
        "python"
      ],
      "settings": {
        ...    
    
      }
    }
    
  }
}

 

Java Language Server 설치 및 설정  (Eclipse JDT Language Server 활용)

$ git clone https://github.com/eclipse/eclipse.jdt.ls

$ cd eclipse.jdt.ls

$ ./mvnw clean verify <-- 엄청 오래 걸림..

연동은... 여기 설명대로 args설정하면 될 것 같은데... 귀찮다. 나중에..

 

 

((필요시 업데이트 .... ))

Comments