GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Vanilla Vim macht Spaß

Wenn Sie Vim mit --clean starten Option, es erscheint im "Vanille"-Modus. Keine Plugins, keine Konfiguration, einfach zurück zu den Wurzeln. Ich habe im Laufe der Jahre eine Menge Konfigurationsanweisungen gesammelt, von denen einige von MS-DOS oder Windows 3.1 stammen. Hier ist der Deal:Ich fange bei Null an, um eine gute Ausgangskonfiguration zu finden, nur mit den Plugins, die in Fedora 35 verfügbar sind. Werde ich eine Woche Programmieren überleben? Ich werde es herausfinden!

Hier sind die Regeln:Minimal mögliche Konfigurationsanweisungen und nur Plugins, die mit Fedora 35+ ausgeliefert werden. Übrigens, wenn Sie kein Fedora-Benutzer sind, lesen Sie weiter. Sie können diese Plugins jederzeit manuell von Ihrem OS-Paketmanager oder mit einem Vim-Plugin-Manager installieren.

Bevor ich anfange, gibt es den Elefanten im Raum:Vim oder Neovim (Fork of Vim) Frage. Nun, das liegt an Ihnen. Alles, was in diesem Artikel steht, sollte für beide funktionieren. Allerdings habe ich nur mit Vim getestet. Alle Fähigkeiten werden sich als nützlich erweisen, wenn Sie sich bei einem Server anmelden, auf dem nur vi ist verfügbar. Es kann sich entweder um ein altes UNIX-System, einen Linux-Server mit minimal installierter Software für mehr Sicherheit, eine interaktive Shell in einem Container oder ein eingebettetes System handeln, bei dem Platz knapp ist.

Ohne weitere Umschweife, hier ist, was ich auf das absolute Nötigste destilliert habe, um mit Vim beim Codieren effektiv zu sein:

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

Machen Sie sich keine Sorgen über das --allowerasing Möglichkeit. Überprüfen Sie einfach die Installationstransaktion, bevor Sie sie bestätigen. Diese Option ist dazu da, den Paketmanager anzuweisen, das vorhandene Paket nano-default-editor zu ersetzen mit vim-default-editor . Es ist ein kleines Paket, das Shell-Konfigurationsdateien ablegt, um die Umgebungsvariable EDITOR auf vim zu setzen , und dies ist ein Muss, wenn Sie Vim verwenden möchten (z. B. mit git). Das ist etwas Besonderes für Fedora. Bei anderen Distributionen oder Betriebssystemen müssen Sie dies nicht tun – stellen Sie einfach sicher, dass Ihre EDITOR-Shell-Variable richtig eingestellt ist.

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Übersicht

Ein kurzer Überblick darüber, was ich für ein gutes und sauberes Plugin-Set halte:

  • StrgP :Kleinstmögliches Fuzzy-Finder-Plugin (reines Vimscript)
  • Flüchtling :Ein unverzichtbares Tool für Git
  • Nachgestelltes Leerzeichen :Zeigt und behebt nachgestellte Leerzeichen
  • Fluggesellschaft :Eine verbesserte Statuszeile (reines Vimscript)
  • Ale :Tipp- oder Syntaxfehler werden während der Eingabe hervorgehoben
  • Ctags :Kein Vim-Plugin, aber ein dringend benötigtes Tool

Es gibt andere Fuzzy-Finder-Plug-ins wie command-t oder mein Favorit (sehr schnell) fzf.vim . Die Sache ist, fzf.vim ist nicht in Fedora, und ich möchte die kleinstmögliche Konfiguration. CtrlP wird gut funktionieren und es ist viel einfacher zu konfigurieren, da es nichts erfordert.

Wenn ich eine absolute Mindestkonfiguration wählen müsste, wäre es:

# 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

Aber das ist wahrscheinlich zu extrem, deshalb hier eine etwas größere Konfiguration mit meiner ausführlichen Erklärung unten:

" 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

Ein Komma für den Leader-Schlüssel verwenden

