Membuat permen dari Vim

Anda, di bawah tekanan kolega atau sesama mahasiswa dari kelompok yang lebih sukses, telah memutuskan langkah putus asa yang dapat membagi hidup Anda ke dalam periode "sebelum" dan "setelah" (Anda telah melewati vimtutor) , dan sekarang Anda tidak tahu apa yang harus dilakukan dengan kemampuan yang baru Anda temukan? Atau mungkin Anda masih duduk di semacam IDE dan jangan kaget mengapa Anda perlu "ini notebook pemrograman Anda" dan "semacam Vim di sana" ? Lalu duduk dan tuangkan limun untuk dirimu sendiri, sekarang aku akan meletakkan semuanya di rak.



(Artikel ini direkomendasikan untuk dibaca berurutan, tetapi untuk kenyamanan Anda, daftar isi diberikan di bawah ini)


  1. Entri
  2. Manajer Plugin
  3. Tingtur penampilan
  4. Dukungan bahasa Rusia
  5. Integrasi dengan program eksternal
  6. Secara singkat tentang (b)
  7. Kesimpulan


Mari kita definisikan terminologinya


Vim (selanjutnya disebut Vim) , seperti yang sudah diketahui banyak orang, adalah editor teks. Tentu saja, mengubah apa yang Anda tulis adalah tugas yang sangat penting, yang merupakan hambatan dalam produktivitas Anda, tetapi, sayangnya, tidak semua yang ada dalam kehidupan ini begitu sederhana, dan Anda (sebagai pengguna) sering membutuhkan fungsionalitas lain.


Lingkungan kerja adalah seperangkat program pengembangan perangkat lunak. Misalnya, mungkin berisi kompiler, konsol interaktif, editor untuk memposisikan elemen GUI, debugger, dan banyak lagi. Editor hanyalah sebagian kecil dari teka-teki ini.


IDE adalah seluruh tempat kerja di satu tempat. Tentu saja, ada program-program seperti Emacs (selanjutnya disebut Emax) , di mana Anda sendiri bebas untuk memasukkan semua yang Anda inginkan dengan keterampilan yang tepat, tetapi paling sering itu adalah paket siap pakai yang disusun untuk Anda.


" Mengapa saya perlu Wim kalau IDE melakukan segalanya untuk saya?"


Sebelumnya, tata letaknya adalah argumen yang kuat, karena bagi banyak orang itu lebih mudah daripada pintas keyboard multi-tombol seperti Emax untuk navigasi dan pengeditan teks. Namun, berkat Neovim dan proyek-proyek lain seperti VSCodeVim , ini benar-benar ada di mana-mana.


Namun, ada argumen lain yang lebih kuat - kinerja. IDE sering memiliki sejumlah besar fungsi yang tidak Anda gunakan, dan proses latar belakang yang memuat sistem dengan berat. Bahkan jika MacBook Anda tidak berteriak seperti pejuang dari PyCharm atau Anda tidak perlu menggulir di Visual Studio (yang tidak mungkin, Anda pembohong saya) , dan single-threading Emax tidak mengingatkan Anda pada Crysis atau STALKER pertama, pertanyaan tentang konsumsi energi masih muncul dan, sebagai hasilnya, masa pakai baterai. Perangkat lunak semacam itu dalam komunitas Linux dicirikan oleh istilah meme "bloat".



- Kenapa Wim?


Saya sudah memiliki artikel tentang semua pesona program ini. Namun, itu ditulis oleh seorang laki-laki di bawah kesan mainan baru dengan tingkat kecerdasan ganda (tebak mengapa) yang menghasilkan sejumlah kecil makna di dalamnya sehingga lubang hitam terbentuk di tempatnya. Yah, setidaknya gambar-gambar lucu itu sukses ...


Apa yang bisa saya katakan tentang dia sekarang, setelah satu tahun digunakan secara aktif?


  1. Dia sangat cepat. Karena sifat renderingnya, Wim memiliki latensi yang jauh lebih rendah daripada editor lainnya. Setelah itu, editor lain tampak tidak responsif, saya sudah diam tentang IDE yang disebutkan di atas.
  2. Penggunaannya mirip dengan bagian dari Jiwa Gelap ketiga setelah bagian pertama. Pada awalnya itu sulit dan tidak biasa, karena permainan menjadi lebih cepat, dan Anda tidak dapat membayangkan banyak momen sulit dengan bantuan komponen RPG, tetapi kemudian Anda menyadari bahwa permainan telah terbukti benar, dan hampir semua bos melakukan percobaan kedua.
  3. Ini praktis tidak menghabiskan sumber daya dan berjalan bahkan pada roti, yang sangat baik untuk baterai.

Pada prinsipnya, tidak ada yang buruk sebenarnya di editor lain, jadi serahkan pilihan ini pada kebijaksanaan pribadi Anda. Saya yakin Anda dapat menemukan artikel serupa untuk program favorit Anda. Meskipun, sejujurnya, editor pada elektron hampir tidak dapat melewati kriteria efisiensi energi.


Dalam artikel ini, kami akan membawa Wim ke kondisi yang dapat dicerna untuk pekerjaan serius, dan juga mengajari dia untuk berteman dengan beberapa program pengembangan pihak ketiga. Harap dicatat bahwa saya hanya akan berbicara tentang apa yang kebetulan saya temui secara pribadi, dan jika Anda memiliki saran yang menarik, selamat datang di komentar.



Masukkan lelucon tentang steker


Senjata utama untuk mengonfigurasi teman kita adalah plugin. Sebenarnya, ini hanya file terpisah dengan kode VimScript yang dieksekusi ketika Anda memuat file pengaturan Anda (~ / .vimrc atau ~ / .config / nvim / init.vim) dengan perintah source. Menggunakan pena untuk mengunduh semua ini cukup menyakitkan, jadi para pemikir besar datang dengan manajer paket ... untuk Wim!


Tugas utama manajer paket adalah mengunduh plugin yang ditentukan dari github, menyediakan antarmuka yang nyaman bagi pengguna untuk mengaturnya, dan, bahkan, menghubungkannya saat memuat Wim. Ada, tentu saja, manajer minimalis dari tipe Pathogen (yang hanya berurusan dengan yang ketiga) , tetapi kita tidak akan terlalu menyulitkan hidup kita.


Lingkungan kami hari ini akan menjadi vim-plug . Tetapi, sebelum Anda menginstalnya, pertama-tama Anda perlu menambahkan beberapa baris ke konfigurasi Anda:


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/id468265/


All Articles