vim 자동완성 플러그인 coc.nvim 설치 & 적용
설치
운영체제: macOS
vim 플러그인 매니저: pathogen
NodeJS 설치
$ brew install node
coc.nvim 다운로드
$ cd ~/.vim/bundle
$ git clone https://github.com/neoclide/coc.nvim
yarn 설치
$ npm install --global yarn
coc.nvim 디렉토리에서 coc.nvim 의존성 설치 및 컴파일
$ yarn install
jedi
패키지 설치
$ pip3 install jedi
~/.vimrc
파일에 설정 추가
vim configuration
자동완성 팝업창의 텍스트가 잘 보이지 않는 경우 ~/.vimrc
파일에 추가
hi Pmenu ctermbg=black ctermfg=white
언어별 자동완성 설정
coc.nvim은 VSCode와 동일하게 LSP를 사용하여 자동완성 기능을 지원한다.
vim 을 실행한 뒤 명령어 입력
- Python
:CocInstall coc-python
- 인터프리터 설정 -
:CocConfig python.setInterpreter "/path/to/interpreter"
- 인터프리터 설정 -
- C/C++
:CocInstall coc-clangd
- JavaScript
:CocInstall coc-tsserver
linter
소스 코드를 분석하여 에러가 발생하는 부분을 검사하여 알려 준다.
코드 스타일 준수 여부를 검사해주기도 한다.
Python
pylint
- 스타일(PEP 8) 검사, 에러 검사, 리팩토링에 대한 조언$ pip install pylint $ pylint <파이썬 파일>
flake8
- 에러 검사$ pip install flake8 $ flake8 <파이썬 파일>
float window/popup scroll
사진과 같은 팝업창을 스크롤 하는 단축키를 설정하는 코드 (~/.vimrc
)
" Remap <C-f> and <C-b> to scroll float windows/popups
if has('nvim-0.4.0') || has('patch-8.2.0750')
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
endif
기본은 <Control-f>
, <Control-b>
로 스크롤 하도록 설정되어 있다.
위의 코드를 수정하면 내가 원하는 단축키로 팝업창을 스크롤할 수 있다.
<Control-j>
(아래), <Control-k>
(위)로 설정
" Remap <C-j> and <C-k> to scroll float windows/popups
" <C-j>: down, <C-k>: up
if has('nvim-0.4.0') || has('patch-8.2.0750')
nnoremap <silent><nowait><expr> <C-j> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-j>"
nnoremap <silent><nowait><expr> <C-k> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-k>"
inoremap <silent><nowait><expr> <C-j> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
inoremap <silent><nowait><expr> <C-k> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
vnoremap <silent><nowait><expr> <C-j> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-j>"
vnoremap <silent><nowait><expr> <C-k> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-k>"
endif
mapping commands
remap
recursive mapnnoremap
normal mode에서의 non-recursive mapvnoremap
visual mode에서의 non-recursive mapinoremap
insert mode에서의 non-recursive map
example
map j gg
map Q j
noremap W j
Q -> j -> j (Q가 재귀적으로 mapping되어 결론적으로 j에 mapping된다)
W -> j (W는 j에 mapping되고 더 이상 mapping이 진행되지 않는다)
Comments