Ich mag es, wenn mein Leader-Schlüssel einem Komma anstelle des standardmäßigen umgekehrten Schrägstrichs zugeordnet ist. Es ist die nächste freie Taste in Vim, wenn sich Ihre Hände in Schreibposition befinden. Außerdem ist diese Taste in den meisten Tastaturlayouts dieselbe, während \ variiert je nach Modell oder Layout. Ich verwende selten einen lokalen Vorspann, aber der Unterstrich scheint gut zu passen.

Weiterführende Literatur:

  • Siehe :help map-which-keys im Vim-Referenzhandbuch
  • Siehe die unbenutzten Schlüssel in Vim im Vim Tips Wiki

Dateityp und Syntax aus

Als nächstes kommt der sehr wichtige filetype Befehl. Sehen Sie, Vim wird mit "Batterien enthalten" geliefert, Version 8.2 enthält Syntaxhervorhebung für 644 Sprachen, 251 Dateitypdefinitionen (ftplugins ) und Einrückungsregeln für 138 Sprachen. Der Einzug ist jedoch standardmäßig nicht aktiviert, vielleicht um allen ein einheitliches Bearbeitungserlebnis zu bieten. Ich aktiviere es gerne.

Ein kurzer Tipp:Wenn Sie eine sehr große Datei bearbeiten und sich Vim langsam anfühlt, möchten Sie vielleicht die Syntaxhervorhebung deaktivieren, um die Arbeit zu beschleunigen. Einfach den Typ :syn off Befehl.

Weiterführende Literatur:

  • Siehe :help filetype im Vim-Referenzhandbuch
  • Siehe :help syntax im Vim-Referenzhandbuch
  • Siehe :help indent im Vim-Referenzhandbuch

Matchit-Plugin

Vim wird sogar mit einigen zusätzlichen Plugins geliefert, die einige Funktionen inkompatibel machen, eines davon ist sehr nützlich. Es ist das matchit Plugin, das % macht key find matching parents, um mit einigen Sprachen zu arbeiten. Normalerweise finden Sie den Anfang oder das Ende eines Blocks (Beginn und Ende) oder HTML-Matching-Tags und ähnliches.

Weiterführende Literatur:

  • Siehe :help matchit im Vim-Referenzhandbuch

Auslagerungsdatei

Eine der vielen Einstellungen, die ich von meiner alten Konfiguration behalten möchte, ist die Verwendung von /tmp zum Auslagern und Erstellen von Backups in einem separaten Verzeichnis in meinem Zuhause, das Sie mit mkdir ~/.vimbackup erstellen müssen . Es ist wichtig zu verstehen, dass Vim eine Kopie namens "Auslagerungsdatei" erstellt, wenn Sie mit der Bearbeitung beginnen, und die gesamte nicht gespeicherte Arbeit in dieser Datei gespeichert wird. Selbst bei einem Stromausfall enthält Ihr Swap also den größten Teil der ungespeicherten Arbeit. Ich bevorzuge die Verwendung von tmpfs da alle meine Laptops und Server mit UPS geschützt sind und ich oft spare. Außerdem verwenden Sie die Auslagerungsdateien meistens, wenn Ihre SSH-Verbindung unterbrochen wird, und nicht aufgrund eines Stromausfalls. Auslagerungsdateien können für große Dateien ziemlich groß sein und ich schätze meine SSD, also treffe ich hier die Entscheidung. Wenn Sie sich nicht sicher sind, entfernen Sie diese Anweisung, um /var/tmp zu verwenden , was sicherer ist.

Weiterführende Literatur:

  • Siehe :help swap-file im Vim-Referenzhandbuch

Fuzzy-Finder-Plugin

Nun, der Fuzzy-Finder ist ein Plugin, ohne das ich nicht leben kann. Öffnen von Dateien mit Befehlen wie :Ex oder :e oder :tabe ist auf einem Server in Ordnung, wenn Sie etwa 20 Dateien pro Tag öffnen müssen. Beim Codieren muss ich normalerweise Hunderte von ihnen öffnen. Wie gesagt, CtrlP macht den Job gut. Es ist klein, ohne Abhängigkeiten – reines Vim. Es öffnet sich mit der Strg-Taste +P Kombination, die mir etwas komisch vorkommt. Ich weiß, dass einige berühmte Editoren es verwenden (VSCode, glaube ich). Die Sache ist, dass dies bereits wichtige Vim-Tastenbelegungen sind, die ich nicht überschreiben möchte. Der Gewinner ist für mich also Leader +Anführer (Komma zweimal gedrückt).

