GNU/Linux >> Linux Esercitazione >  >> Linux

Vanilla Vim è divertente

Quando avvii Vim con --clean opzione, si presenta in modalità "vanilla". Nessun plugin, nessuna configurazione, solo ritorno alle origini. Ho raccolto un sacco di istruzioni di configurazione nel corso degli anni, alcune delle quali risalenti a MS-DOS o Windows 3.1. Ecco l'accordo:inizierò da zero per trovare una buona configurazione di partenza con i soli plugin disponibili in Fedora 35. Sopravviverò a una settimana di programmazione? Lo scoprirò!

Ecco le regole:dichiarazioni di configurazione minime possibili e solo plugin forniti con Fedora 35+. A proposito, se non sei un utente Fedora, continua a leggere. Puoi sempre installare questi plugin dal tuo gestore di pacchetti del sistema operativo manualmente o usando un gestore di plugin Vim.

Prima di iniziare, c'è l'elefante nella stanza:domanda Vim o Neovim (fork di Vim). Bene, questo dipende da te. Tutto ciò che è in questo articolo dovrebbe funzionare per entrambi. Tuttavia, ho provato solo con Vim. Tutte le abilità ti saranno utili quando accedi a un server in cui solo vi è disponibile. Può essere un vecchio sistema UNIX, un server Linux con un minimo di software installato per una migliore sicurezza, una shell interattiva in un container o un sistema embedded dove lo spazio è prezioso.

Senza ulteriori indugi, ecco cosa ho distillato al minimo indispensabile per essere efficace con Vim per la codifica:

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

Non preoccuparti del --allowerasing opzione. Basta rivedere la transazione di installazione prima di confermare. Questa opzione è lì per dire al gestore di pacchetti di sostituire il pacchetto esistente nano-default-editor con vim-default-editor . È un piccolo pacchetto che rilascia i file di configurazione della shell per impostare la variabile d'ambiente EDITOR su vim , e questo è un must se vuoi usare Vim (ad esempio, con git). Questa è una cosa speciale per Fedora. Non avrai bisogno di farlo su altre distribuzioni o sistemi operativi, assicurati solo che la tua variabile di shell EDITOR sia impostata correttamente.

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

Panoramica

Una rapida panoramica di quello che considero un set di plugin buono e pulito:

  • CTRLP :Il plug-in fuzzy-finder più piccolo possibile (puro vimscript)
  • Fuggitivo :Uno strumento indispensabile per git
  • Spazio bianco finale :mostra e corregge, beh, gli spazi bianchi finali
  • Compagnia aerea :Una linea di stato migliorata (puro vimscript)
  • Birra :evidenzia gli errori di battitura o di sintassi durante la digitazione
  • Ctag :Non un plugin Vim ma uno strumento molto necessario

Ci sono altri plugin di ricerca fuzzy come command-t o il mio preferito (molto veloce) fzf.vim . Il fatto è fzf.vim non è in Fedora e voglio la configurazione più piccola possibile. CtrlP andrà benissimo ed è molto più facile da configurare in quanto non richiede nulla.

Se dovessi scegliere una configurazione minima assoluta sarebbe:

# 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

Ma probabilmente è troppo estremo, quindi ecco una configurazione leggermente più grande con la mia spiegazione dettagliata di seguito:

" 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

Utilizzo di una virgola per la chiave direttrice

Mi piace che la mia chiave leader sia mappata su una virgola invece della barra rovesciata predefinita. È la chiave libera più vicina in Vim quando le tue mani sono in posizione di scrittura. Inoltre, questo tasto è lo stesso nella maggior parte dei layout di tastiera mentre è \ varia a seconda del modello o del layout. Uso raramente un leader locale, ma il trattino di sottolineatura sembra adatto.

Ulteriori letture:

  • Vedi :help map-which-keys nel Manuale di riferimento di Vim
  • Vedi le chiavi inutilizzate in Vim su Vim Tips Wiki

Tipo di file e sintassi disattivati

Il prossimo è l'importantissimo filetype comando. Vedi, Vim viene fornito con "batterie incluse", la versione 8.2 contiene l'evidenziazione della sintassi per 644 lingue, 251 definizioni di tipi di file (ftplugins ) e regole di rientro per 138 lingue. Tuttavia, il rientro non è abilitato per impostazione predefinita, forse per offrire un'esperienza di modifica coerente per tutti. Mi piace abilitarlo.

