GNU/Linux >> Belajar Linux >  >> Linux

Vanila Vim itu menyenangkan

Saat Anda memulai Vim dengan --clean pilihan, itu muncul dalam mode "vanilla". Tidak ada plugin, tidak ada konfigurasi, hanya kembali ke akar. Saya telah mengumpulkan banyak sekali pernyataan konfigurasi selama bertahun-tahun, beberapa di antaranya berasal dari MS-DOS atau Windows 3.1. Inilah kesepakatannya:Saya akan mulai dari awal untuk menemukan konfigurasi titik awal yang baik hanya dengan plugin yang tersedia di Fedora 35. Akankah saya bertahan selama satu minggu pengkodean? Saya akan mencari tahu!

Berikut adalah aturannya:Pernyataan konfigurasi minimum yang memungkinkan dan hanya plugin yang dikirimkan bersama Fedora 35+. Omong-omong, jika Anda bukan pengguna Fedora, lanjutkan membaca. Anda selalu dapat menginstal plugin ini dari manajer paket OS Anda secara manual atau menggunakan manajer plugin Vim.

Sebelum saya mulai, ada gajah di dalam ruangan:pertanyaan Vim atau Neovim (garpu Vim). Nah, ini terserah Anda. Segala sesuatu yang ada di artikel ini harus bekerja untuk keduanya. Namun, saya hanya menguji dengan Vim. Semua keterampilan akan berguna saat Anda masuk ke server di mana hanya vi tersedia. Ini bisa berupa sistem UNIX lama, server Linux dengan perangkat lunak minimum yang diinstal untuk keamanan yang lebih baik, shell interaktif dalam wadah, atau sistem tertanam di mana ruang sangat berharga.

Tanpa basa-basi lagi, inilah yang saya saring seminimal mungkin agar efektif dengan Vim untuk pengkodean:

# dnf install --allowerasing vim-default-editor \
        vim-enhanced \
        vim-ctrlp \
        vim-airline \
        vim-trailing-whitespace \
        vim-fugitive \
        vim-ale \
        ctags

Jangan khawatir tentang --allowerasing pilihan. Cukup tinjau transaksi pemasangan sebelum mengonfirmasi. Opsi ini ada untuk memberitahu manajer paket untuk mengganti paket yang ada nano-default-editor dengan vim-default-editor . Ini adalah paket kecil yang menjatuhkan file konfigurasi shell untuk mengatur variabel lingkungan EDITOR ke vim , dan ini harus dimiliki jika Anda ingin menggunakan Vim (misalnya, dengan git). Ini adalah hal yang spesial bagi Fedora. Anda tidak perlu melakukan ini pada distribusi atau OS lain—cukup pastikan variabel shell EDITOR Anda disetel dengan benar.

Lebih banyak sumber daya Linux

  • Lembar contekan perintah Linux
  • Lembar contekan perintah Linux tingkat lanjut
  • Kursus online gratis:Ikhtisar Teknis RHEL
  • Lembar contekan jaringan Linux
  • Lembar contekan SELinux
  • Lembar contekan perintah umum Linux
  • Apa itu container Linux?
  • Artikel Linux terbaru kami

Ringkasan

Ikhtisar singkat tentang apa yang saya anggap sebagai set plugin yang bagus dan bersih:

  • CtrlP :Plugin fuzzy-finder sekecil mungkin (skrip vim murni)
  • Buronan :Alat yang harus dimiliki untuk git
  • Trailing-whitespace :Menampilkan dan memperbaiki, yah, spasi kosong
  • Maskapai Penerbangan :Garis status yang ditingkatkan (skrip vim murni)
  • Ale :Menyoroti kesalahan ketik atau sintaks saat Anda mengetik
  • Ctag :Bukan plugin Vim tetapi alat yang sangat dibutuhkan

Ada plugin fuzzy-finder lain seperti command-t atau favorit saya (sangat cepat) fzf.vim . Masalahnya, fzf.vim tidak ada di Fedora, dan saya ingin konfigurasi sekecil mungkin. CtrlP akan baik-baik saja, dan jauh lebih mudah untuk dikonfigurasi karena tidak memerlukan apa pun.

Jika saya memilih konfigurasi minimum absolut, itu akan menjadi:

# cat ~/.vimrc
let mapleader=","
let maplocalleader="_"
filetype plugin indent on
let g:ctrlp_map = '<leader><leader>'
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
set exrc
set secure

Tapi itu mungkin terlalu ekstrim, jadi ini adalah konfigurasi yang sedikit lebih besar dengan penjelasan rinci saya di bawah ini:

" vim: nowrap sw=2 sts=2 ts=2 et:

" leaders
let mapleader=","
let maplocalleader="_"

" filetype and intent
filetype plugin indent on

" incompatible plugins
if has('syntax') && has('eval')
  packadd! matchit
end

" be SSD friendly (can be dangerous!)
"set directory=/tmp

" move backups away from projects
set backupdir=~/.vimbackup

" fuzzy searching
let g:ctrlp_map = '<leader><leader>'
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
nnoremap <leader>b :CtrlPBuffer<cr>
nnoremap <leader>t :CtrlPTag<cr>
nnoremap <leader>f :CtrlPBufTag<cr>
nnoremap <leader>q :CtrlPQuickfix<cr>
nnoremap <leader>m :CtrlPMRU<cr>

" buffers and quickfix
function! ToggleQuickFix()
  if empty(filter(getwininfo(), 'v:val.quickfix'))
    copen
  else
    cclose
  endif
endfunction
nnoremap <leader>w :call ToggleQuickFix()<cr>
nnoremap <leader>d :bd<cr>

" searching ang grepping
nnoremap <leader>g :copen<cr>:Ggrep!<SPACE>
nnoremap K :Ggrep "\b<C-R><C-W>\b"<cr>:cw<cr>
nnoremap <leader>s :set hlsearch! hlsearch?<cr>

" ctags generation
nnoremap <leader>c :!ctags -R .<cr><cr>

" per-project configs
set exrc
set secure

Menggunakan koma untuk kunci pemimpin

Saya suka kunci pemimpin saya dipetakan ke koma alih-alih garis miring terbalik default. Ini adalah kunci bebas terdekat di Vim ketika tangan Anda dalam posisi menulis. Selain itu, tombol ini sama di sebagian besar tata letak keyboard saat \ bervariasi per model atau tata letak. Saya jarang menggunakan pemimpin lokal tetapi garis bawah sepertinya cocok.

Bacaan lebih lanjut:

  • Lihat :help map-which-keys di Manual Referensi Vim
  • Lihat kunci yang tidak digunakan di Vim di Vim Tips Wiki

Tipe file dan sintaks nonaktif

Selanjutnya adalah filetype yang sangat penting memerintah. Lihat, Vim dilengkapi dengan "baterai disertakan," versi 8.2 berisi penyorotan sintaks untuk 644 bahasa, 251 definisi tipe file (ftplugins ), dan aturan indentasi untuk 138 bahasa. Namun, indentasi tidak diaktifkan secara default, mungkin untuk memberikan pengalaman pengeditan yang konsisten untuk semua. Saya suka mengaktifkannya.

Kiat cepat:Jika Anda mengedit file yang sangat besar dan Vim terasa lambat, Anda mungkin ingin menonaktifkan penyorotan sintaks untuk mempercepatnya. Cukup ketik :syn off perintah.

Bacaan lebih lanjut:

  • Lihat :help filetype di Manual Referensi Vim
  • Lihat :help syntax di Manual Referensi Vim
  • Lihat :help indent di Manual Referensi Vim

Plugin yang cocok

Vim bahkan hadir dengan beberapa plugin tambahan, yang membuat beberapa fitur tidak kompatibel, salah satunya cukup berguna. Ini adalah matchit plugin yang membuat % kunci menemukan orang tua yang cocok untuk bekerja dengan beberapa bahasa. Biasanya, Anda dapat menemukan awal atau akhir blok (awal dan akhir) atau tag pencocokan HTML dan sejenisnya.

Bacaan lebih lanjut:

  • Lihat :help matchit di Manual Referensi Vim

Tukar berkas

Salah satu dari banyak pengaturan yang ingin saya simpan dari konfigurasi lama saya adalah menggunakan /tmp untuk menukar dan membuat cadangan di direktori terpisah di rumah saya, yang perlu Anda buat dengan mkdir ~/.vimbackup . Penting untuk dipahami bahwa Vim membuat salinan yang disebut "file swap" saat Anda mulai mengedit, dan semua pekerjaan yang belum disimpan akan disimpan dalam file ini. Jadi, bahkan jika ada pemadaman listrik, swap Anda berisi sebagian besar pekerjaan yang belum disimpan. Saya lebih suka menggunakan tmpfs karena semua laptop dan server saya dilindungi dengan UPS, dan saya sering menabung. Juga, sebagian besar waktu, Anda menggunakan file swap ketika koneksi SSH Anda terputus daripada karena pemadaman listrik. File swap bisa sangat besar untuk file besar dan saya menghargai SSD saya, jadi saya membuat keputusan di sini. Jika Anda tidak yakin, hapus pernyataan ini untuk menggunakan /var/tmp , yang lebih aman.