Der ctrlp_user_command ändert nur, wie CtrlP die Dateiliste erhält. Anstelle des eingebauten rekursiven Dateilisters (glob) verwendet es git ls-files was normalerweise besser ist, da es Dinge aus .gitignore ignoriert , also Dinge wie node_modules oder andere irrelevante Verzeichnisse, die die Auflistung verlangsamen können, stehen nicht im Weg.

Anführer +B /T /F /F /M Es ist sehr nützlich, eine Liste mit Puffern, Tags, Tags aus der aktuellen Datei, Quick-Fix-Puffer und zuletzt verwendeten Dateien zu öffnen. Genauer gesagt, nachdem Sie eine taglist erstellt haben mit ctags , dies ist im Wesentlichen "Go To Definition" für Hunderte von Programmiersprachen - keine Plugins erforderlich! Dies ist alles in Vim integriert. Um die Dinge jetzt klarzustellen, wenn ich Leader tippe +B , es bedeutet Komma drücken und dann B drücken Taste, nicht zusammen wie mit Control oder Umschalt .

Weiterführende Literatur:

  • Siehe :help Explore im Vim-Referenzhandbuch
  • Siehe ctrlp.vim GitHub

Pufferverwaltung

Obwohl Vim heutzutage Tabulatoren unterstützt, ist die Pufferverwaltung eine wichtige Fähigkeit, um Vim zu meistern. Am Ende habe ich normalerweise zu viele Puffer und ich muss :bdelete ausführen viel zu oft. Nun, Anführer +D scheint eine gute Option zu sein, um dies schneller zu tun. Ich schließe auch gerne das Quickfix-Fenster, damit da der Anführer ist +W Kombination dafür auch. Ich verwende dies sehr oft beim Durchsuchen von Suchergebnissen.

Weiterführende Literatur:

  • Siehe :help buffer-hidden im Vim-Referenzhandbuch

Ggrep und das flüchtige Plugin

Apropos Suchen, es ist genauso wichtig wie das Öffnen von Dateien. Ich möchte in der Lage sein, die Codebasis zu grep. Dafür gibt es das geniale :Ggrep Befehl aus dem flüchtigen Plugin, das git grep verwendet, das Junk-Dateien ignoriert und nur sucht, was in git ist. Seit Shift +K ein kostenloser Schlüssel in Vim ist, eignet er sich hervorragend, um den Begriff unter dem Cursor automatisch zu erfassen. Und schließlich die Möglichkeit, beliebige Suchmuster mit Leader einzugeben +G ist auch nett. Beachten Sie, dass dadurch ein Fenster namens Quickfix-Fenster geöffnet wird, in dem Sie durch die Ergebnisse navigieren, zum nächsten Vorkommen, vorherigen, letzten, ersten und mehr wechseln können. Dasselbe Fenster wird für die Ausgabe von Compilatoren oder anderen Tools verwendet, machen Sie sich also damit vertraut. Ich schlage vor, in der Dokumentation weiterzulesen, falls dies neu für Sie ist.

Weiterführende Literatur:

  • Siehe :help quickfix im Vim-Referenzhandbuch
  • Siehe vim-fugitive GitHub

Suchen und Greifen mit Flüchtling

Suche übrigens mit / key ist intelligent und sensibel, das heißt, wenn alle Zeichen in Kleinbuchstaben geschrieben sind, sucht Vim ohne Groß-/Kleinschreibung. Standardmäßig werden Ergebnisse hervorgehoben, und ich glaube, ich habe :noh eingegeben (Wechsel der Hervorhebung) etwa eine Million Mal. Deshalb habe ich Anführer +S um dies umzuschalten. Ich schlage vor, später auch mehr über die Suche im Handbuch zu lesen.