Un consiglio rapido:se stai modificando un file molto grande e Vim sembra lento, potresti voler disabilitare l'evidenziazione della sintassi per velocizzare le cose. Solo il tipo :syn off comando.

Ulteriori letture:

  • Vedi :help filetype nel Manuale di riferimento di Vim
  • Vedi :help syntax nel Manuale di riferimento di Vim
  • Vedi :help indent nel Manuale di riferimento di Vim

Plugin Matchit

Vim include anche alcuni plug-in extra, il che rende incompatibili alcune funzionalità, una di queste è piuttosto utile. È il matchit plug-in che rende % key find corrispondenti ai genitori per lavorare con alcune lingue. In genere, puoi trovare l'inizio o la fine di un blocco (inizio e fine) o tag corrispondenti HTML e simili.

Ulteriori letture:

  • Vedi :help matchit nel Manuale di riferimento di Vim

Scambia file

Una delle tante impostazioni che voglio mantenere dalla mia vecchia configurazione è usare /tmp per lo scambio e la creazione di backup in una directory separata nella mia home, che devi creare con mkdir ~/.vimbackup . È importante capire che Vim crea una copia chiamata "file di scambio" quando inizi a modificare e tutto il lavoro non salvato viene salvato in questo file. Quindi, anche se si verifica un'interruzione di corrente, lo scambio contiene la maggior parte del lavoro non salvato. Preferisco usare tmpfs poiché tutti i miei laptop e server sono protetti con UPS e risparmio spesso. Inoltre, la maggior parte delle volte, utilizzi i file di scambio quando la tua connessione SSH viene persa piuttosto che a causa di un'interruzione di corrente. I file di scambio possono essere piuttosto grandi per file di grandi dimensioni e apprezzo il mio SSD, quindi sto prendendo la decisione qui. Se non sei sicuro, rimuovi questa istruzione per utilizzare /var/tmp , che è più sicuro.

Ulteriori letture:

  • Vedi :help swap-file nel Manuale di riferimento di Vim

Plugin Fuzzy-finder

Ora, il cercatore fuzzy è un plugin di cui non posso fare a meno. Apertura di file utilizzando comandi come :Ex o :e o :tabe va bene su un server quando devi aprire circa 20 file al giorno. Durante la codifica, di solito ho bisogno di aprirne centinaia. Come ho detto, CtrlP fa bene il lavoro. È piccolo, senza dipendenze:puro Vim. Si apre con il Ctrl +P combinazione, il che è un po' strano per me. So che alcuni editori famosi lo usano (VSCode, credo). Il fatto è che queste sono già importanti associazioni di tasti Vim che non voglio sovrascrivere. Quindi il vincitore per me è il leader +leader (virgola premuta due volte).

Il ctrlp_user_command cambia solo il modo in cui CtrlP ottiene l'elenco dei file. Invece dell'elenco di file ricorsivo integrato (glob), utilizza git ls-files che di solito è meglio in quanto ignora le cose da .gitignore , quindi cose come node_modules o altre directory irrilevanti che possono rallentare l'elenco non sono d'intralcio.

Leader +B /T /F /D /M per aprire un elenco di buffer, tag, tag dal file corrente, buffer di correzione rapida e file utilizzati più di recente è molto utile. In particolare, una volta generato un taglist con ctags , questo è essenzialmente "Vai alla definizione" per centinaia di linguaggi di programmazione, non sono necessari plug-in! Questo è tutto integrato in Vim. Ora, per mettere le cose in chiaro, quando digito leader +B , significa premere una virgola e quindi premere B chiave, non insieme come con Control o Shift .

Ulteriori letture:

  • Vedi :help Explore nel Manuale di riferimento di Vim
  • Vedi ctrlp.vim GitHub

Gestione del buffer

Sebbene Vim supporti le schede in questi giorni, la gestione del buffer è un'abilità importante per padroneggiare Vim. Di solito finisco con troppi buffer e devo fare :bdelete troppo spesso. Bene, leader +D sembra una buona opzione per farlo più velocemente. Mi piace anche chiudere la finestra Quickfix, quindi c'è il leader +C combinazione anche per quello. Lo uso molto spesso durante la navigazione nei risultati di ricerca.