Bacaan lebih lanjut:

  • Lihat :help swap-file di Manual Referensi Vim

Plugin pencari fuzzy

Sekarang, pencari fuzzy adalah plugin yang saya tidak bisa hidup tanpanya. Membuka file menggunakan perintah seperti :Ex atau :e atau :tabe tidak apa-apa di server ketika Anda perlu membuka 20 file sehari. Saat coding, saya biasanya perlu membuka ratusan. Seperti yang saya katakan, CtrlP melakukan pekerjaan dengan baik. Ini kecil, tanpa ketergantungan—Vim murni. Ini terbuka dengan Ctrl +P kombinasi, yang agak aneh bagi saya. Saya tahu bahwa beberapa editor terkenal menggunakannya (VSCode, saya pikir). Masalahnya, ini adalah ikatan kunci Vim penting yang tidak ingin saya timpa. Jadi pemenangnya bagi saya adalah pemimpin +pemimpin (tekan koma dua kali).

ctrlp_user_command hanya mengubah cara CtrlP mendapatkan daftar file. Alih-alih daftar file rekursif bawaan (glob), ia menggunakan git ls-files yang biasanya lebih baik karena mengabaikan hal-hal dari .gitignore , jadi hal-hal seperti node_modules atau direktori lain yang tidak relevan yang dapat memperlambat daftar tidak menghalangi.

Pemimpin +B /B /B /T /L untuk membuka daftar buffer, tag, tag dari file saat ini, buffer perbaikan cepat, dan file yang terakhir digunakan sangat berguna. Khususnya, setelah Anda membuat taglist dengan ctags , ini pada dasarnya adalah "Go To Definition" untuk ratusan bahasa pemrograman—tidak perlu plugin! Ini semua ada di dalam Vim. Sekarang untuk meluruskan, ketika saya mengetik pemimpin +B , itu berarti menekan koma lalu menekan B kunci, tidak bersama-sama seperti dengan Kontrol atau Shift .

Bacaan lebih lanjut:

  • Lihat :help Explore di Manual Referensi Vim
  • Lihat ctrlp.vim GitHub

Manajemen buffer

Meskipun Vim mendukung tab akhir-akhir ini, manajemen buffer adalah keterampilan penting untuk menguasai Vim. Saya biasanya berakhir dengan terlalu banyak buffer dan saya harus melakukan :bdelete terlalu sering. Nah, pemimpin +P sepertinya pilihan yang baik untuk melakukannya lebih cepat. Saya juga suka menutup jendela Quickfix, jadi ada leader +A kombinasi untuk itu juga. Saya sangat sering menggunakan ini saat menelusuri hasil pencarian.

Bacaan lebih lanjut:

  • Lihat :help buffer-hidden di Manual Referensi Vim

Ggrep dan plugin buronan

Berbicara tentang pencarian, sama pentingnya dengan membuka file. Saya ingin dapat memahami basis kode. Untuk itu, ada :Ggrep yang luar biasa perintah dari plugin buronan, yang menggunakan git grep, yang mengabaikan file sampah dan hanya mencari apa yang ada di git. Sejak Shift +K adalah kunci gratis di Vim, ini sangat cocok untuk secara otomatis menangkap istilah di bawah kursor. Dan akhirnya, bisa memasukkan pola pencarian arbitrer menggunakan leader +G juga bagus. Perhatikan ini membuka jendela yang disebut jendela Quickfix di mana Anda dapat menavigasi hasil, pergi ke kejadian berikutnya, sebelumnya, terakhir, pertama, dan banyak lagi. Jendela yang sama digunakan untuk keluaran dari kompilator atau alat lain, jadi biasakan dengannya. Saya sarankan membaca lebih lanjut dalam dokumentasi jika ini baru bagi Anda.

Bacaan lebih lanjut:

  • Lihat :help quickfix di Manual Referensi Vim
  • Lihat GitHub buronan vim

Mencari dan menangkap buronan

Omong-omong, mencari dengan / kuncinya cerdas dan sensitif, artinya jika semua karakter adalah huruf kecil, Vim mencari mengabaikan huruf besar-kecil. Secara default, ini menyoroti hasil, dan saya pikir saya mengetik :noh (giliran sorotan) sekitar satu juta kali. Itu sebabnya saya memiliki pemimpin +S untuk beralih ini. Saya sarankan membaca lebih lanjut tentang pencarian di manual nanti juga.