Als nächstes folgen Suchen und Greifen. Das Flüchtlings-Plugin hat Sie abgedeckt. Verwenden Sie den Befehl :Ggrep pattern um ein git grep zu machen, und die Ergebnisse gehen in das Quickfix-Fenster. Navigieren Sie dann einfach mit Schnellkorrekturbefehlen (:cn , :cp , usw.) oder verwenden Sie einfach :CtrlPQuickfix (oder Anführer +Q ), um sie visuell zu scrollen. Das Coole an der CtrlP-Quick-Fix-Integration ist, dass Sie die Ergebnisse weiter durchsuchen können, indem Sie passende Dateinamen oder Inhalte eingeben, wenn dies sinnvoll ist – Durchsuchen der Suchergebnisse.

Weiterführende Literatur:

  • Siehe :help grep im Vim-Referenzhandbuch
  • Siehe :help noh im Vim-Referenzhandbuch
  • Siehe vim-fugitive GitHub

Ctags

Anführer +C um einen ctags zu generieren Datei für eine bessere Navigation ist nützlich, wenn Sie sich mit einer neuen Codebasis befassen oder eine längere Codierungssitzung mit vielen Sprüngen durchführen. Ctags unterstützt Hunderte von Sprachen, und Vim kann all dieses Wissen nutzen, um darin zu navigieren. Mehr dazu später. Beachten Sie, dass ich bereits über Anführer gesprochen habe +T um die Fuzzy-Suche für alle Tags zu öffnen, erinnerst du dich? Es ist genau dasselbe.

Weiterführende Literatur:

  • Siehe :help ctags im Vim-Referenzhandbuch
  • Siehe die Universal Ctags-Website

Tastenzuordnung

