Když spustíte Vim pomocí --clean
možnost, zobrazí se v režimu "vanilla". Žádné pluginy, žádná konfigurace, prostě návrat ke kořenům. Během let jsem shromáždil spoustu konfiguračních příkazů, z nichž některé pocházejí z MS-DOS nebo Windows 3.1. Tady je dohoda:Začnu od nuly, abych našel dobrou konfiguraci výchozího bodu pouze s pluginy dostupnými ve Fedoře 35. Přežiju týden kódování? Zjistím to!
Zde jsou pravidla:Minimální možné konfigurační příkazy a pouze pluginy dodávané s Fedorou 35+. Mimochodem, pokud nejste uživatelem Fedory, pokračujte ve čtení. Tyto pluginy můžete vždy nainstalovat z vašeho správce balíčků OS ručně nebo pomocí správce pluginů Vim.
Než začnu, v místnosti je slon:otázka Vim nebo Neovim (fork of Vim). No, to je na vás. Vše, co je v tomto článku, by mělo fungovat pro oba. Testoval jsem však pouze s Vim. Všechny dovednosti se vám budou hodit, když se přihlásíte na server, kde je pouze vi
je k dispozici. Může to být buď starý systém UNIX, linuxový server s minimem nainstalovaného softwaru pro lepší zabezpečení, interaktivní shell v kontejneru nebo vestavěný systém, kde je prostor drahý.
Bez dalších okolků, zde je to, co jsem destiloval na naprosté minimum, aby bylo efektivní s Vim pro kódování:
# dnf install --allowerasing vim-default-editor \
vim-enhanced \
vim-ctrlp \
vim-airline \
vim-trailing-whitespace \
vim-fugitive \
vim-ale \
ctags
Nedělejte si starosti s --allowerasing
volba. Před potvrzením pouze zkontrolujte instalační transakci. Tato možnost slouží správci balíčků, aby nahradil stávající balíček nano-default-editor
pomocí vim-default-editor
. Je to malý balíček, který odstraňuje konfigurační soubory shellu, aby nastavil proměnnou prostředí EDITOR na vim
, a to je nutnost, pokud chcete používat Vim (například s git). To je pro Fedoru speciální věc. V jiných distribucích nebo operačních systémech to nebudete muset dělat – jen se ujistěte, že vaše proměnná prostředí EDITOR je správně nastavena.
Další zdroje pro Linux
- Cheat pro příkazy Linuxu
- Cheat sheet pro pokročilé příkazy systému Linux
- Bezplatný online kurz:Technický přehled RHEL
- Síťový cheat pro Linux
- Cheat sheet SELinux
- Cheat pro běžné příkazy pro Linux
- Co jsou kontejnery systému Linux?
- Naše nejnovější články o Linuxu
Přehled
Rychlý přehled toho, co považuji za dobrou a čistou sadu pluginů:
- CtrlP :Nejmenší možný plugin fuzzy-finder (čistý vimscript)
- Uprchlík :Nezbytný nástroj pro git
- Mezera na konci :Zobrazuje a opravuje koncové mezery
- Letecká společnost :Vylepšený stavový řádek (čistý vimscript)
- Ale :Zvýrazňuje překlepy nebo syntaktické chyby během psaní
- Ctags :Není to plugin Vim, ale velmi potřebný nástroj
Existují další pluginy fuzzy-finder, jako je command-t nebo můj oblíbený (velmi rychlý) fzf.vim
. Jde o to, fzf.vim
není ve Fedoře a chci co nejmenší konfiguraci. CtrlP bude fungovat dobře a jeho konfigurace je mnohem jednodušší, protože nic nevyžaduje.
Pokud bych měl zvolit absolutní minimální konfiguraci, bylo by to:
# 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
Ale to je pravděpodobně příliš extrémní, takže zde je trochu větší konfigurace s mým podrobným vysvětlením níže:
" 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
Použití čárky pro klíč odkazu
Líbí se mi, když je můj klíč odkazu namapován na čárku místo výchozího zpětného lomítka. Je to nejbližší volný klíč ve Vimu, když máte ruce v pozici pro psaní. Tato klávesa je také stejná ve většině rozložení klávesnice při \
se liší podle modelu nebo rozvržení. Zřídka používám místního vůdce, ale podtržítko vypadá dobře.
Další čtení:
- Viz
:help map-which-keys
v referenční příručce Vim - Podívejte se na nepoužívané klíče ve Vimu na Vim Tips Wiki
Typ souboru a syntaxe vypnuty
Další na řadě je velmi důležitý filetype
příkaz. Podívejte se, Vim je dodáván s „bateriemi součástí“, verze 8.2 obsahuje zvýraznění syntaxe pro 644 jazyků, 251 definic typů souborů (ftplugins
) a pravidla odsazení pro 138 jazyků. Odsazení však není ve výchozím nastavení povoleno, možná proto, aby bylo zajištěno konzistentní úpravy pro všechny. Rád to povolím.
Rychlý tip:Pokud upravujete velmi velký soubor a Vim se vám zdá pomalý, možná budete chtít deaktivovat zvýraznění syntaxe, abyste věci urychlili. Stačí zadat :syn off
příkaz.
Další čtení:
- Viz
:help filetype
v referenční příručce Vim - Viz
:help syntax
v referenční příručce Vim - Viz
:help indent
v referenční příručce Vim
Plugin Matchit
Vim dokonce přichází s některými dalšími pluginy, díky kterým jsou některé funkce nekompatibilní, jeden z nich je docela užitečný. Je to matchit
plugin, který dělá %
klíč najít odpovídající závorky pro práci s některými jazyky. Obvykle můžete najít začátek nebo konec bloku (začátek a konec) nebo odpovídající značky HTML a podobně.
Další čtení:
- Viz
:help matchit
v referenční příručce Vim
Vyměnit soubor
Jedno z mnoha nastavení, které chci zachovat ze své staré konfigurace, je použití /tmp
pro swap a vytváření záloh v samostatném adresáři u mě doma, který musíte vytvořit pomocí mkdir ~/.vimbackup
. Je důležité pochopit, že Vim vytvoří kopii nazvanou „swap file“, když začnete upravovat, a veškerá neuložená práce se uloží do tohoto souboru. Takže i když dojde k výpadku proudu, váš swap obsahuje většinu neuložené práce. Preferuji používání tmpfs
protože všechny mé notebooky a servery jsou chráněny UPS a často šetřím. Většinou také používáte odkládací soubory, když se vaše připojení SSH ztratí, spíše než kvůli výpadku napájení. Odkládací soubory mohou být u velkých souborů poměrně velké a já si svého SSD vážím, takže se rozhoduji zde. Pokud si nejste jisti, odstraňte tento příkaz a použijte /var/tmp
, což je bezpečnější.
Další čtení:
- Viz
:help swap-file
v referenční příručce Vim
Plugin Fuzzy-finder
Nyní je fuzzy finder plugin, bez kterého nemohu žít. Otevírání souborů pomocí příkazů jako :Ex
nebo :e
nebo :tabe
je v pořádku na serveru, když potřebujete otevřít třeba 20 souborů denně. Při kódování jich většinou potřebuji otevřít stovky. Jak jsem řekl, CtrlP dělá svou práci dobře. Je malý, bez závislostí – čistý Vim. Otevírá se pomocí Ctrl +P kombinace, což je pro mě trochu zvláštní. Vím, že to používají někteří slavní redaktoři (myslím VSCode). Jde o to, že toto jsou již důležité klávesové zkratky Vim, které nechci přepsat. Takže vítěz je pro mě vedoucí +vedoucí (čárka stisknuta dvakrát).
ctrlp_user_command
jen změní způsob, jakým CtrlP získává seznam souborů. Místo vestavěného rekurzivního seznamu souborů (glob) používá git ls-files
což je obvykle lepší, protože ignoruje věci z .gitignore
, takže věci jako node_modules
nebo jiné irelevantní adresáře, které mohou zpomalit výpis, nejsou v cestě.
Vůdce +B /T /F /O /M je velmi užitečné otevřít seznam bufferů, tagů, tagů z aktuálního souboru, bufferu pro rychlou opravu a naposledy použitých souborů. Konkrétně, jakmile vygenerujete taglist
s ctags
, toto je v podstatě „Go To Definition“ pro stovky programovacích jazyků – nejsou potřeba žádné pluginy! To vše je integrováno ve Vimu. Abych to uvedl na pravou míru, když napíšu leader +B , to znamená stisknout čárku a potom stisknout B ne společně jako u Control nebo Shift .
Další čtení:
- Viz
:help Explore
v referenční příručce Vim - Podívejte se na ctrlp.vim GitHub
Správa vyrovnávací paměti
Ačkoli Vim dnes podporuje karty, správa vyrovnávací paměti je důležitou dovedností pro zvládnutí Vimu. Obvykle mám příliš mnoho vyrovnávacích pamětí a musím provést :bdelete
příliš často. No, vůdce +D vypadá jako dobrá volba, jak to udělat rychleji. Také rád zavírám okno Quickfix, takže je tu vedoucí +W kombinace k tomu taky. Toto používám velmi často při procházení výsledků vyhledávání.
Další čtení:
- Viz
:help buffer-hidden
v referenční příručce Vim
Ggrep a uprchlý plugin
Když už mluvíme o vyhledávání, je to stejně důležité jako otevírání souborů. Chci umět grep kódovou základnu. K tomu je tu úžasný :Ggrep
příkaz z fugitivního pluginu, který používá git grep, který ignoruje nevyžádané soubory a prohledává pouze to, co je v git. Od Shift +K je bezplatný klíč ve Vimu, skvěle se hodí pro automatické uchopení termínu pod kurzorem. A konečně možnost zadávat libovolné vzory vyhledávání pomocí leader +G je také pěkný. Všimněte si, že se tím otevře okno nazvané okno Quickfix, kde můžete procházet výsledky, přejít na další výskyt, předchozí, poslední, první a další. Stejné okno se používá pro výstup z kompilátorů nebo jiných nástrojů, takže se s ním seznamte. Pokud je to pro vás novinka, doporučuji další čtení v dokumentaci.
Další čtení:
- Viz
:help quickfix
v referenční příručce Vim - Podívejte se na GitHub uprchlý z vim
Hledání a tápání s uprchlíkem
Mimochodem, vyhledávání pomocí /
klíč je chytrý a citlivý, což znamená, že pokud jsou všechny znaky malými písmeny, Vim hledá bez ohledu na velká a malá písmena. Ve výchozím nastavení zvýrazňuje výsledky a myslím, že jsem zadal :noh
(otočení zvýraznění) asi milionkrát. Proto mám vedoucího +S toto přepnout. Doporučuji si přečíst více o vyhledávání v manuálu později.
Na řadě je hledání a tápání. Uprchlý plugin vás pokryje. Použijte příkaz :Ggrep pattern
proveďte git grep a výsledky se zobrazí v okně Quickfix. Poté jednoduše procházejte výsledky pomocí příkazů pro rychlou opravu (:cn
, :cp
, a podobně) nebo jednoduše použijte :CtrlPQuickfix
(nebo vedoucí +O ), abyste je mohli vizuálně posouvat. Na integraci rychlé opravy CtrlP je skvělé to, že můžete dále prohledávat výsledky zadáním odpovídajících názvů souborů nebo obsahu, pokud to dává smysl – prohledávat výsledky vyhledávání.
Další čtení:
- Viz
:help grep
v referenční příručce Vim - Viz
:help noh
v referenční příručce Vim - Podívejte se na GitHub uprchlý z vim
Ctags
Vůdce +C vygenerovat ctags
soubor pro lepší navigaci je užitečný při práci s novou kódovou základnou nebo při delší relaci kódování se spoustou skoků. Ctags podporuje stovky jazyků a Vim může všechny tyto znalosti využít k navigaci. Více o tom, jak jej nakonfigurovat později. Poznámka:O vůdci jsem již hovořil +T Chcete-li otevřít fuzzy vyhledávání pro všechny značky, pamatujete? Je to úplně to samé.
Další čtení:
- Viz
:help ctags
v referenční příručce Vim - Navštivte web Universal Ctags
Mapování klíčů
Možnost přepsat jakékoli jiné nastavení v projektech vytvořením .vimrc
soubor v adresáři projektu je dobrý nápad. Stačí jej vložit do (globálního) .gitignore
abyste zajistili, že nebudete muset upravovat tisíce ignorovaných souborů git v každém projektu. Takový projekt .vimrc
může být něco jako (pro projekt C/C++ s 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>
Jak můžete vidět, obvykle mapuji F2 -F10 klíče pro kompilaci, spuštění, testování a podobné akce. Pomocí F9 pro volání make
To zní dobře. Pamatujete si na modré Borland IDE z MS-DOS?
Jak již bylo zmíněno dříve, je dobré ignorovat oba .vimrc
a tags
(generováno pomocí ctags
) globálně, takže není potřeba aktualizovat každý .gitignore
:
# git config --global core.excludesfile ~/.gitignore
# cat ~/.gitignore
/.vimrc
/tags
/TAGS
Několik dalších příkazů v mé osobní konfiguraci je relevantních pouze pro ty, kteří mají rozložení klávesnice mimo USA (jsem na češtině). Potřebuji používat mrtvé klávesy pro mnoho postav a to prostě není možné a raději bych ten příkaz napsal místo těch těžko dostupných kombinací. Zde je řešení problému:
" 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>
Další čtení:
- Viz
:help map
v referenční příručce Vim
Všechny funkční klávesy jsou ve Vimu zdarma, kromě F1 , který je povinen pomoci. Nepotřebuji pomoc, ne že bych už o Vim věděl všechno. Vůbec ne. Ale mohu jednoduše napsat :help
V případě potřeby. A F1 je klíčová klávesa, tak blízko k Esc klíč. Rád používám swapování vyrovnávací paměti (:b#
) a F2 -F3 pro další/předchozí. Čím více budete pracovat s buffery, tím více to budete potřebovat. Pokud jste nepoužili Ctrl +^ , doporučuji si zvyknout. Oh, už jste někdy vstoupili do režimu Ex s ošklivým typem :visual
? Mnoho začátečníků nemělo ponětí, jak ukončit Vim z tohoto režimu. Pro mě je to znepokojující, protože to používám zřídka.
Nyní se seznamte s ctags
je klíčová věc k úspěchu s Vim. Tento nástroj podporuje stovky jazyků a dokáže snadno vytvořit tagy pro soubory, které vytvářet nechcete, proto doporučuji ignorovat typické nevyžádané adresáře:
# 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 letecké společnosti
Nesmím zapomenout na plugin letecké společnosti Vim. Ze dvou ve Fedoře je tento lehký, nejsou potřeba žádné externí závislosti a funguje hned po vybalení se všemi mými fonty. Můžete si to přizpůsobit a jsou tam témata a takové věci. Jen se mi líbí výchozí nastavení.
Musím zmínit, že existují dva hlavní ctag
projekty:Exuberant Ctags a Universal Ctags. Poslední jmenovaná je modernější vidlice. Pokud to vaše distribuce má, použijte to. Pokud používáte Fedoru 35+, musíte vědět, že nyní používáte Universal Ctags.
Sbalit
Když to zakončuji, zde je to, co navrhuji. Snažte se udržovat konfiguraci Vim úhlednou a čistou. V budoucnu se to vyplatí. Po přepnutí jsem se musel znovu naučit příkazy "write and quit", protože jsem to psal jako :Wq
náhodně pořád a ve staré konfiguraci jsem měl "hack", který ve skutečnosti dělal to, co jsem měl na mysli. Dobře, tohle by mohlo být skutečně užitečné a mohlo by to být užitečné – doufám, že chápete, co tím myslím:
:command Wq wq
:command WQ wq
Zde je poslední rychlý tip:Možná budete muset hodně změnit svou výchozí konfiguraci Vim a zároveň najít sladkou tečku toho, co jsem vám zde představil, a svůj vlastní vkus. Použijte následující alias, abyste nemuseli neustále prohledávat historii. Věřte mi, že když uživatel Vimu hledá v historii výraz „vim“, nic není relevantní:
alias vim-vimrc='vim ~/.vimrc'
Tady to máš. Možná vám to pomůže procházet bohatým světem Vim bez tuny pluginů. vanilka Vim je zábava!
Chcete-li vyzkoušet, co jste právě přečetli, nainstalujte balíčky a podívejte se na konfiguraci:
test -f ~/.vimrc && mv ~/.vimrc ~/.vimrc.backup
curl -s https://raw.githubusercontent.com/lzap/vim-lzap/master/.vimrc -o ~/.vimrc
mkdir ~/.vimbackup
Zvláštní poděkování patří Marcu Deopovi a Melanie Corr za recenzi tohoto článku.
Aktualizace: Přežil jsem! Jediný problém, který jsem měl, bylo odlišné pořadí výsledků z pluginu CtrlP. Fuzzy algoritmus pro soubory se liší od fzf.vim
plugin, takže soubory, které jsem dříve nacházel pomocí různých vyhledávacích výrazů, nyní nefungují. Nakonec jsem nainstaloval balíček fzf z Fedory, který je dodáván s funkcí vim FZF, kterou lze svázat s vedoucí kombinací pro relevantnější vyhledávání souborů. Podívejte se na aktualizovaný konfigurační soubor v mém úložišti GitHub. Cestou jsem se toho hodně naučil. Existují klávesové zkratky, na které jsem díky mnoha pluginům již zapomněl.
Tento článek se původně objevil na webu autora a je znovu publikován se svolením.