ITA - "Vim & CoC"
August 2021 (917 Words, 6 Minutes)
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 :
Plugin 'tpope/vim-fugitive'
: supporto per git, pagina su vundlePlugin 'kien/ctrlp.vim'
: ricerca di file e nei files, pagina su vundlePlugin 'scrooloose/nerdtree'
: disegna l’albero delle directories, pagina su vundlePlugin 'vim-airline/vim-airline'
: barra delle informazioni, pagina su vundle
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:
- python
- java
- sviluppo web (typescript, css, html, json)
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
Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale Theme Moonwalk