In der Lage zu sein, jede andere Einstellung in Projekten zu überschreiben, indem eine .vimrc erstellt wird Datei in einem Projektverzeichnis ist eine gute Idee. Fügen Sie es einfach in die (globale) .gitignore ein um sicherzustellen, dass Sie nicht Tausende von Git-ignore-Dateien in jedem Projekt bearbeiten müssen. Ein solches Projekt .vimrc könnte etwa so aussehen (für C/C++-Projekte mit 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>

Wie Sie sehen können, ordne ich normalerweise F2 zu -F10 Tasten zum Kompilieren, Ausführen, Testen und ähnlichen Aktionen. Mit F9 für den Aufruf von make hört sich richtig an. Erinnern Sie sich an die blaue Borland-IDE von MS-DOS?

Wie bereits erwähnt, ist es eine gute Idee, beide .vimrc zu ignorieren und tags (erzeugt durch ctags ) global, sodass nicht jede .gitignore aktualisiert werden muss :

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

Ein paar weitere Aussagen in meiner persönlichen Konfiguration sind nur für diejenigen mit Nicht-US-Tastaturlayouts relevant (ich bin auf Tschechisch). Ich muss für viele Zeichen tote Tasten verwenden, und es ist einfach nicht möglich, und ich würde lieber den Befehl eingeben, anstatt diese schwer zu erreichenden Kombinationen auszuführen. Hier ist eine Lösung für das Problem:

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

Weiterführende Literatur:

  • Siehe :help map im Vim-Referenzhandbuch

Funktionstasten sind in Vim alle frei, außer F1 , was bestimmt hilft. Ich brauche keine Hilfe, nicht dass ich schon alles über Vim wüsste. Gar nicht. Aber ich kann einfach :help eingeben wenn benötigt. Und F1 ist eine entscheidende Taste, so nah am Esc Schlüssel. Ich verwende gerne Buffer Swapping (:b# ) dafür und F2 -F3 für nächste/vorherige. Je mehr Sie mit Puffern arbeiten, desto mehr werden Sie diese benötigen. Wenn Sie Strg nicht verwendet haben +^ , ich schlage vor, sich daran zu gewöhnen. Oh, sind Sie jemals mit dem hässlichen Typ :visual in den Ex-Modus gegangen? ? Viele Anfänger hatten keine Ahnung, wie man Vim aus diesem Modus beendet. Für mich ist es nur störend, da ich es selten benutze.

Machen Sie sich jetzt mit ctags vertraut ist eine Schlüsselsache, um mit Vim erfolgreich zu sein. Dieses Tool unterstützt Hunderte von Sprachen und kann problemlos Tags für Dateien erstellen, die Sie nicht erstellen möchten. Daher schlage ich vor, typische Junk-Verzeichnisse zu ignorieren:

# 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

Airline-Plugin

Ich darf das Airline-Plugin von Vim nicht vergessen. Von den beiden in Fedora ist diese leicht, es werden keine externen Abhängigkeiten benötigt und sie funktioniert sofort mit allen meinen Schriftarten. Sie können es anpassen, und es gibt Themen und solche Dinge. Ich mag einfach die Standardeinstellung.

Ich muss erwähnen, dass es zwei Haupt-ctag gibt Projekte:Exuberant Ctags und Universal Ctags. Letzteres ist eine modernere Gabel. Wenn Ihre Distribution es hat, verwenden Sie es. Wenn Sie Fedora 35+ verwenden, müssen Sie wissen, dass Sie jetzt Universal Ctags verwenden.

Abschluss

Da ich es zusammenfasse, ist hier, was ich vorschlage. Versuchen Sie, Ihre Vim-Konfiguration glatt und sauber zu halten. Es wird sich in Zukunft auszahlen. Nachdem ich gewechselt hatte, musste ich die Befehle „Schreiben und Beenden“ neu lernen, weil ich sie als :Wq eintippte versehentlich die ganze Zeit, und ich hatte einen "Hack" in der alten Konfiguration, der tatsächlich das tat, was ich meinte. Okay, dieser könnte wirklich nützlich sein und den Schnitt machen – ich hoffe, Sie verstehen, was ich meine:

:command Wq wq
:command WQ wq

Hier ist ein abschließender kurzer Tipp:Möglicherweise müssen Sie Ihre Standard-Vim-Konfiguration stark ändern, während Sie den optimalen Punkt für das, was ich Ihnen hier vorgestellt habe, und Ihren eigenen Geschmack finden. Verwenden Sie den folgenden Alias, damit Sie nicht ständig den Verlauf durchsuchen müssen. Vertrauen Sie mir, wenn ein Vim-Nutzer im Verlauf nach „vim“ sucht, ist nichts relevant:

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

Hier hast du es. Vielleicht kann Ihnen das helfen, ohne eine Menge Plugins durch die reichhaltige Welt von Vim zu navigieren. Vanille Vim macht Spaß!

Um auszuprobieren, was Sie gerade gelesen haben, installieren Sie die Pakete und überprüfen Sie die Konfiguration:

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

Besonderer Dank geht an Marc Deop und Melanie Corr für die Durchsicht dieses Artikels.


Aktualisierung: Ich habe überlebt! Der einzige Kampf, den ich hatte, war die unterschiedliche Reihenfolge der Ergebnisse des CtrlP-Plugins. Der Fuzzy-Algorithmus für Dateien unterscheidet sich von fzf.vim plugin, sodass Dateien, die ich früher mit verschiedenen Suchbegriffen gefunden habe, jetzt nicht mehr funktionieren. Am Ende habe ich das fzf-Paket von Fedora installiert, das mit einer vim-Funktion FZF ausgeliefert wird, die für eine relevantere Dateisuche an die Leader-Kombination gebunden werden kann. Sehen Sie sich die aktualisierte Konfigurationsdatei in meinem GitHub-Repository an. Dabei habe ich viel gelernt. Es gibt Tastenkombinationen, die ich dank vieler Plugins schon vergessen habe.


Dieser Artikel erschien ursprünglich auf der Website des Autors und wird mit Genehmigung erneut veröffentlicht.


Linux
  1. ViM Texteditor 101 Handbuch

  2. Syntax-Highlight | Lpr?

  3. Vim Latex:Quickfix deaktivieren?

  4. Kann Vim nicht installieren?

  5. Vi durch Vim ersetzen?

So löschen Sie Zeilen in Vim / Vi

So suchen Sie in Vim / Vi

Grundlagen des Vim-Editors

Wie man Ansible verwendet, um Vim zu konfigurieren

VIM-Editor

Aktivieren Sie die Syntaxhervorhebung in Vim