Pencarian dan pengambilan adalah yang berikutnya. Plugin buronan telah Anda liput. Gunakan perintah :Ggrep pattern untuk melakukan git grep, dan hasilnya akan masuk ke jendela Quickfix. Kemudian cukup navigasikan hasil menggunakan perintah perbaikan cepat (:cn , :cp , dan semacamnya) atau cukup gunakan :CtrlPQuickfix (atau pemimpin +T ) untuk menggulirnya secara visual. Yang menarik dari integrasi perbaikan cepat CtrlP adalah Anda dapat menelusuri hasil lebih lanjut dengan mengetik untuk mencocokkan nama file atau konten jika masuk akal—menelusuri hasil penelusuran.

Bacaan lebih lanjut:

  • Lihat :help grep di Manual Referensi Vim
  • Lihat :help noh di Manual Referensi Vim
  • Lihat GitHub buronan vim

Ctag

Pemimpin +C untuk menghasilkan ctags file untuk navigasi yang lebih baik berguna ketika berhadapan dengan basis kode baru atau melakukan sesi pengkodean yang lebih lama dengan banyak lompatan. Ctags mendukung ratusan bahasa, dan Vim dapat menggunakan semua pengetahuan ini untuk menavigasinya. Lebih lanjut tentang cara mengkonfigurasinya nanti. Catatan Saya sudah membahas pemimpin +B untuk membuka pencarian fuzzy untuk semua tag, ingat? Ini adalah hal yang sama.

Bacaan lebih lanjut:

  • Lihat :help ctags di Manual Referensi Vim
  • Lihat situs web Universal Ctags

Pemetaan kunci

Mampu mengganti pengaturan lain dalam proyek dengan membuat .vimrc file dalam direktori proyek adalah ide yang bagus. Letakkan saja di .gitignore (global) untuk memastikan Anda tidak perlu mengedit ribuan file abaikan git di setiap proyek. Proyek semacam itu .vimrc bisa seperti (untuk proyek C/C++ dengan GNU Makefile):

" coding style
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
" include and autocomplete path
let &path.="/usr/local/include"
" function keys to build and run the project
nnoremap <F9> :wall!<cr>:make!<cr><cr>
nnoremap <F10> :!LD_LIBRARY_PATH=/usr/local/lib ./project<cr><cr>

Seperti yang Anda lihat, saya biasanya memetakan F2 -F10 untuk mengkompilasi, menjalankan, menguji, dan tindakan serupa. Menggunakan F9 untuk memanggil make terdengar tentang benar. Ingat Borland IDE biru dari MS-DOS?

Seperti yang disebutkan sebelumnya, abaikan keduanya .vimrc dan tags (dihasilkan oleh ctags ) secara global sehingga tidak perlu memperbarui setiap .gitignore :

# git config --global core.excludesfile ~/.gitignore
# cat ~/.gitignore
/.vimrc
/tags
/TAGS

Beberapa pernyataan lagi dalam konfigurasi pribadi saya hanya relevan untuk mereka yang memiliki tata letak keyboard non-AS (saya di Ceko). Saya perlu menggunakan kunci mati untuk banyak karakter, dan itu tidak mungkin, dan saya lebih suka mengetikkan perintah daripada melakukan kombinasi yang sulit dijangkau itu. Berikut adalah solusi untuk masalah tersebut:

" CTRL-] is hard on my keyboard layout
map <C-K> <C-]>
" CTRL-^ is hard on my keyboard layout
nnoremap <F1> :b#<cr>
nnoremap <F2> :bp<cr>
nnoremap <F3> :bn<cr>
" I hate entering Ex mode by accident
map Q <Nop>

Bacaan lebih lanjut:

  • Lihat :help map di Manual Referensi Vim