Ulteriori letture:

  • Vedi :help buffer-hidden nel Manuale di riferimento di Vim

Ggrep e il plugin fuggitivo

Parlando di ricerca, è importante quanto aprire i file. Voglio essere in grado di eseguire il grep della codebase. Per questo, c'è il fantastico :Ggrep comando dal plugin fuggitivo, che usa git grep, che ignora i file spazzatura e cerca solo ciò che è in git. Da Shift +K è una chiave gratuita in Vim, è perfetta per inserire automaticamente il termine sotto il cursore. E infine, essere in grado di inserire modelli di ricerca arbitrari utilizzando leader +V è anche bello. Nota che questo apre una finestra chiamata finestra Quickfix in cui puoi navigare tra i risultati, passare all'occorrenza successiva, precedente, ultima, prima e altro. La stessa finestra viene utilizzata per l'output di compilatori o altri strumenti, quindi acquisisci familiarità con essa. Suggerisco di leggere ulteriormente nella documentazione se questo è nuovo per te.

Ulteriori letture:

  • Vedi :help quickfix nel Manuale di riferimento di Vim
  • Guarda il vim-fuggitivo GitHub

Ricerca e grepping con il fuggitivo

A proposito, cerca con / la chiave è intelligente e sensibile, il che significa che se tutti i caratteri sono minuscoli, Vim cerca ignorando le maiuscole. Per impostazione predefinita, evidenzia i risultati e penso di aver digitato :noh (turno di evidenziazione) circa un milione di volte. Ecco perché ho un leader +S per attivare questo. Suggerisco di leggere di più sulla ricerca nel manuale anche in seguito.

La ricerca e il grepping sono i prossimi. Il plugin fuggitivo ti copre. Usa il comando :Ggrep pattern per eseguire un git grep e i risultati andranno nella finestra di correzione rapida. Quindi sfoglia semplicemente i risultati utilizzando i comandi di correzione rapida (:cn , :cp , e simili) o semplicemente usa :CtrlPQuickfix (o leader +D ) per scorrerli visivamente. La cosa interessante dell'integrazione della correzione rapida CtrlP è che puoi cercare ulteriormente i risultati digitando per abbinare i nomi dei file o il contenuto, se ha senso, cercando i risultati della ricerca.

Ulteriori letture:

  • Vedi :help grep nel Manuale di riferimento di Vim
  • Vedi :help noh nel Manuale di riferimento di Vim
  • Guarda il vim-fuggitivo GitHub

Ctag

Leader +C per generare un ctags file per una migliore navigazione è utile quando si ha a che fare con una nuova base di codice o si esegue una sessione di codifica più lunga con molti salti. Ctags supporta centinaia di lingue e Vim può usare tutta questa conoscenza per navigare. Maggiori informazioni su come configurarlo in seguito. Nota che ho già discusso di leader +T per aprire la ricerca fuzzy per tutti i tag, ricordi? È la stessa cosa.

Ulteriori letture:

  • Vedi :help ctags nel Manuale di riferimento di Vim
  • Vedi il sito web di Universal Ctags

Mappatura dei tasti

