Faire des bonbons avec Vim

Sous la pression de collègues ou d'étudiants de groupes plus performants, vous avez décidé d'une étape désespérée qui peut diviser votre vie entre la période «avant» et «après» (vous avez passé vimtutor) , et maintenant vous ne savez pas quoi faire de vos nouvelles capacités? Ou peut-être que vous êtes toujours assis dans une sorte d'IDE et que vous ne soufflez pas pourquoi avez-vous besoin de «ces cahiers de programmation» et «une sorte de Vim là-bas» ? Alors asseyez-vous et versez-vous de la limonade, maintenant je vais tout mettre sur les étagères.



(L'article est recommandé pour une lecture séquentielle, mais pour votre commodité, la table des matières est donnée ci-dessous)


  1. Entrée
  2. Gestionnaire de plugins
  3. Teinture d'apparence
  4. Prise en charge de la langue russe
  5. Intégration avec des programmes externes
  6. En bref sur (b)
  7. Conclusion


Définissons la terminologie


Vim (ci-après dénommé Vim) est, comme beaucoup le savent déjà, un éditeur de texte. Bien sûr, changer ce que vous avez écrit est une tâche très importante, qui est un goulot d'étranglement dans votre productivité, mais, malheureusement, tout dans cette vie n'est pas si simple, et vous (en tant qu'utilisateur) avez souvent besoin d'autres fonctionnalités.


Un environnement de travail est un ensemble de programmes de développement logiciel. Par exemple, il peut contenir un compilateur, une console interactive, un éditeur pour positionner les éléments de l'interface graphique, un débogueur, etc. L'éditeur n'est qu'une petite pièce de ce puzzle.


Un IDE est un lieu de travail complet en un seul endroit. Bien sûr, il existe des programmes comme Emacs (ci-après dénommé Emax) , où vous êtes vous-même libre d'y insérer tout ce que vous voulez avec les compétences appropriées, mais le plus souvent, c'est un package prêt à l'emploi compilé pour vous.


" Pourquoi ai-je besoin de Wim alors si l'IDE fait tout pour moi?"


Auparavant, sa disposition était un argument puissant, car pour beaucoup, il est plus pratique que les raccourcis clavier multi-boutons de type Emax modernes pour la navigation et l'édition de texte. Cependant, grâce à Neovim et à d'autres projets tels que VSCodeVim , il est littéralement partout.


Cependant, il existe un autre argument plus puissant: les performances. L'IDE a souvent une énorme quantité de fonctionnalités que vous n'utilisez pas et des processus d'arrière-plan qui chargent fortement le système. Même si votre MacBook ne crie pas comme un combattant de PyCharm ou si vous n'avez pas de défilement dans Visual Studio (ce qui est impossible, vous êtes mes menteurs) , et le single-threading d'Emax ne vous rappelle pas le premier Crysis ou STALKER, la question de la consommation d'énergie se pose toujours et, par conséquent, vie de la batterie. Un tel logiciel dans la communauté Linux est caractérisé par le terme mème "ballonnement".



- Pourquoi Wim?


J'ai déjà un article sur tous les charmes de ce programme. Cependant, il a été écrit par un homme sous l'impression d'un nouveau jouet avec un niveau d'intelligence de deuxième année (devinez pourquoi) qui a entraîné une si petite quantité de sens critique en lui qu'un trou noir s'est formé à sa place. Eh bien, au moins les images drôles ont été un succès ...


Que puis-je dire de lui maintenant, après un an d'utilisation active?


  1. Il est très rapide. En raison de la nature de son rendu, Wim a une latence beaucoup plus faible que les autres éditeurs. Après cela, d'autres éditeurs semblent ne pas répondre, je suis déjà silencieux sur les IDE mentionnés ci-dessus.
  2. Son utilisation est similaire au passage du troisième Dark Souls après la première partie. Au début, c'est difficile et inhabituel, car le jeu est devenu plus rapide, et vous ne pouvez pas concevoir de nombreux moments difficiles à l'aide du composant RPG, mais ensuite vous vous rendez compte que le jeu s'est avéré vrai, et presque tous les patrons se lancent au deuxième essai.
  3. Il ne dépense pratiquement pas de ressources et fonctionne même sur du pain, ce qui est très bon pour la batterie.

En principe, il n'y a rien de franchement mauvais dans les autres éditeurs, alors laissez ce choix à votre discrétion personnelle. Je suis convaincu que vous pouvez trouver un article similaire pour votre programme préféré. Bien que, pour être honnête, les éditeurs d'électrons puissent difficilement passer par le critère de l'efficacité énergétique.


Dans cet article, nous amènerons Wim à un état digestible pour un travail sérieux, et lui apprendrons également à être amis avec certains programmes de développement tiers. Veuillez noter que je ne parlerai que de ce que j'ai rencontré personnellement et si vous avez des suggestions intéressantes, alors bienvenue dans les commentaires.



Insérez une blague sur la prise


L'arme principale pour configurer notre ami est les plugins. En fait, ce ne sont que des fichiers séparés avec du code VimScript qui sont exécutés lorsque vous chargez votre fichier de paramètres (~ / .vimrc ou ~ / .config / nvim / init.vim) avec la commande source. L'utilisation de stylos pour télécharger tout cela est assez pénible, alors les grands esprits de l'humanité ont proposé des gestionnaires de paquets ... pour Wim!


La tâche principale du gestionnaire de paquets est de télécharger les plugins spécifiés à partir du github, de fournir à l'utilisateur une interface pratique pour les gérer et, en fait, de les connecter lors du chargement de Wim. Il y a bien sûr des managers minimalistes de type Pathogène (qui ne s'occupe principalement que du troisième) , mais nous ne compliquerons pas tellement notre vie.


Notre salle aujourd'hui sera vim-plug . Mais, avant de l'installer, vous devez d'abord ajouter quelques lignes à votre configuration:


filetype plugin indent on "   , ...
"...      
set encoding=utf-8 "  UTF-8
set nocompatible "    Vi
syntax enable "  

. . Vim Neovim, . :


if empty(glob('~/.vim/autoload/plug.vim')) " vim-plug  
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs " 
    \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 
  "   
  "    PlugInstall,     
  autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

, , . , curl, Neovim ~/.vim ~/.local/share/nvim/site. , . Neovim :


call plug#begin('~/.vim/bundle') "     
"    
call plug#end() "  

. :


Plug '/' "    
"    ...
"...    :PlugInstall   

vim-plug , , , . , , . / , .



...




, , , 90% — . , , . .


(MacVim) :





. . , Sublime Text — Monokai, .


...
Plug 'ErichDonGubler/vim-sublime-monokai' "    
...

colorscheme sublimemonokai "     

( ), . , Darcula, Solarized Dark ...





status bar. , tmux WM , . Airline:


...
Plug 'vim-airline/vim-airline' "  
...

"   
let g:airline_powerline_fonts = 1 "  Powerline 
let g:airline#extensions#keymap#enabled = 0 "   
let g:airline_section_z = "\ue0a1:%l/%L Col:%c" "   
let g:Powerline_symbols='unicode' " unicode
let g:airline#extensions#xkblayout#enabled = 0 "   

Powerline , , , — , . Keymap , ( ). \ue0a1 — "ln", , .


Airline :



:





, . , gui Powerline. , :


"16        
set guifont=____:h16

. -, . , — Fira Code, ( ). -, Devicons, Airline Nerdtree ( ) .


...
Plug 'ryanoasis/vim-devicons' "      
...

.



, Powerline , Nerd Font, Fira Code . , MacOS brew :


#  
brew tap homebrew/cask-fonts
brew cask install font-firacode-nerd-font

( GUI. , "" ):


set guifont=Fura\ Code\ Light\ Nerd\ Font\ Complete:h16 " light 

:





. ( :help) ( ). , :


set guioptions= "    GUI
set showtabline=0 "   ( FTW)

"   number    
"relativenumber -     
set number relativenumber "   .  

"wrap      
" nowrap     
set wrap linebreak nolist "    wrap...
"...     ,   

"    soft wrapping
"       ...
"...      :
set textwidth=80 " 80       

set cursorline "       

"     ,   NeoVim, ...
"...        :
set ttimeoutlen=10 "   escape 
let &t_SI.="\e[5 q" "SI =  
let &t_SR.="\e[3 q" "SR =  
let &t_EI.="\e[1 q" "EI =  
" 1 -   
"2 -  
"3 -  
"4 -  
"5 -   
"6 -   

set macligatures "    MacVim
"    


?


, , — . , - , , , .


. , . — , . , ( ) .


, . , gVim MacVim, ( ). :



Langmap


, , :


set langmap=;ABCDEFGHIJKLMNOPQRSTUVWXYZ,;abcdefghijklmnopqrstuvwxyz

. . , , .



Keymap


:


"    qwerty,   mac  win
set keymap=russian-jcukenmac
"     - 
set iminsert=0
"   
set imsearch=0

, — … <C-^>… , . , , .


, , . , , ( ) Keymap .



Xkb-switch


. . Xkb-switch , , , MacOS. .


#     
git clone https://github.com/myshov/xkbswitch-macosx
#        $PATH
cp xkbswitch-macosx/bin/xkbswitch /usr/local/bin/xkbswitch
#     -  
git clone https://github.com/myshov/libxkbswitch-macosx
cp libxkbswitch-macosx/bin/libxkbswitch.dylib /usr/local/lib/libxkbswitch.dylib

:


...
Plug 'lyokha/vim-xkbswitch'
...

let g:XkbSwitchEnabled = 1 " 

. . Airline, Xkb-switch? , ( ) , .


. Xkb-switch , , vice versa. . .




, .



...



Slime


, — Slime. Ctrl-C-C, REPL . :


...
Plug 'jpalardy/vim-slime'
...

, , Slime screens , . , tmux (, ). :


" tmux
let g:slime_target = "tmux"

"  
let g:slime_target = "vimterminal"

"  
let g:slime_target = "neovim"


Jupyter


, . Jupyter — iPython, matplotlib. notebook lab, — .


… , , Jupyter:


jupyter qtconsole --generate-config
vim ~/.jupyter/jupyter_qtconsole_config.py


#c.ConsoleWidget.include_other_output = False

, False True.


Jupyter-vim:


...
Plug 'jupyter-vim/jupyter-vim'
...

, Python ( ), ( ## #%%) Jupyter. :


jupyter qtconsole &


:JupyterConnect "  ,   

\X ( \ — <localleader>) Jupyter , , \R . .


, . , :


nnoremap <leader>jc :call jupyter#Connect()<CR> " 

Jupyter , . , , , .


, , . , — .



LaTeX


, , . "" " " — (, ?). , .


, , ? , LaTeX! , , . Vimtex.


...
Plug 'lervag/vimtex'
...

let g:tex_flavor = 'latex' "  

"    Quickfix
let g:vimtex_quickfix_mode = 0

, .tex <localleader>ll ( :VimtexCompile), , Quickfix Location , pdf.


MacOS Preview . Zathura, , . :


#     MacOS (   XQuartz)
brew tap zegervdv/zathura
brew install zathura --with-synctex
brew install zathura-pdf-poppler

#   (   )
mkdir -p $(brew --prefix zathura)/lib/zathura
ln -s $(brew --prefix zathura-pdf-poppler)/libpdf-poppler.dylib $(brew --prefix zathura)/lib/zathura/libpdf-poppler.dylib

#     
#     Vimtex
#     
brew install xdotool

Vimtex zathura :


let g:vimtex_view_method = 'zathura'

Linux pdf. , : Vim <C-z>, zathura _.pdf &fg.



, ~/.config/zathura/zathurarc (, )


set recolor true
set recolor-darkcolor "#dcdccc"
set recolor-lightcolor "#1f1f1f"


Markdown


, LaTeX . . Markdown.


Markdown ( " ") — , HTML. ( ). , , — .


Livedown. — vimtex markdown. . Nodejs :


#   MacOS
brew install node
# 
npm install -g livedown

:


...
Plug 'shime/vim-livedown'
...

"      
nnoremap <leader>ld :LivedownToggle<CR>

<leader>ld ( ) . , HTML , , markdown , "" .


, markdown — . Markdown-preview. , Livedown, ( ). , .




, , () . , , :





. — , . , .


Vim, Sublime Text . . , .


, gdb, lldb .




:make, . , , , ( ).


, YouCompleteMe , Neomake:


...
Plug 'Valloric/YouCompleteMe'
Plug 'neomake/neomake'
...
" ,  YCM     
": python3 ~/.vim/bundle/YouCompleteMe/install.py --clang-completer

let g:ycm_show_diagnostics_ui = 0 " YCM

"     Neomake
let g:neomake_cpp_clang_maker = {
   \ 'exe': 'clang++',
   \ 'args': ['-I/usr/local/include/wx-3.0', '-std=c++17'],
   \ }



<C-]>, . . ctags:


#     
ctags -R &

, ( YCM):


"       :
:YcmCompleter GoToDeclaration

, — . . ...




. , .


( , ). , , . 8 ( NeoVim ) API . , , .


AsyncRun. Vim 8, NeoVim ( ).


...
Plug 'skywind3000/asyncrun.vim'
...

nnoremap <F3> :AsyncRun ctags -R<CR>

F3 ctags. AsyncRun Quickfix. AsyncStop.


, zathura :


:AsyncRun zathura mew.pdf


Git


Git, . IDE , , , . - Fugitive, .


, , , . :Gfetch :Gpush :Make, :


command! -bang -nargs=* -complete=file Make AsyncRun -program=make @ <args>



, IDE , , , . , , . , , , - . .


, , ( NeoVim) ...



Source: https://habr.com/ru/post/fr468265/


All Articles