Ceci est une ancienne révision du document !
Utiliser Vim
CheatSheet : https://vim.rtorr.com/lang/fr_fr
Commandes
vimtutor fr
cp /etc/vim/vimrc ~.vimrc
Notions vim
buffer : espace mémoire associé à un fichier ouvert
views : espace de l'écran dédié à un buffer
tab : onglet contenant une ou des views
Il est possible d'avoir plusieurs views d'un même buffer côté à côte.
Il est possible d'avoir plusieurs tabs contenant chacun des views.
Configuration .vimrc
cp /etc/vimrc ~/.vimrc
Et le personnaliser avec :
set mouse=r # pour gestion copier/coller avec la souris dans un terminal set number set tabstop=4 set expandtab
Templates
Créer le dossier templates :
mkdir -p ~/.vim/templates
Créer ou récupérer des modèles comme xhtml.html
:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Titre de la page</title> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <meta http-equiv="Content-Language" content="fr" /> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes" charset="utf-8"> <meta name="author" content="Prénom Nom" /> <meta name="generator" content="vim" /> <meta name="keywords" lang="fr" content="" /> <meta name="description" content="la description de la page" /> </head> <body> <p>Contenu !</p> </body> </html>
Puis les activer dans .vimrc par extension :
au bufNewFile *.html 0r ~/.vim/templates/xhtml.html
Exemple de .vimrc
set history=700 filetype plugin on filetype indent on set autoread set ruler set ignorecase set smartcase set hlsearch set showmatch syntax enable autocmd BufRead,BufNewFile *.vue setfiletype html if has("gui_running") set guioptions-=T set guioptions+=e set t_Co=256 set guitablabel=%M\ %t endif set encoding=utf8 set ffs=unix,dos,mac set nobackup set nowb set noswapfile set expandtab set smarttab set shiftwidth=4 set tabstop=4 set lbr set tw=500 set ai "Auto indent set si "Smart indent set wrap "Wrap lines " Treat long lines as break lines (useful when moving around in them) map j gj map k gk " Always show the status line set laststatus=2 " Format the status line set statusline=\ %F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim' if empty(glob(data_dir . '/autoload/plug.vim')) silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' autocmd VimEnter * PlugInstall --sync | source $MYVIMRC endif call plug#begin('~/.vim/plugged') Plug 'yuezk/vim-js' Plug 'HerringtonDarkholme/yats.vim' Plug 'maxmellon/vim-jsx-pretty' Plug 'neoclide/coc.nvim', {'branch': 'release'} Plug 'NLKNguyen/papercolor-theme' Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' call plug#end() colorscheme PaperColor set background=dark set number let g:airline_theme='papercolor' let g:airline_powerline_fonts = 1 set hidden set nobackup set nowritebackup set updatetime=300 set shortmess+=c " Always show the signcolumn, otherwise it would shift the text each time " diagnostics appear/become resolved. if has("nvim-0.5.0") || has("patch-8.1.1564") " Recently vim can merge signcolumn and number column into one set signcolumn=number else set signcolumn=yes endif " Use tab for trigger completion with characters ahead and navigate. " NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by " other plugin before putting this into your config. inoremap <silent><expr> <TAB> \ pumvisible() ? "\<C-n>" : \ <SID>check_back_space() ? "\<TAB>" : \ coc#refresh() inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>" function! s:check_back_space() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction " Use <c-space> to trigger completion. if has('nvim') inoremap <silent><expr> <c-space> coc#refresh() else inoremap <silent><expr> <c-@> coc#refresh() endif " Make <CR> auto-select the first completion item and notify coc.nvim to " format on enter, <cr> could be remapped by other vim plugin inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm() \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>" " Use `[g` and `]g` to navigate diagnostics " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. nmap <silent> [g <Plug>(coc-diagnostic-prev) nmap <silent> ]g <Plug>(coc-diagnostic-next) " GoTo code navigation. nmap <silent> gd <Plug>(coc-definition) nmap <silent> gy <Plug>(coc-type-definition) nmap <silent> gi <Plug>(coc-implementation) nmap <silent> gr <Plug>(coc-references) " Use K to show documentation in preview window. nnoremap <silent> K :call <SID>show_documentation()<CR> function! s:show_documentation() if (index(['vim','help'], &filetype)>= 0) execute 'h '.expand('<cword>') elseif (coc#rpc#ready()) call CocActionAsync('doHover') else execute '!' . &keywordprg . " " . expand('<cword>') endif endfunction " Highlight the symbol and its references when holding the cursor. autocmd CursorHold * silent call CocActionAsync('highlight') " Symbol renaming. nmap <leader>rn <Plug>(coc-rename) " Formatting selected code. xmap <leader>f <Plug>(coc-format-selected) nmap <leader>f <Plug>(coc-format-selected) augroup mygroup autocmd! " Setup formatexpr specified filetype(s). autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') " Update signature help on jump placeholder. autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') augroup end " Applying codeAction to the selected region. " Example: `<leader>aap` for current paragraph xmap <leader>a <Plug>(coc-codeaction-selected) nmap <leader>a <Plug>(coc-codeaction-selected) " Remap keys for applying codeAction to the current buffer. nmap <leader>ac <Plug>(coc-codeaction) " Apply AutoFix to problem on the current line. nmap <leader>qf <Plug>(coc-fix-current) " Map function and class text objects " NOTE: Requires 'textDocument.documentSymbol' support from the language server. xmap if <Plug>(coc-funcobj-i) omap if <Plug>(coc-funcobj-i) xmap af <Plug>(coc-funcobj-a) omap af <Plug>(coc-funcobj-a) xmap ic <Plug>(coc-classobj-i) omap ic <Plug>(coc-classobj-i) xmap ac <Plug>(coc-classobj-a) omap ac <Plug>(coc-classobj-a) " Remap <C-f> and <C-b> for 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 " Use CTRL-S for selections ranges. " Requires 'textDocument/selectionRange' support of language server. nmap <silent> <C-s> <Plug>(coc-range-select) xmap <silent> <C-s> <Plug>(coc-range-select) " Add `:Format` command to format current buffer. command! -nargs=0 Format :call CocAction('format') " Add `:Fold` command to fold current buffer. command! -nargs=? Fold :call CocAction('fold', <f-args>) " Add `:OR` command for organize imports of the current buffer. command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') " Add (Neo)Vim's native statusline support. " NOTE: Please see `:h coc-status` for integrations with external plugins that " provide custom statusline: lightline.vim, vim-airline. set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} " Mappings for CoCList " Show all diagnostics. nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr> " Manage extensions. nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr> " Show commands. nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr> " Find symbol of current document. nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr> " Search workspace symbols. nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr> " Do default action for next item. nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR> " Do default action for previous item. nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR> " Resume latest coc list. nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>
Plugin et Completion
Installation de vim-plug
source : https://github.com/junegunn/vim-plug
curl -fLo ~ /.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
⇒ Création d'un dossier .vim/autoload/ et copie de plug.vim dedans.
Dans .vimrc, rajouter en fin de fichier (ici un plugin vim-easily-align) :
call plug#begin() " The default plugin directory will be as follows: " - Vim (Linux/macOS): '~/.vim/plugged' " - Vim (Windows): '~/vimfiles/plugged' " - Neovim (Linux/macOS/Windows): stdpath('data') . '/plugged' " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align Plug 'junegunn/vim-easy-align' " Initialize plugin system call plug#end()
Installation de coc.nvim
Installer nodejs auparavant : https://github.com/nodesource/distributions/blob/master/README.md#debinstall
# Using Ubuntu curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash - sudo apt-get install -y nodejs
Modifier .vimrc et rajouter :
call plug#begin() Plug 'neoclide/coc.nvim', {'branch': 'release'} call plug#end()
Puis lancer vim et installer le plugin
Installation de complétion pour python
Plusieurs plugin pour python : coc-jedi, coc-pyright, coc-python (obsolète)
Nombreux extensions : https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions
Et relancer vim et lancer :
:CocInstall coc-jedi
ou :CocInstall coc-pyright