Home

ITA - "Vim & CoC"

vim ide coc development

Introduzione

Già da qualche tempo mi sono stufato di ricreare negli ide più famosi i plugin per riuscire a riprodurre il funzionamento di vim al loro interno.

Per alcuni linguaggi, in passato, mi sono aggiustato in questi modi:

Qualche settimana fa un mio collaboratore mi ha suggerito di provare un plugin di vim scritto in nodejs : “Conquer of Completion” aka Coc.

Coc usa un approccio diverso: invece di installare un plugin per ogni linguaggio, se ne installa uno unico per gestire molti linguaggi; tutto questo comunque integrato con gli altri plugin che si possono trovare su vimawesome.

Installazione e Configurazione

Di seguito do per scontato che vundle sia installato, come ho fatto qui.

NVM e npn

Coc per funzionare richiede che sul sistema sia installato nodejs, il modo migliore per farlo è NVM, quindi procedo ad installarlo:

[stethewwolf@hel ~]$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14926  100 14926    0     0  60429      0 --:--:-- --:--:-- --:--:-- 60674
=> nvm is already installed in /home/stethewwolf/.nvm, trying to update using git
=> => Compressing and cleaning up git repository

=> nvm source string already in /home/stethewwolf/.bashrc
=> bash_completion source string already in /home/stethewwolf/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

Lo script di installazione appende delle variabili d’ambiente al ./bashrc, procedo a ricaricarlo:

[stethewwolf@hel ~]$ source .bashrc  

Installo la versione di nodejs che mi serve :

[stethewwolf@hel ~]$ nvm i 12.12
Downloading and installing node v12.12.0...
Downloading https://nodejs.org/dist/v12.12.0/node-v12.12.0-linux-x64.tar.xz...
##################################################################################################################################################################################################################################### 100,0%
Computing checksum with sha256sum
Checksums matched!
Now using node v12.12.0 (npm v6.11.3)
Creating default alias: default -> 12.12 (-> v12.12.0)

NB: controllare la versione specificata sulla pagina di installazione per sicurezza alla sezione requisiti

CoC

Supponendo che vundle sia già installato, aggiungo al mio vimrc la linea :

Plugin 'neoclide/coc.nvim'

Poi lo installo con il comando :PlugInstall, dopo lo compilo a mano:

[stethewwolf@hel ~]$ cd .vim/bundle/coc.nvim/
[stethewwolf@hel coc.nvim]$ npm install
npm WARN deprecated sane@4.1.0: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated

> esbuild@0.12.18 postinstall /home/stethewwolf/.vim/bundle/coc.nvim/node_modules/esbuild
> node install.js


> coc.nvim-master@0.0.80 prepare /home/stethewwolf/.vim/bundle/coc.nvim
> node esbuild.js

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.3.2 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN jest-config@26.6.3 requires a peer of ts-node@>=9.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN jsdom@16.7.0 requires a peer of canvas@^2.5.0 but none is installed. You must install peer dependencies yourself.
npm WARN ws@7.5.3 requires a peer of bufferutil@^4.0.1 but none is installed. You must install peer dependencies yourself.
npm WARN ws@7.5.3 requires a peer of utf-8-validate@^5.0.2 but none is installed. You must install peer dependencies yourself.

added 693 packages from 476 contributors and audited 699 packages in 17.867s
found 0 vulnerabilities
[stethewwolf@hel coc.nvim]$ npm run build

> coc.nvim-master@0.0.80 build /home/stethewwolf/.vim/bundle/coc.nvim
> node esbuild.js

Onestamente non mi aspettavo di dover eseguire questi step manuali, qui non sono riportati, ma e l’unico modo che ho trovato per farlo funzionare

Al termine il vimrc rimane simile a:

[stethewwolf@hel ~]$ cat .vim/vimrc 
set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" Keep Plugin commands between vundle#begin/end.

Plugin 'tpope/vim-fugitive'
Plugin 'kien/ctrlp.vim'
Plugin 'scrooloose/nerdtree'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'neoclide/coc.nvim'

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList       - lists configured plugins
" :PluginInstall    - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line

set splitbelow
set splitright

" split navigations
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>

map <C-m> :tabprevious<CR>
map <C-i> :tabnext<CR>

set tabstop=4
set softtabstop=4
set shiftwidth=4
set textwidth=79

let python_highlight_all=1
syntax on

" set mause enambled
set mouse=a

" enable line number
set nu

" set clipboard=unnamed

let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree
map <C-t> :NERDTreeToggle<CR>

set expandtab
set fileformat=unix

Gli altri plugin presenti sono :

Al primo avvio viene creata la cartella delle configurazioni:

[stethewwolf@hel blog.stefano-prina.it]$ vim _posts/2021-08-6-vim-ide-with-coc.markdown   
[coc.nvim] creating data directory: /home/stethewwolf/.config/coc

Supporto ai Linguaggi

Il supporto per i linguaggi va aggiunto volta per volta; io per test ho deciso di installare il supporto per:

Supporto per python

Il progetto di di riferimento su github per lo sviluppo di con pytho3.

In breve si può installare con:

:CocInstall coc-pyright

Supporto per JAVA

Il progetto di di riferimento su github per lo sviluppo di con java.

In breve si può installare con:

:CocInstall coc-java

Supporto per sviluppo web

I plugin suggeriti per lo sviluppo web sono:

Li si può installare con:

:CocInstall coc-tsserver coc-json coc-html coc-css

Riferimenti