Tombol fungsi semuanya gratis di Vim, kecuali F1 , yang pasti akan membantu. Saya tidak butuh bantuan, bukan berarti saya sudah tahu segalanya tentang Vim. Tidak semuanya. Tapi saya cukup mengetik :help jika diperlukan. Dan F1 adalah kunci penting, sangat dekat dengan Esc kunci. Saya suka menggunakan buffer swapping (:b# ) untuk itu dan F2 -F3 untuk selanjutnya/sebelumnya. Semakin banyak Anda bekerja dengan buffer, semakin Anda membutuhkan ini. Jika Anda belum pernah menggunakan Ctrl +^ , saya sarankan membiasakan diri. Oh, pernahkah kamu masuk ke mode Ex dengan tipe jelek :visual ? Banyak pemula tidak tahu bagaimana cara keluar dari Vim dari mode itu. Bagi saya, itu hanya mengganggu karena saya jarang menggunakannya.

Sekarang, membiasakan diri dengan ctags adalah hal utama untuk menjadi sukses dengan Vim. Alat ini mendukung ratusan bahasa dan dapat dengan mudah membuat tag untuk file yang tidak ingin Anda buat, oleh karena itu saya sarankan untuk mengabaikan direktori sampah biasa:

# cat ~/.ctags.d/local.ctags
--recurse=yes
--exclude=.git
--exclude=build/
--exclude=.svn
--exclude=vendor/*
--exclude=node_modules/*
--exclude=public/webpack/*
--exclude=db/*
--exclude=log/*
--exclude=test/*
--exclude=tests/*
--exclude=\*.min.\*
--exclude=\*.swp
--exclude=\*.bak
--exclude=\*.pyc
--exclude=\*.class
--exclude=\*.cache

Plugin maskapai

Saya tidak boleh melupakan plugin maskapai Vim. Dari dua di Fedora, yang satu ini ringan, tidak diperlukan ketergantungan eksternal, dan ini bekerja di luar kotak dengan semua font saya. Anda dapat menyesuaikannya, dan ada tema dan hal-hal semacam itu. Saya kebetulan menyukai pengaturan default.

Saya harus menyebutkan bahwa ada dua ctag utama proyek:Ctags Exuberant dan Ctags Universal. Yang terakhir adalah garpu yang lebih modern. Jika distribusi Anda memilikinya, gunakan itu. Jika Anda menggunakan Fedora 35+, Anda perlu tahu bahwa Anda sekarang menggunakan Universal Ctags.

Menutup

Saat saya membungkusnya, inilah yang saya sarankan. Cobalah untuk menjaga konfigurasi Vim Anda tetap rapi dan bersih. Itu akan terbayar di masa depan. Setelah saya beralih, saya harus mempelajari kembali perintah "tulis dan keluar" karena saya mengetiknya sebagai :Wq sengaja sepanjang waktu, dan saya memiliki "retas" dalam konfigurasi lama yang benar-benar melakukan apa yang saya maksud. Oke, yang ini mungkin benar-benar berguna dan berhasil—semoga Anda mengerti maksud saya:

:command Wq wq
:command WQ wq

Berikut adalah tip cepat terakhir:Anda mungkin perlu banyak mengubah konfigurasi Vim default Anda sambil menemukan sweet spot dari apa yang saya sajikan kepada Anda di sini dan selera Anda sendiri. Gunakan alias berikut, jadi Anda tidak perlu mencari riwayat setiap saat. Percayalah, saat pengguna Vim menelusuri riwayat "vim", tidak ada yang relevan:

alias vim-vimrc='vim ~/.vimrc'

Di sana Anda memilikinya. Mungkin ini dapat membantu Anda menavigasi melalui dunia Vim yang kaya tanpa banyak plugin. Vanila Vim menyenangkan!

Untuk mencoba apa yang baru saja Anda baca, instal paket dan periksa konfigurasi:

test -f ~/.vimrc && mv ~/.vimrc ~/.vimrc.backup
curl -s https://raw.githubusercontent.com/lzap/vim-lzap/master/.vimrc -o ~/.vimrc
mkdir ~/.vimbackup

Terima kasih khusus kepada Marc Deop dan Melanie Corr karena telah meninjau artikel ini.

Pembaruan: Saya selamat! Satu-satunya perjuangan yang saya miliki adalah urutan hasil yang berbeda dari plugin CtrlP. Algoritma fuzzy untuk file berbeda dari fzf.vim plugin, jadi file yang dulu saya temukan menggunakan berbagai istilah pencarian tidak berfungsi sekarang. Saya akhirnya menginstal paket fzf dari Fedora, yang dikirimkan dengan fungsi vim FZF yang dapat diikat ke kombinasi pemimpin untuk pencarian file yang lebih relevan. Lihat file konfigurasi yang diperbarui di repositori GitHub saya. Saya telah belajar banyak di sepanjang jalan. Ada keybinding yang sudah saya lupakan berkat banyak plugin.

Artikel ini awalnya muncul di situs web penulis dan diterbitkan ulang dengan izin.


Linux
  1. Panduan Editor Teks ViM 101

  2. Syntax_highlight | Lpr?

  3. Mengganti Vi Dengan Vim?

  1. Cowsay:Menyenangkan di terminal Linux

  2. Ubuntu 19.04 :Konfigurasikan vim

  3. Centos 7:Konfigurasikan vim

  1. Vim Latex:Nonaktifkan Quickfix?

  2. Tidak Dapat Menginstal Vim?

  3. cara menggunakan pylint di vim