GNU/Linux >> Znalost Linux >  >> Linux

Vanilla Vim je zábava

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.


Linux
  1. Průvodce textovým editorem ViM 101

  2. Syntax_highlight | Lpr?

  3. Vim Latex:Zakázat Quickfix?

  1. Nahradit Vi By Vim?

  2. Cowsay:Zábava v linuxovém terminálu

  3. Ubuntu 19.04:Konfigurace vim

  1. Centos 7:Konfigurace vim

  2. jak používat pylint ve vim

  3. Vyhodnoťte výrazy ve Vimu