technique:vim

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
technique:vim [2021/12/09 16:48] – créée francoisatechnique:vim [2022/01/06 15:00] francoisa
Ligne 1: Ligne 1:
 ====== Utiliser Vim ====== ====== Utiliser Vim ======
  
-CheatSheet : https://vim.rtorr.com/lang/fr_fr+CheatSheet : [[https://vim.rtorr.com/lang/fr_fr|https://vim.rtorr.com/lang/fr_fr]]
  
-https://vim-adventures.com/+[[https://vim-adventures.com/|https://vim-adventures.com/]]
  
-https://openclassrooms.com/fr/courses/43538-reprenez-le-controle-a-laide-de-linux/42693-vim-lediteur-de-texte-du-programmeur+[[https://openclassrooms.com/fr/courses/43538-reprenez-le-controle-a-laide-de-linux/42693-vim-lediteur-de-texte-du-programmeur|https://openclassrooms.com/fr/courses/43538-reprenez-le-controle-a-laide-de-linux/42693-vim-lediteur-de-texte-du-programmeur]]
  
 ===== Commandes ===== ===== Commandes =====
- 
 <code> <code>
 +
 vimtutor fr vimtutor fr
  
 </code> </code>
 +
 <code> <code>
 cp /etc/vim/vimrc ~.vimrc cp /etc/vim/vimrc ~.vimrc
  
 </code> </code>
 +
 +===== 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 =====
 +
 +<code>
 +cp /etc/vimrc ~/.vimrc
 +
 +</code>
 +
 +Et le personnaliser avec :
 +
 +<code>
 +set mouse=r # pour gestion copier/coller avec la souris dans un terminal
 +set number
 +set tabstop=4
 +set expandtab
 +
 +</code>
 +
 +===== Templates =====
 +
 +Créer le dossier templates :
 +
 +<code>
 +mkdir -p ~/.vim/templates
 +
 +</code>
 +
 +Créer ou récupérer des modèles comme ''xhtml.html'' :
 +<code>
 +<!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>
 +
 +</code>
 +
 +Puis les activer dans .vimrc par extension :
 +
 +<code>
 +au bufNewFile *.html 0r ~/.vim/templates/xhtml.html
 +
 +</code>
 +
 +==== Exemple de .vimrc ====
 +
 +<code vim>
 +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> <Plug>(coc-format-selected)
 +nmap <leader> <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> <Plug>(coc-codeaction-selected)
 +nmap <leader> <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> :<C-u>CocList diagnostics<cr>
 +" Manage extensions.
 +nnoremap <silent><nowait> <space> :<C-u>CocList extensions<cr>
 +" Show commands.
 +nnoremap <silent><nowait> <space> :<C-u>CocList commands<cr>
 +" Find symbol of current document.
 +nnoremap <silent><nowait> <space> :<C-u>CocList outline<cr>
 +" Search workspace symbols.
 +nnoremap <silent><nowait> <space> :<C-u>CocList -I symbols<cr>
 +" Do default action for next item.
 +nnoremap <silent><nowait> <space> :<C-u>CocNext<CR>
 +" Do default action for previous item.
 +nnoremap <silent><nowait> <space> :<C-u>CocPrev<CR>
 +" Resume latest coc list.
 +nnoremap <silent><nowait> <space> :<C-u>CocListResume<CR>
 +
 +
 +</code>
 +
 +===== Plugin et Completion =====
 +
 +==== Installation de vim-plug ====
 +
 +source : https://github.com/junegunn/vim-plug
 +<code>
 +curl -fLo
 +~ /.vim/autoload/plug.vim --create-dirs \
 +    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
 +
 +</code>
 +
 +=> 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) :
 +
 +<code>
 +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()
 +
 +</code>
 +==== Installation de coc.nvim ====
 +
 +Installer nodejs auparavant : https://github.com/nodesource/distributions/blob/master/README.md#debinstall
 +
 +<code>
 +# Using Ubuntu
 +curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
 +sudo apt-get install -y nodejs
 +
 +</code>
 +
 +Modifier .vimrc et rajouter :
 +<code>
 +
 +call plug#begin()
 +
 +Plug 'neoclide/coc.nvim', {'branch': 'release'}
 +
 +call plug#end()
 +
 +</code>
 +
 +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 :
 +
 +<code>
 +:CocInstall coc-jedi
 +
 +</code>
 +
 +ou :CocInstall coc-pyright
  
  
  • technique/vim.txt
  • Dernière modification : 2024/04/02 15:08
  • de 127.0.0.1