Essere in grado di sovrascrivere qualsiasi altra impostazione nei progetti creando un .vimrc file in una directory di progetto è una buona idea. Inseriscilo nel .gitignore (globale). per assicurarti di non dover modificare migliaia di file git ignore in ogni progetto. Un tale progetto .vimrc potrebbe essere qualcosa del tipo (per il progetto C/C++ con 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>

Come puoi vedere, in genere mappo F2 -F10 chiavi per compilare, eseguire, testare e azioni simili. Usando F9 per aver chiamato make suona bene. Ricordi l'IDE blu Borland di MS-DOS?

Come accennato in precedenza, è una buona idea ignorare entrambi .vimrc e tags (generato da ctags ) a livello globale, quindi non è necessario aggiornare ogni .gitignore :

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

Alcune altre affermazioni nella mia configurazione personale sono rilevanti solo per chi ha layout di tastiera non statunitensi (sono in ceco). Ho bisogno di usare chiavi morte per molti personaggi, e semplicemente non è possibile, e preferirei digitare il comando invece di fare quelle combinazioni difficili da raggiungere. Ecco una soluzione al problema:

" 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>

Ulteriori letture:

  • Vedi :help map nel Manuale di riferimento di Vim

I tasti funzione sono tutti gratuiti in Vim, tranne F1 , che è destinato ad aiutare. Non ho bisogno di aiuto, non che saprei già tutto di Vim. Affatto. Ma posso semplicemente digitare :help se necessario. E F1 è una chiave cruciale, così vicina all'Esc chiave. Mi piace usare lo scambio del buffer (:b# ) per quello e F2 -F3 per il prossimo/precedente. Più lavori con i buffer, più ne avrai bisogno. Se non hai usato Ctrl +^ , ti consiglio di abituarti. Oh, sei mai entrato in modalità Ex con il brutto tipo :visual ? Molti principianti non avevano idea di come uscire da Vim da quella modalità. Per me è solo inquietante perché lo uso raramente.

Ora, acquisiamo familiarità con ctags è una cosa fondamentale per avere successo con Vim. Questo strumento supporta centinaia di lingue e può facilmente creare tag per i file che non vuoi creare, quindi ti suggerisco di ignorare le tipiche directory spazzatura:

# 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 della compagnia aerea

Non devo dimenticare il plug-in della compagnia aerea Vim. Dei due in Fedora, questo è leggero, non sono necessarie dipendenze esterne e funziona immediatamente con tutti i miei caratteri. Puoi personalizzarlo e ci sono temi e cose del genere. Mi piace solo l'impostazione predefinita.

Devo dire che ci sono due ctag principali progetti:Exuberant Ctags e Universal Ctags. Quest'ultimo è un fork più moderno. Se la tua distribuzione ce l'ha, usa quello. Se sei su Fedora 35+, devi sapere che ora sei su Universal Ctags.

Concludi

Mentre lo concludo, ecco cosa suggerisco. Cerca di mantenere la tua configurazione Vim liscia e pulita. Pagherà in futuro. Dopo essere passato, ho dovuto imparare di nuovo i comandi "scrivi ed esci" perché lo stavo digitando come :Wq accidentalmente tutto il tempo, e ho avuto un "hack" nella vecchia configurazione che ha effettivamente fatto quello che intendevo. Ok, questo potrebbe essere davvero utile e fare il taglio, spero che tu capisca cosa intendo:

:command Wq wq
:command WQ wq

Ecco un ultimo suggerimento rapido:potresti dover cambiare molto la tua configurazione Vim predefinita mentre trovi il punto debole di ciò che ti ho presentato qui e il tuo gusto. Usa il seguente alias, quindi non devi cercare sempre la cronologia. Credimi, quando un utente Vim cerca nella cronologia "vim", nulla è rilevante:

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

Ecco qua. Forse questo può aiutarti a navigare nel ricco mondo di Vim senza un sacco di plugin. Vaniglia Vim è divertente!

Per provare ciò che hai appena letto, installa i pacchetti e controlla la configurazione:

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

Un ringraziamento speciale a Marc Deop e Melanie Corr per aver recensito questo articolo.

Aggiornamento: Sono sopravvissuto! L'unico problema che ho avuto è stato il diverso ordine dei risultati del plug-in CtrlP. L'algoritmo fuzzy per i file è diverso da fzf.vim plug-in, quindi i file che ho usato per trovare utilizzando vari termini di ricerca non funzionano ora. Ho finito per installare il pacchetto fzf da Fedora, che viene fornito con una funzione vim FZF che può essere associata alla combinazione leader per una ricerca di file più pertinente. Guarda il file di configurazione aggiornato nel mio repository GitHub. Ho imparato molto lungo la strada. Ci sono combinazioni di tasti che ho già dimenticato grazie a molti plugin.

Questo articolo è apparso originariamente sul sito web dell'autore ed è stato ripubblicato con autorizzazione.


Linux
  1. Editor di testo ViM 101 Guida

  2. Sintassi_evidenziazione | Lpr?

  3. Vim Latex:disabilitare Quickfix?

  4. Ubuntu 19.04:Configura vim

  5. Vim bloccato in modalità di inserimento

Come eliminare le righe in Vim / Vi

Come cercare in Vim/Vi

Nozioni di base sull'editor di Vim

Come usare Ansible per configurare Vim

Editor VIM

Abilita l'evidenziazione della sintassi in Vim