web-dev-qa-db-ger.com

Was sind die dunklen Ecken von Vim, von denen deine Mutter dir nie erzählt hat?

Es gibt eine Vielzahl von Fragen, in denen über gängige Tricks gesprochen wird, insbesondere " Vim + ctags tips and tricks ".

Ich beziehe mich jedoch nicht auf häufig verwendete Verknüpfungen, die ein Vim-Neuling cool finden würde. Ich spreche von einem erfahrenen Unix-Benutzer (Entwickler, Administrator usw.), der denkt, er weiß etwas, von dem 99% von uns noch nie etwas gehört oder geträumt haben. Etwas, das nicht nur ihre Arbeit erleichtert, sondern auch COOL und hackisch ist. Schließlich befindet sich Vim in dem Betriebssystem mit den meisten dunklen Ecken der Welt, daher sollte es Feinheiten aufweisen, die nur wenige Privilegierte kennen und mit uns teilen möchten.

783
Sasha

Könnte nicht einer sein, von dem 99% der Vim-Benutzer nichts wissen, aber ich verwende ihn täglich und das muss jeder Linux + Vim-Poweruser wissen.

Grundlegender Befehl, aber äußerst nützlich.

:w !Sudo tee %

Ich vergesse oft, Sudo zu verwenden, bevor ich eine Datei bearbeite, für die ich keine Schreibrechte habe. Wenn ich zum Speichern dieser Datei komme und einen Berechtigungsfehler erhalte, gebe ich einfach den Befehl vim aus, um die Datei zu speichern, ohne sie in einer temporären Datei speichern und dann erneut kopieren zu müssen.

Sie müssen offensichtlich auf einem System mit Sudo installiert sein und über Sudo-Rechte verfügen.

768
skinp

Etwas, das ich kürzlich entdeckt habe und das ich sehr cool fand:

:earlier 15m

Setzt das Dokument auf den Stand von vor 15 Minuten zurück. Kann verschiedene Argumente für die Zeitspanne annehmen, für die Sie ein Rollback durchführen möchten, und ist abhängig von Undolevels. Kann mit dem entgegengesetzten Befehl :later Rückgängig gemacht werden

604
Chad Birch

:! [command] führt einen externen Befehl aus, während Sie sich in Vim befinden.

Aber füge einen Punkt nach dem Doppelpunkt hinzu, :.! [command], und die Ausgabe des Befehls wird in Ihr aktuelles Fenster geschrieben. Das ist : . !

Zum Beispiel:

:.! ls

Ich verwende dies häufig, um beispielsweise das aktuelle Datum in ein Dokument einzufügen, das ich schreibe:

:.! date
402
Jeffrey Knight

Nicht gerade unklar, aber es gibt mehrere "Löschen in" -Befehle, die äußerst nützlich sind, wie z.

  • diw, um das aktuelle Wort zu löschen
  • di( zum Löschen innerhalb der aktuellen Parens
  • di", um den Text zwischen den Anführungszeichen zu löschen

Andere finden Sie auf :help text-objects

309
dbr

de Löschen Sie alles bis zum Ende des Wortes durch Drücken von. nach Herzenslust.

ci (xyz [Esc] - Dies ist ein seltsamer Wert. Hier bedeutet das 'i' nicht den Einfügemodus. Stattdessen bedeutet es in der Klammer. es funktioniert auch in eckigen und figuralen Klammern - mache einfach ci [oder ci {entsprechend. Natürlich kannst du di (wenn du nur den ganzen Text löschen willst, ohne etwas einzugeben) Sie können auch a anstelle von i ausführen, wenn Sie auch die Klammern und nicht nur den Text darin löschen möchten.

ci " - schneidet den Text in aktuelle Anführungszeichen

ciw - schneidet das aktuelle Wort ab. Dies funktioniert genauso wie das vorherige, außer dass ( wird durch w ersetzt.

C - Rest der Zeile abschneiden und in den Einfügemodus wechseln.

ZZ - Aktuelle Datei speichern und schließen (schneller als Strg-F4, um die aktuelle Registerkarte zu schließen!)

ddp - Verschiebt die aktuelle Zeile eine Zeile nach unten

xp - Verschiebt das aktuelle Zeichen um eine Position nach rechts

U - Großbuchstaben, also setzt viwU das Wort hoch

~ - wechselt zwischen Groß- und Kleinschreibung, also viw~ kehrt die Groß- und Kleinschreibung von Word um

Strg + u/Strg + d blättern Sie die Seite um einen halben Bildschirm nach oben oder unten. Dies scheint nützlicher zu sein als das übliche Paging im Vollbildmodus, da es einfacher ist, die Beziehung zwischen den beiden Bildschirmen zu erkennen. Für diejenigen, die immer noch den gesamten Bildschirm gleichzeitig scrollen möchten, gibt es Strg + f für Vorwärts und Strg + b für Rückwärts. Strg + Y und Strg + E rollen jeweils eine Zeile nach unten oder oben.

Verrückter, aber sehr nützlicher Befehl ist zz - Scrollt den Bildschirm, damit diese Zeile in der Mitte erscheint. Dies ist hervorragend geeignet, um den Code, an dem Sie arbeiten, in den Mittelpunkt Ihrer Aufmerksamkeit zu rücken. Geschwister-Befehle - zt und zb - machen diese Zeile zur obersten oder untersten auf dem Bildschirm, was nicht ganz so nützlich ist.

% findet die passende Klammer und springt dorthin.

de - vom Cursor bis zum Ende des Wortes löschen (Sie können auch dE tun, um bis zum nächsten Leerzeichen zu löschen)

bde - Löscht das aktuelle Wort von links nach rechts

df [Leerzeichen] - lösche bis einschließlich des nächsten Leerzeichens

dt. - bis zum nächsten Punkt löschen

dd - lösche diese ganze Zeile

ye (oder yE) - zieht den Text von hier bis zum Ende des Wortes

ce - schneidet das Ende des Wortes durch

bye - kopiert das aktuelle Wort (ich frage mich, was "hi" macht!)

yy - kopiert die aktuelle Zeile

cc - schneidet die aktuelle Zeile ab, Sie können stattdessen auch S ausführen. Es gibt auch eine untere Begrenzung s, die das aktuelle Zeichen schneidet und in den Einfügemodus wechselt.

viwy oder viwc. Ruckeln oder aktuelles Wort ändern. Drücken Sie mehrmals auf w, um jedes nachfolgende Wort auszuwählen, und verwenden Sie b, um rückwärts zu springen

vi { - wähle den gesamten Text in Klammern aus. va {- wähle den gesamten Text einschließlich {} s aus

vi (p - hebe alles in den () hervor und ersetze es durch den eingefügten Text

b und e bewegen den Cursor Wort für Wort, ähnlich wie es Strg + Pfeile normalerweise tun. Die Definition von Word ist jedoch etwas anders, da mehrere aufeinanderfolgende Delmiter als ein Wort behandelt werden. Wenn Sie in der Mitte eines Wortes beginnen, gelangen Sie durch Drücken von b immer zum Anfang des aktuellen Wortes, und jedes aufeinanderfolgende b springt zum Anfang des nächsten Wortes. Ähnlich und leicht zu merken, bringt e den Cursor an das Ende des aktuellen und jedes weiteren Wortes.

Ähnlich wie bei b/e, groß B und E bewegen Sie den Cursor Wort für Wort, wobei Sie nur Leerzeichen als Begrenzer verwenden. =

Großbuchstabe D (tief durchatmen) Löscht den Rest der Zeile rechts vom Cursor, genau wie bei Umschalt + Ende/Entf in normalen Editoren (beachten Sie stattdessen 2 Tastendrücke - Umschalt + D - von 3)

235
ultraman

Eine, die ich selten in den meisten Vim-Tutorials finde, die aber (zumindest für mich) UNGLAUBLICH nützlich ist, ist die

g; and g,

(vorwärts, rückwärts) durch die Änderungsliste bewegen.

Lassen Sie mich zeigen, wie ich es benutze. Manchmal muss ich einen Code oder eine Zeichenfolge kopieren und einfügen, z. B. einen hexadezimalen Farbcode in eine CSS-Datei, also suche ich, springe (egal wo die Übereinstimmung ist), kopiere sie und springe dann zurück (g;) zu wo Ich habe den Code bearbeitet, um ihn endlich einzufügen. Keine Notwendigkeit, Marken zu erstellen. Einfacher.

Nur meine 2 Cent.

199
:%!xxd

Mach aus vim einen Hex-Editor.

:%!xxd -r

Zurückkehren.

Warnung: Wenn Sie nicht mit Binär (-b) bearbeiten, können Sie die Datei beschädigen. - Josh Lee in den Kommentaren.

184
Bill Lynch
gv

Wählt die letzte visuelle Auswahl erneut aus.

125
AaronS

Manchmal wird eine Einstellung in Ihrem .vimrc durch ein Plugin oder einen automatischen Befehl überschrieben. Ein nützlicher Trick zum Debuggen ist die Verwendung des Befehls: verbose in Verbindung mit: set. Um zum Beispiel herauszufinden, wo cindent gesetzt/nicht gesetzt wurde:

:verbose set cindent?

Dies wird ungefähr so ​​aussehen:

cindent
    Last set from /usr/share/vim/vim71/indent/c.vim

Dies funktioniert auch mit Karten und Highlights. (Vielen Dank, joeytwiddle, für den Hinweis.) Zum Beispiel:

:verbose nmap U
n  U             <C-R>
        Last set from ~/.vimrc

:verbose highlight Normal
Normal         xxx guifg=#dddddd guibg=#111111 font=Inconsolata Medium 14
        Last set from ~/src/vim-holodark/colors/holodark.vim
118

:%TOhtml

Erstellt ein HTML-Rendering der aktuellen Datei.

98
N 1.1

Ich bin mir nicht sicher, ob dies überhaupt als düster gilt, aber ich habe es gerade erst gelernt ...

:g/match/y A

zieht (kopiert) alle Zeilen, die "match" enthalten, in das "a/@a registrieren. (Die Groß- und Kleinschreibung als A macht vim append yankings, anstatt den vorherigen Registerinhalt zu ersetzen.) Ich habe es in letzter Zeit häufig beim Erstellen von Internet Explorer-Stylesheets verwendet.

98
sjh

Möchten Sie sich Ihre: Befehlsgeschichte ansehen?

q:

Durchsuchen, bearbeiten und schließlich den Befehl ausführen.

Haben Sie jemals ähnliche Änderungen an zwei Dateien vorgenommen und zwischen diesen hin und her gewechselt? (Sagen wir, Quell- und Header-Dateien?)

:set hidden
:map <TAB> :e#<CR>

Wechseln Sie dann zwischen diesen Dateien hin und her.

90
MikeyB

Vim öffnet zum Beispiel eine URL

vim http://stackoverflow.com/

Schön, wenn Sie die Quelle einer Seite als Referenz aufrufen müssen.

79
Cercerilla

Makros können andere Makros aufrufen und sich selbst aufrufen.

z.B:

[email protected]@q

... löscht das erste Wort aus jeder Zeile bis zum Ende der Datei.

Dies ist ein recht einfaches Beispiel, aber es zeigt ein sehr mächtiges Merkmal von vim

68
spence91

Vorausgesetzt, Sie haben Perl und/oder Ruby Unterstützung kompiliert in, :rubydo und :perldo führt in jeder Zeile eines Bereichs einen Ruby oder Perl-Einzeiler aus (Standardeinstellung ist der gesamte Puffer), mit $_ gebunden an den Text der aktuellen Zeile (abzüglich der neuen Zeile). Manipulieren von $_ ändert den Text dieser Zeile.

Sie können dies verwenden, um bestimmte Dinge zu erledigen, die in einer Skriptsprache einfach zu erledigen sind, mit Vim-Builtins jedoch nicht so offensichtlich sind. So kehren Sie beispielsweise die Reihenfolge der Wörter in einer Zeile um:

:perldo $_ = join ' ', reverse split

So fügen Sie am Ende jeder Zeile eine zufällige Zeichenfolge mit 8 Zeichen (A – Z) ein:

:rubydo $_ += ' ' + (1..8).collect{('A'..'Z').to_a[Rand 26]}.join

Sie können nur jeweils eine Zeile bearbeiten und keine neuen Zeilen hinzufügen.

55
Brian Carper

^ O und ^ I

Gehe zu einer älteren/neueren Position. Wenn Sie sich durch die Datei bewegen (durch Suchen, Verschieben von Befehlen usw.), speichern Sie diese "Sprünge", damit Sie diese Sprünge rückwärts (^ O - O für alt) und vorwärts (^ I - direkt neben I auf der Tastatur wiederholen können ). Ich finde es sehr nützlich, wenn ich Code schreibe und viele Suchvorgänge durchführe.

gi

Gehen Sie zu der Position, an der der Einfügemodus zuletzt gestoppt wurde. Ich sehe mich oft dabei, etwas zu bearbeiten und dann nach etwas zu suchen. Um zum Bearbeitungsort zurückzukehren, drücken Sie gi.

gf

setzen Sie den Cursor auf den Dateinamen (z. B. Header-Datei), drücken Sie gf, und die Datei wird geöffnet

gF

ähnlich wie gf, erkennt jedoch das Format "[Dateiname]: [Zeilennummer]". Durch Drücken von gF wird [Dateiname] geöffnet und der Cursor auf [Zeilennummer] gesetzt.

^ P und ^ N

Text während der Bearbeitung automatisch vervollständigen (^ P - vorherige Übereinstimmung und ^ N nächste Übereinstimmung)

^ X ^ L

Während der Bearbeitung wird dieselbe Zeile bearbeitet (nützlich für die Programmierung). Sie schreiben Code und erinnern sich dann, dass Sie irgendwo in der Datei denselben Code haben. Drücken Sie einfach ^ X ^ L und die gesamte Zeile ist fertig

^ X ^ F

Vollständige Dateinamen. Sie schreiben "/ etc/pass" Hmm. Sie haben den Dateinamen vergessen. Drücken Sie einfach ^ X ^ F und der Dateiname ist fertig

^ Z oder: sh

Temporär in die Shell verschieben. Wenn Sie einen schnellen Schlag brauchen:

  • drücken Sie ^ Z (um vi in ​​den Hintergrund zu setzen), um zur ursprünglichen Shell zurückzukehren, und drücken Sie fg, um zu vim back zurückzukehren
  • drücken Sie: sh, um zur Sub-Shell zu gelangen, und drücken Sie ^ D/exit, um zu vi zurückzukehren
54
dimba

Dies ist ein netter Trick, um die aktuelle Datei mit einer anderen Codierung erneut zu öffnen:

:e ++enc=cp1250 %:p

Nützlich, wenn Sie mit älteren Codierungen arbeiten müssen. Die unterstützten Kodierungen sind in einer Tabelle unter encoding-values Aufgeführt (siehe helpencoding-values). Ähnliches funktioniert auch für ++ff, So dass Sie die Datei mit Windows/Unix-Zeilenende erneut öffnen können, wenn Sie zum ersten Mal einen Fehler machen (siehe helpff).

47
zoul
" insert range ip's
"
"          ( O O )
" =======oOO=(_)==OOo======

:for i in range(1,255) | .put='10.0.0.'.i | endfor
47
SergioAraujo

Wenn Sie == eingeben, wird der Einzug der aktuellen Zeile basierend auf der obigen Zeile korrigiert.

Tatsächlich können Sie ein = Vorzeichen gefolgt von einem beliebigen Bewegungsbefehl ausführen. = {Bewegung}

Beispielsweise können Sie die Bewegung% verwenden, die sich zwischen übereinstimmenden Klammern bewegt. Positionieren Sie den Cursor im folgenden Code auf {:

if (thisA == that) {
//not indented
if (some == other) {
x = y;
}
}

Und drücken Sie =%, um dies sofort zu erhalten:

if (thisA == that) {
    //not indented
    if (some == other) {
        x = y;
    }
}

Alternativ können Sie = a { innerhalb des Codeblocks ausführen, anstatt sich direkt auf dem {-Zeichen zu positionieren.

46
imap jj <esc>
41
Trumpi

Lassen Sie uns sehen, wie ein kleiner Editor IDE Spalten transponiert.

:%s/\(.*\)^I\(.*\)/\2^I\1/

Erläuterung

\( und \) ist wie man sich erinnert Sachen im Regex-Land. Und \1, \2 etc ist das Abrufen der gespeicherten Daten.

>>> \(.*\)^I\(.*\)

Merke dir alles gefolgt von ^I (tab) gefolgt von allem.

>>> \2^I\1

Ersetzen Sie das obige Material durch "2. Material, an das Sie sich erinnert haben", gefolgt von "1. Material, an das Sie sich erinnert haben" - im Wesentlichen durch eine Transponierung.

37
chaos

Nicht gerade ein dunkles Geheimnis, aber ich möchte die folgende Zuordnung in meine .vimrc-Datei einfügen, damit ich jederzeit auf "-" (Minus) klicken kann, um den Datei-Explorer zu öffnen und Dateien anzuzeigen neben der gerade bearbeiteten). Im Dateiexplorer kann ich ein anderes "-" drücken, um ein Verzeichnis nach oben zu verschieben, wodurch das nahtlose Durchsuchen komplexer Verzeichnisstrukturen ermöglicht wird (wie sie heutzutage von MVC-Frameworks verwendet werden):

map - :Explore<cr>

Diese können auch für jemanden nützlich sein. Ich scrolle gerne durch den Bildschirm und bewege den Cursor gleichzeitig weiter:

map <c-j> j<c-e>
map <c-k> k<c-y>

Registerkartennavigation - Ich liebe Registerkarten und ich muss mich leicht zwischen ihnen bewegen können:

map <c-l> :tabnext<enter>
map <c-h> :tabprevious<enter>

Nur unter Mac OS X: Safari-ähnliche Registerkartennavigation:

map <S-D-Right> :tabnext<cr>
map <S-D-Left> :tabprevious<cr>
30
KKovacs

Ich benutze gerne 'Sudo bash' und mein Sysadmin hasst das. Er hat 'Sudo' gesperrt, so dass es nur mit wenigen Befehlen (ls, chmod, chown, vi usw.) verwendet werden kann, aber ich konnte vim trotzdem verwenden, um eine Root-Shell zu erhalten:

bash$ Sudo vi +'silent !bash' +q
Password: ******
root#
27
too much php

Oft ändere ich gerne die aktuellen Verzeichnisse während der Bearbeitung - daher muss ich weniger Pfade angeben.

cd %:h
26
rampion

Ich benutze oft viele Fenster, wenn ich an einem Projekt arbeite, und manchmal muss ich die Größe ändern. Folgendes verwende ich:

map + <C-W>+
map - <C-W>-

Diese Zuordnungen ermöglichen das Vergrößern und Verkleinern des aktuellen Fensters. Es ist ganz einfach, aber es ist schnell.

24
Taurus Olson
:r! <command>

fügt die Ausgabe eines externen Befehls in den Puffer ein.

Mach ein bisschen Mathe und erhalte das Ergebnis direkt im Text:

:r! echo $((3 + 5 + 8))

Rufen Sie die Liste der zu kompilierenden Dateien ab, wenn Sie ein Makefile schreiben:

:r! ls *.c

Sehen Sie nicht nach, was Sie in Wikipedia gelesen haben, sondern fügen Sie es direkt in das Dokument ein, das Sie gerade schreiben:

:r! lynx -dump http://en.wikipedia.org/wiki/Whatever
22

Keine obskure Funktion, aber sehr nützlich und zeitsparend.

Wenn Sie eine Sitzung mit Ihren offenen Puffern, Registerkarten, Markierungen und anderen Einstellungen speichern möchten, können Sie Folgendes ausführen:

mksession session.vim

Sie können Ihre Sitzung eröffnen mit:

vim -S session.vim
22
mohi666

Ordnen Sie F5 zu, um schnell ROT13 für Ihren Puffer zu erhalten:

map <F5> ggg?G``

Du kannst es als Bossschlüssel benutzen :).

21
jqno

Ich habe diesen heute über NSFAQ gefunden:

Codeblöcke kommentieren.

Aktivieren Sie den blockweisen visuellen Modus, indem Sie STRG-V drücken.

Markieren Sie den Block, den Sie kommentieren möchten.

Drücken Sie I (Großbuchstabe I) und geben Sie Ihre Kommentarzeichenfolge am Anfang der Zeile ein. (// für C++)

Wenn Sie die ESC-Taste drücken, werden alle // ausgewählten Zeilen vor die Zeile gesetzt.

19
Grant Limberg

Ich benutze vim für fast jede Textbearbeitung, die ich mache, also benutze ich oft das Kopieren und Einfügen. Das Problem ist, dass vim standardmäßig importierten Text häufig durch Einfügen verzerrt. Der Weg, dies zu stoppen, ist zu verwenden

:set paste

vor dem Einfügen Ihrer Daten. Dies verhindert, dass es kaputt geht.

Beachten Sie, dass Sie :set nopaste, um die automatische Einrückung wiederherzustellen. Alternative Möglichkeiten zum Einfügen von vorformatiertem Text sind die Zwischenablage-Register (* und +), und :r!cat (Sie müssen das eingefügte Fragment mit ^ D beenden).

Manchmal ist es auch hilfreich, ein kontrastreiches Farbschema zu aktivieren. Dies kann mit erfolgen

:color blue

Mir ist aufgefallen, dass es nicht bei allen von mir verwendeten Versionen von vim funktioniert, aber bei den meisten.

17
Ian H

Hier ist etwas nicht offensichtlich. Wenn Ihr $ HOME viele benutzerdefinierte Plugins/Erweiterungen enthält und Sie manchmal von su/Sudo/... aus arbeiten müssen, kann dies hilfreich sein.

In Ihrem ~/.bashrc:

export VIMINIT=":so $HOME/.vimrc"

In Ihrer ~/.vimrc:

if $HOME=='/root'
        if $USER=='root'
                if isdirectory('/home/your_typical_username')
                        let rtuser = 'your_typical_username'
                elseif isdirectory('/home/your_other_username')
                        let rtuser = 'your_other_username'
                endif
        else
                let rtuser = $USER
        endif
        let &runtimepath = substitute(&runtimepath, $HOME, '/home/'.rtuser, 'g')
endif

Dadurch können Ihre lokalen Plugins geladen werden - unabhängig davon, wie Sie den Benutzer ändern.

Vielleicht möchten Sie auch die * .swp-Dateien aus Ihrem aktuellen Pfad in ~/vimtmp ziehen (dies geht in .vimrc):

if ! isdirectory(expand('~/vimtmp'))
   call mkdir(expand('~/vimtmp'))
endif
if isdirectory(expand('~/vimtmp'))
   set directory=~/vimtmp
else
   set directory=.,/var/tmp,/tmp
endif

Einige Zuordnungen, die ich verwende, um die Bearbeitung zu vereinfachen, bewirken, dass Strg + s wie Escape funktionieren und Strg + h/l die Registerkarten wechseln:

inoremap <C-s> <ESC>
vnoremap <C-s> <ESC>
noremap <C-l> gt
noremap <C-h> gT
11
viraptor

Strg-n im Einfügemodus vervollständigt automatisch das eingegebene Wort basierend auf allen Wörtern, die sich in offenen Puffern befinden. Wenn es mehr als eine Übereinstimmung gibt, erhalten Sie eine Liste möglicher Wörter, die Sie mit Strg-n und Strg-p durchlaufen können.

11
Niki Yoshiuchi
gg=G

Korrigiert den Einzug für die gesamte Datei. Ich habe mein vertrauenswürdiges <C-a><C-i> In Eclipse vermisst, aber ich habe gerade herausgefunden, dass vim gut damit umgeht.

10
daltonb

Möglichkeit, Vim auf einem Client/Server-basierten Modus auszuführen.

Angenommen, Sie arbeiten an einem Projekt mit vielen Puffern, Registerkarten und anderen Informationen, die in einer Sitzungsdatei namens session.vim gespeichert sind.

Sie können Ihre Sitzung öffnen und einen Server erstellen, indem Sie den folgenden Befehl eingeben:

vim --servername SAMPLESERVER -S session.vim

Beachten Sie, dass Sie normale Textdateien öffnen können, wenn Sie einen Server erstellen möchten, der nicht unbedingt eine Sitzung sein muss.

Angenommen, Sie befinden sich in einem anderen Terminal und müssen eine andere Datei öffnen. Wenn Sie es regelmäßig öffnen, indem Sie Folgendes ausführen:

vim new_file.txt

Ihre Datei wird in einem separaten Vim-Puffer geöffnet, was für Interaktionen mit den Dateien in Ihrer Sitzung schwierig ist. Verwenden Sie diesen Befehl, um new_file.txt in einem neuen Tab auf Ihrem Server zu öffnen:

vim --servername SAMPLESERVER --remote-tab-silent new_file.txt

Wenn kein Server ausgeführt wird, wird diese Datei wie eine normale Datei geöffnet.

Da es sehr mühsam ist, diese Flags jedes Mal bereitzustellen, wenn Sie sie ausführen möchten, können Sie einen separaten Alias ​​für die Erstellung von Client und Server erstellen.

Ich habe Folgendes in meine bashrc-Datei eingefügt:

alias vims='vim --servername SAMPLESERVER'
alias vimc='vim --servername SAMPLESERVER --remote-tab-silent'

Weitere Informationen hierzu finden Sie unter: http://vimdoc.sourceforge.net/htmldoc/remote.html

9
mohi666

Willst du eine IDE?

:make führt das Makefile im aktuellen Verzeichnis aus, parst die Compiler-Ausgabe, dann kannst du :cn und :cp, um die Compiler-Fehler zu durchlaufen, indem Sie jede Datei öffnen und nach der betreffenden Zeilennummer suchen.

:syntax on aktiviert die Syntaxhervorhebung von vim.

9
caskey

Ich möchte oft einen bestimmten Wort-/Funktionsnamen hervorheben, aber noch nicht zur nächsten Instanz suchen:

map m* *#
9
Scotty Allen

Variation von Sudo schreiben:

in .vimrc

cmap w!! w !Sudo tee % >/dev/null

Nach dem Neuladen von vim kannst du "Sudo speichern unter"

:w!!
9
jm666

HOWTO: Automatische Vervollständigung von Ctags bei Verwendung von Vim in Bash. Für alle anderen, die Vim und Ctags verwenden, habe ich eine kleine Auto-Completer-Funktion für Bash geschrieben. Fügen Sie Folgendes in Ihre ~/.bash_completion-Datei ein (erstellen Sie sie, falls sie nicht vorhanden ist):

Vielen Dank an stylishpants für seine zahlreichen Verbesserungen und Verbesserungen.

_vim_ctags() {
    local cur prev

    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"

    case "${prev}" in
        -t)
            # Avoid the complaint message when no tags file exists
            if [ ! -r ./tags ]
            then
                return
            fi

            # Escape slashes to avoid confusing awk
            cur=${cur////\\/}

            COMPREPLY=( $(compgen -W "`awk -vORS=" "  "/^${cur}/ { print \\$1 }" tags`" ) )
            ;;
        *)
            _filedir_xspec
            ;;
    esac
}

# Files matching this pattern are excluded
excludelist='*[email protected](o|O|so|SO|so.!(conf)|SO.!(CONF)|a|A|rpm|RPM|deb|DEB|gif|GIF|jp?(e)g|JP?(E)G|mp3|MP3|mp?(e)g|MP?(E)G|avi|AVI|asf|ASF|ogg|OGG|class|CLASS)'

complete -F _vim_ctags -f -X "${excludelist}" vi vim gvim rvim view rview rgvim rgview gview

Sobald Sie Ihre Bash-Sitzung neu starten (oder eine neue erstellen), können Sie Folgendes eingeben:

Code:

~$ vim -t MyC<tab key>

das Tag wird automatisch vervollständigt, so wie es auch für Dateien und Verzeichnisse geschieht:

Code:

MyClass MyClassFactory
~$ vim -t MyC

Ich finde es sehr nützlich, wenn ich mich auf eine schnelle Fehlerbehebung stürze.

8
michael

% eignet sich auch, wenn Sie Dateien auf zwei verschiedene Kopien eines Projekts verteilen möchten, ohne die kleinen Finger zu verlieren (vom Stammverzeichnis von project1):

:vert diffs /project2/root/%
7
Ben

: setlocal autoread

Automatisches Neuladen des aktuellen Puffers. Besonders nützlich beim Anzeigen von Protokolldateien. Er bietet fast die Funktionalität eines "Tail" -Programms unter Unix aus vim heraus.

Überprüfung auf Kompilierungsfehler aus vim heraus. setze die makeprg Variable abhängig von der Sprache, die wir für Perl sagen

: setlocal makeprg = Perl\-c \%

Für PHP

setze makeprg = php\-l \%
setze errorformat =% m\in \% f\on\line \% l

Das Ausgeben von ": make" führt das zugehörige makeprg aus und zeigt die Kompilierungsfehler/Warnungen im Quickfix-Fenster an und kann leicht zu den entsprechenden Zeilennummern navigieren.

7
Naga Kiran

Ich benutze Vim für alles. Wenn ich eine E-Mail-Nachricht bearbeite, verwende ich:

gqap (oder gwap)

umfangreiche, einfache und korrekte absatzweise Neuformatierung, auch mit Anführungszeichen. Um diese Funktionalität zu erreichen, füge ich hinzu:

-c 'set fo=tcrq' -c 'set tw=76'

auf den Befehl, den Editor extern aufzurufen. Ein bemerkenswerter Zusatz wäre, dem Parameter fo (formatoptions) 'a' hinzuzufügen. Dadurch wird der Absatz beim Eingeben und Navigieren im Inhalt automatisch neu formatiert, aber kann stören oder Probleme mit fehlerhaften oder ungewöhnlichen Formatierungen in der Nachricht verursachen.

7
Gary Chambers

Ich war mir sicher, dass dies schon jemand gepostet hätte, aber hier ist es.

Nehmen Sie ein beliebiges Build-System, das Sie möchten. machen, mvn, Ameise, was auch immer. Erstellen Sie im Stammverzeichnis des Projektverzeichnisses eine Datei mit den Befehlen, die Sie ständig verwenden:

mVN installieren
mvn sauber installieren
... und so weiter

Um einen Build zu erstellen, setzen Sie den Cursor auf die Zeile und geben Sie !! sh ein. Das heißt filtere diese Zeile; Schreiben Sie es in eine Shell und ersetzen Sie es durch die Ergebnisse.

Das Erstellungsprotokoll ersetzt die Zeile, bereit zum Scrollen, Suchen, was auch immer.

Wenn Sie mit dem Anzeigen des Protokolls fertig sind, geben Sie u ein, um den Vorgang rückgängig zu machen, und Sie kehren zu Ihrer Befehlsdatei zurück.

6
Brad Cox

Aufgrund der Latenz und des Mangels an Farben (Ich liebe Farbschemata :) Ich mag es nicht, auf entfernten Maschinen in PuTTY zu programmieren. Also habe ich diesen Trick entwickelt, um dieses Problem zu umgehen. Ich benutze es unter Windows.

Sie benötigen

  • 1x gVim
  • 1x rsync auf entfernten und lokalen Rechnern
  • 1x SSH-Authentifizierung mit privatem Schlüssel für den Remotecomputer, sodass Sie das Kennwort nicht eingeben müssen
  • 1x Festzug
  • 1x PuTTY

Remote-Computer einrichten

Konfigurieren Sie rsync so, dass auf Ihr Arbeitsverzeichnis zugegriffen werden kann. Ich verwende einen SSH-Tunnel und erlaube nur Verbindungen vom Tunnel aus:

address = 127.0.0.1
hosts allow = 127.0.0.1
port = 40000
use chroot = false
[bledge_ce]
    path = /home/xplasil/divine/bledge_ce
    read only = false

Starten Sie dann rsyncd: rsync --daemon --config = rsyncd.conf

Lokale Maschine einrichten

Installieren Sie rsync von Cygwin. Starten Sie Pageant und laden Sie Ihren privaten Schlüssel für den Remote-Computer. Wenn Sie SSH-Tunelling verwenden, starten Sie PuTTY, um den Tunnel zu erstellen. Erstellen Sie eine Batch-Datei Push.bat in Ihrem Arbeitsverzeichnis, die geänderte Dateien mit rsync auf den Remote-Computer hochlädt:

rsync --blocking-io *.cc *.h SConstruct rsync://localhost:40001/bledge_ce

SConstruct ist eine Build-Datei für Scons. Passen Sie die Liste der Dateien an Ihre Bedürfnisse an. Ersetzen Sie localhost durch den Namen des Remotecomputers, wenn Sie kein SSH-Tunelling verwenden.

Konfigurieren von Vim Das ist jetzt einfach. Wir werden die Quickfix-Funktion (: make and error list) verwenden, die Kompilierung wird jedoch auf dem Remote-Computer ausgeführt. Also müssen wir makeprg setzen:

set makeprg=Push\ &&\ plink\ -batch\ [email protected]\ \"cd\ /home/xplasil/divine/bledge_ce\ &&\ scons\ -j\ 2\"

Dies startet zuerst die Push.bat-Task, um die Dateien hochzuladen und führt dann die Befehle auf dem Remote-Computer mithilfe von SSH ( Plink aus der PuTTY-Suite) aus. Der Befehl wechselt zuerst in das Arbeitsverzeichnis und startet dann den Build (ich verwende scons).

Die Ergebnisse des Builds werden in Ihrer lokalen gVim-Fehlerliste angezeigt.

6
Roman Plášil

Geben Sie ein Zeichen aus dem Hexadezimalwert ein (Einfügemodus):

<C-Q>x[type the hexadecimal byte]
6
Luper Rouch

Fügen Sie dies in Ihre .vimrc ein, um einen Befehl zum Pretty-Print-XML zu erhalten:

function FormatXml()
    %s:\(\S\)\(<[^/]\)\|\(>\)\(</\):\1\3\r\2\4:g
    set filetype=xml
    normal gg=G
endfunction

command FormatXml :call FormatXml()
6
Trumpi
 =========================================== ============ 
 Im normalen Modus 
 ======================= ================================= 
 gf .......... ...... Datei unter dem Cursor im selben Fenster öffnen -> siehe: h Pfad 
 Strg-w f .......... Datei unter dem Cursor im neuen Fenster öffnen 
 Strg-w q .......... Aktuelles Fenster schließen 
 Strg-w 6 .......... Alternative Datei öffnen -> siehe: h # 
 gi ................ Init-Einfügemodus in der letzten Einfügeposition 
 '0 ................ platzieren der Cursor dort, wo er sich befand, als die Datei zuletzt bearbeitet wurde 
6
SergioAraujo

set colorcolumn=+1 oder set cc=+1 für vim 7.3

5
quabug

Wenn ich an einem Projekt arbeite, bei dem der Erstellungsprozess langsam ist, erstelle ich immer im Hintergrund und leite die Ausgabe an eine Datei namens errors.err (so etwas wie make debug 2>&1 | tee errors.err). Dadurch kann ich den Quellcode während des Erstellungsprozesses weiter bearbeiten oder überprüfen. Wenn es fertig ist (mit pynotify in GTK, um mir mitzuteilen, dass es vollständig ist), kann ich das Ergebnis in vim mit quickfix anzeigen. Beginnen Sie mit: cf [ile], das die Fehlerdatei liest und zum ersten Fehler springt. Ich persönlich verwende gerne cwindow, um das Build-Ergebnis in einem separaten Fenster zu erhalten.

4
Anders Holmberg

:sp %:h - Verzeichnisliste/Dateiauswahl unter Verwendung des aktuellen Dateiverzeichnisses

(Gehört als Kommentar unter Rampion's cd Tipp, aber ich habe noch keine Rechte zum Kommentieren)

4
searlea

Kurz vor dem Kopieren und Einfügen in Stackoverflow:

:retab 1
:% s/^I/ /g
:% s/^/    /

Kopieren Sie nun den Code und fügen Sie ihn ein.

Wie in den Kommentaren gefordert:

retab 1. Dadurch wird die Größe der Registerkarte auf eins festgelegt. Es geht aber auch den Code durch und fügt zusätzliche Tabulatoren und Leerzeichen hinzu, so dass die Formatierung keinen der tatsächlichen Texte verschiebt (dh der Text sieht nach ratab gleich aus).

% s/^ I// g: Beachten Sie, dass ^ I das Ergebnis eines Tabulatortreffers ist. Dadurch werden alle Registerkarten gesucht und durch ein einzelnes Leerzeichen ersetzt. Da wir gerade ein Retab gemacht haben, sollte sich die Formatierung nicht ändern, aber da das Einfügen von Tabs in eine Website ein Hit und ein Miss ist, ist es gut, sie zu entfernen.

% s/^//: Ersetzen Sie den Zeilenanfang durch vier Leerzeichen. Da Sie den Zeilenanfang eigentlich nicht durch etwas ersetzen können, werden am Zeilenanfang vier Leerzeichen eingefügt (dies wird von SO Formatierung benötigt, um den Code hervorzuheben).

4
Martin York

Einige nützliche:

:set nu # displays lines
:44     # go to line 44
'.      # go to last modification line

Mein Lieblings: Ctrl + n Wortvollendung!

4
dfens
In Insert mode 
<C-A>   - Increments the number under cursor 
<C-X>   - Decrements the number under cursor

Es ist sehr nützlich, wenn wir in vim fortlaufende Nummern erzeugen wollen
Sagen wir, ob wir die Zeilen 1-10 mit den Nummern 1 bis 10 einfügen möchten [wie "1" in der 1. Zeile, "2" in der 2. Zeile.]
füge "0" in die erste Zeile ein und kopiere die Zeile und die letzten 9 Male, so dass alle Zeilen "0" anzeigen.

Führen Sie den folgenden Ex-Befehl aus

:g/^/exe "norm " . line(".") . "\<C-A>"
3
Naga Kiran

Um vim ein bisschen mehr wie einen IDE Editor zu machen:

  • setze nu - für Zeilennummern am linken Rand.
  • set cul - hebt die Zeile mit dem Cursor hervor.
3
mpe

Ich liebe: ls Befehl.

3
PuzzleCracker

kartenmakros

Ich finde es ziemlich oft nützlich, einige Tastenzuordnungen direkt zu definieren, so wie man ein Makro definieren würde. Der Clou dabei ist, dass das Mapping rekursiv ist und solange ausgeführt wird, bis es fehlschlägt.

Beispiel:

enum ProcStats
{
        ps_pid,
        ps_comm,
        ps_state,
        ps_ppid,
        ps_pgrp,
:map X /ps_<CR>3xixy<Esc>X

Gibt:

enum ProcStats
{
        xypid,
        xycomm,
        xystate,
        xyppid,
        xypgrp,

Nur ein dummes Beispiel :).

Ich bin mir all der Nachteile voll und ganz bewusst - es kommt einfach so vor, dass ich es bei manchen Gelegenheiten ziemlich nützlich fand. Auch kann es interessant sein, es bei der Arbeit zu beobachten;).

3

Im Einfügemodus ctrl+xctrl+p Vervollständigt (mit einem Menü mit möglichen Vervollständigungen, wenn es Ihnen gefällt) den aktuellen langen Bezeichner, den Sie eingeben.

if (SomeCall(LONG_ID_ <-- type c-x c-p here
            [LONG_ID_I_CANT_POSSIBLY_REMEMBER]
             LONG_ID_BUT_I_NEW_IT_WASNT_THIS_ONE
             LONG_ID_GOSH_FORGOT_THIS
             LONG_ID_ETC
             ∶
3
bobbogo

Wiederverwendung

Bewegungen zum Mischen mit anderen Befehlen, mehr hier .

tx
fx
Fx

Verwenden Sie Ihre Lieblingswerkzeuge in Vim.

:r !python anything you want or awk or Y something

Wiederholen Sie diesen Vorgang im visuellen Modus, der in Kombination mit den obigen Tipps leistungsstark ist.

;
3
hhh

Alles ersetzen

  :%s/oldtext/newtext/igc

Gib ein, um alle zu ersetzen :)

2
AIB

Um einen Text von Vim in Ihre Zwischenablage zu kopieren, damit er von einer anderen Anwendung verwendet werden kann, wählen Sie den Text aus, den Sie im visuellen Modus kopieren möchten, und drücken Sie dann "+ y. Auf diese Weise können Sie Ihren Text problemlos in andere Anwendungen einfügen.

Dies ist besonders nützlich, wenn Sie das Fenster vertikal geteilt haben und etwas aus dem rechten Fenster kopieren möchten. Die Verwendung von set mouse = r hilft Ihnen in dieser Situation nicht weiter, da auch im linken Fenster alles ausgewählt wird.

Beachten Sie, dass Ihr vim mit xterm-Unterstützung kompiliert werden muss.

2
mohi666

Diese habe ich im Laufe der Jahre gesammelt.

" Pasting in normal mode should append to the right of cursor
nmap <C-V>      a<C-V><ESC>
" Saving
imap <C-S>      <C-o>:up<CR>
nmap <C-S>      :up<CR>
" Insert mode control delete
imap <C-Backspace> <C-W>
imap <C-Delete> <C-O>dw
nmap    <Leader>o       o<ESC>k
nmap    <Leader>O       O<ESC>j
" tired of my typo
nmap :W     :w
2
Yada

Verwenden Sie die rechte Maustaste, um den Einfügemodus in gVim mit den folgenden Einstellungen in ~/.gvimrc umzuschalten:

"
"------------------------------------------------------------------
" toggle insert mode <--> 'normal mode with the <RightMouse>-key
"------------------------------------------------------------------
nnoremap  <RightMouse> <Insert>
inoremap  <RightMouse> <ESC>
"
2
Fritz G. Mehner

Erstellen Sie eine Funktion zum Ausführen des aktuellen Puffers mit Shebang (vorausgesetzt, einer ist gesetzt) ​​und rufen Sie sie mit crtl-x auf.

map <C-X> :call CallInterpreter()<CR>

au BufEnter *
\ if match (getline(1) , '^\#!') == 0 |
\   execute("let b:interpreter = getline(1)[2:]") |
\ endif

fun! CallInterpreter()
    if exists("b:interpreter")
        exec("! ".b:interpreter." %")
    endif
endfun
2
jonyamo

Versuchen Sie es mit perltidy zum Formatieren mit = Befehl im normalen Modus

:set equalprg=perltidy
2
c9s

Keine der folgenden Aussagen ist wirklich hartnäckig, aber ich finde es äußerst nützlich.

Trivialbindungen, aber ohne kann ich einfach nicht leben. Im Einfügemodus (mit der Strg-Taste) wird die Bewegung im Stil eines HJKL aktiviert. Im normalen Modus: Strg-k/j scrollt einen halben Bildschirm nach oben/unten und Strg-l/h geht zum nächsten/vorherigen Puffer. Die µ- und ù-Zuordnungen gelten speziell für eine AZERTY-Tastatur und gehen zum nächsten/vorherigen Make-Fehler.

imap <c-j> <Down>
imap <c-k> <Up>
imap <c-h> <Left>
imap <c-l> <Right>
nmap <c-j> <c-d>
nmap <c-k> <c-u>
nmap <c-h> <c-left>
nmap <c-l> <c-right>

nmap ù :cp<RETURN>
nmap µ :cn<RETURN>

Eine kleine Funktion, die ich geschrieben habe, um Funktionen, Globale, Makros, Strukturen und Typendefinitionen hervorzuheben. (Kann bei sehr großen Dateien langsam sein). Jeder Typ wird anders hervorgehoben (siehe ": Hilfegruppenname", um einen Überblick über die Einstellungen Ihres aktuellen Farbtons zu erhalten). Verwendung: Speichern Sie die Datei mit ww (Standard "\ ww"). Sie benötigen dafür ctags.

nmap <Leader>ww :call SaveCtagsHighlight()<CR>

"Based on: http://stackoverflow.com/questions/736701/class-function-names-highlighting-in-vim
function SaveCtagsHighlight()
    write

    let extension = expand("%:e")
    if extension!="c" && extension!="cpp" && extension!="h" && extension!="hpp"
        return
    endif

    silent !ctags --fields=+KS *
    redraw!

    let list = taglist('.*')
    for item in list
        let kind = item.kind

        if     kind == 'member'
            let kw = 'Identifier'
        elseif kind == 'function'
            let kw = 'Function'
        elseif kind == 'macro'
            let kw = 'Macro'
        elseif kind == 'struct'
            let kw = 'Structure'
        elseif kind == 'typedef'
            let kw = 'Typedef'
        else
            continue
        endif

        let name = item.name
        if name != 'operator=' && name != 'operator ='
            exec 'syntax keyword '.kw.' '.name
        endif
    endfor
    echo expand("%")." written, tags updated"
endfunction

Ich habe die Angewohnheit, viele Codes und Funktionen zu schreiben, und ich schreibe keine Prototypen dafür. Also habe ich einige Funktionen erstellt, um eine Liste von Prototypen in einer C-artigen Quelldatei zu generieren. Es gibt zwei Varianten: eine, die den Namen des formalen Parameters entfernt und eine, die ihn beibehält. Ich aktualisiere einfach die gesamte Liste jedes Mal, wenn ich die Prototypen aktualisieren muss. Es wird vermieden, dass Prototypen und Funktionsdefinitionen nicht synchronisiert werden. Benötigt auch ctags.

"Usage: in normal mode, where you want the prototypes to be pasted:
":call GenerateProptotypes()
function GeneratePrototypes()
    execute "silent !ctags --fields=+KS ".expand("%")
    redraw!
    let list = taglist('.*')
    let line = line(".")
    for item in list
        if item.kind == "function"  &&  item.name != "main"
            let name = item.name
            let retType = item.cmd
            let retType = substitute( retType, '^/\^\s*','','' )
            let retType = substitute( retType, '\s*'.name.'.*', '', '' ) 

            if has_key( item, 'signature' )
                let sig = item.signature
                let sig = substitute( sig, '\s*\w\+\s*,',        ',',   'g')
                let sig = substitute( sig, '\s*\w\+\(\s)\)', '\1', '' )
            else
                let sig = '()'
            endif
            let proto = retType . "\t" . name . sig . ';'
            call append( line, proto )
            let line = line + 1
        endif
    endfor
endfunction


function GeneratePrototypesFullSignature()
    "execute "silent !ctags --fields=+KS ".expand("%")
    let dir = expand("%:p:h");
    execute "silent !ctags --fields=+KSi --extra=+q".dir."/* "
    redraw!
    let list = taglist('.*')
    let line = line(".")
    for item in list
        if item.kind == "function"  &&  item.name != "main"
            let name = item.name
            let retType = item.cmd
            let retType = substitute( retType, '^/\^\s*','','' )
            let retType = substitute( retType, '\s*'.name.'.*', '', '' ) 

            if has_key( item, 'signature' )
                let sig = item.signature
            else
                let sig = '(void)'
            endif
            let proto = retType . "\t" . name . sig . ';'
            call append( line, proto )
            let line = line + 1
        endif
    endfor
endfunction
2
RoaldFre

Mein Lieblingsrezept zum Hin- und Herwechseln zwischen Fenstern:

function! SwitchPrevWin()
    let l:winnr_index = winnr()
    if l:winnr_index > 1
       let l:winnr_index -= 1
    else
       "set winnr_index to max window open
        let l:winnr_index = winnr('$')
    endif
    exe l:winnr_index . "wincmd w" 
endfunction

nmap <M-z> :call SwitchPrevWin()
imap <M-z> <ESC>:call SwitchPrevWin()

nmap <C-z> :wincmd w
imap <C-z> <ESC>:wincmd w
1
ken

Ich möchte einige meiner eigenen Konfigurationsdateien in after-directory . Es ist besonders nützlich für ftplugin .

Sie können vermeiden, eine lange Liste von Augroups in Ihre .vimrc-Datei zu schreiben, anstatt separate Dateien für jeden Typ.

Aber offensichtlich macht das Verzeichnis .vim/ftplugin dasselbe wie das Verzeichnis .vim/after/ftplugin, aber ich würde es vorziehen, das Verzeichnis .vim den Plugins zu überlassen.

1
quabug

per this thread

Um eine Reihe von Zeilen mit einem Präfix zu versehen, verwende ich einen von zwei verschiedenen Ansätzen:

Ein Ansatz ist die Blockauswahl (von etw). Im Allgemeinen können Sie einen rechteckigen Bereich mit Strg-V und anschließendem Bewegen des Cursors auswählen. Wenn Sie ein Rechteck markiert haben, drücken Sie die Umschalttaste, um Zeichen auf der linken Seite des Rechtecks ​​einzufügen, oder die Umschalttaste, um sie auf der rechten Seite des Rechtecks ​​anzuhängen. Mit dieser Technik können Sie also ein Rechteck erstellen, das die äußerste linke Spalte der Zeilen enthält, denen Sie das Präfix voranstellen möchten. Drücken Sie Shift-I, geben Sie das Präfix ein und drücken Sie dann Escape.

Der andere Ansatz ist die Verwendung einer Substitution (wie von Brian Agnew erwähnt). Brians Ersetzung wirkt sich auf die gesamte Datei aus (das% im Befehl bedeutet "alle Zeilen"). Um nur ein paar Zeilen zu bearbeiten, ist es am einfachsten, in der ersten/letzten Zeile die Umschalttaste V (die den visuellen Zeilenmodus aktiviert) zu drücken und dann in die letzte/erste Zeile zu wechseln. Dann tippe:

: s/^/DEIN PREFIX /

Das ^ ist ein regulärer Ausdruck (in diesem Fall der Zeilenanfang). Wenn Sie dies im visuellen Linienmodus eingeben, wird automatisch vor dem s ein <,> eingefügt. Dies bedeutet, dass der Bereich der Substitution die visuelle Auswahl ist.

Zusätzlicher Tipp: Wenn Ihr Präfix Schrägstriche enthält, können Sie diese entweder mit einem Backslash maskieren oder ein anderes Interpunktionszeichen als Trennzeichen im Befehl verwenden. Um beispielsweise C++ - Zeilenkommentare hinzuzufügen, schreibe ich normalerweise:

: s: ^: //:

Zum Hinzufügen eines Suffixes ist der Substitutionsansatz im Allgemeinen einfacher, wenn nicht alle Zeilen genau die gleiche Länge haben. Verwenden Sie einfach $ für das Muster anstelle von ^ und Ihre Zeichenfolge wird anstelle von vorangestellt angehängt.

Wenn Sie gleichzeitig ein Präfix und ein Suffix hinzufügen möchten, können Sie Folgendes tun:

: s /.*/ PREFIX & SUFFIX /

Das. * Stimmt mit der gesamten Zeile überein. Das & in der Ersetzung setzt den übereinstimmenden Text (die gesamte Zeile) zurück, aber jetzt werden Präfix und Suffix hinzugefügt.

Übrigens: Wenn Sie Code auskommentieren, möchten Sie ihn wahrscheinlich später auskommentieren. Sie können den visuellen Block (Strg-V) verwenden, um die Schrägstriche auszuwählen, und dann d drücken, um sie zu löschen, oder Sie können eine Ersetzung (wahrscheinlich mit einer visuellen Linienauswahl, die mit Umschalt-V erstellt wurde) verwenden, um die führenden Schrägstriche wie folgt zu entfernen :

: s: // ::

1
vehomzzz

Zuordnungen, mit denen Bewegungen in der aktuellen Bildschirmzeile im Umbruchmodus ausgeführt werden. Ich habe dies vor einiger Zeit in einem Kommentar für einen Vim-Tipp entdeckt und es hat sich als recht praktisch erwiesen.

function! ScreenMovement(movement)
  if &wrap
    return "g" . a:movement
  else
    return a:movement
  endif
endfunction
onoremap <silent> <expr> j ScreenMovement("j")
onoremap <silent> <expr> k ScreenMovement("k")
onoremap <silent> <expr> 0 ScreenMovement("0")
onoremap <silent> <expr> ^ ScreenMovement("^")
onoremap <silent> <expr> $ ScreenMovement("$")
nnoremap <silent> <expr> j ScreenMovement("j")
nnoremap <silent> <expr> k ScreenMovement("k")
nnoremap <silent> <expr> 0 ScreenMovement("0")
nnoremap <silent> <expr> ^ ScreenMovement("^")
nnoremap <silent> <expr> $ ScreenMovement("$")
1
Mark42

Einige meiner Must-Haves sind:

cscope + ctags + vim, die im Web gefunden werden können.

Einige Abkürzungen für das schnelle Starten neuer Codedateien wie:

ab cpph #include <iostream><CR>#include <string><CR>#include <cstdlib><CR>#include <cassert><CR>#include <vector><CR>#include <
stdexcept><CR>using namespace std;<CR>int main(int argc, char *argv[]) {
ab perlh #!/usr/bin/Perl<CR>use strict;<CR>use warnings;<CR>
ab chdr #include <stdio.h><CR>#include <sys/types.h><CR>#include <unistd.h><CR>#include <stdlib.h><CR>#include <sys/stat.h><CR>
#include <sys/wait.h><CR>#include <string.h><CR>int main(int argc, char *argv[]) {
ab xhtmlhdr <?xml version="1.0" encoding="UTF-8"?><CR><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.o
rg/TR/xhtml1/DTD/xhtml1-strict.dtd"><CR><html xmlns="http://www.w3.org/1999/xhtml"><CR>  <head><CR>  <title></title><CR><link h
ref="style.css" rel="STYLESHEET" type="text/css"><CR></head>

Beispielsweise fügt cpph ein Grundgerüst einer main.cc-Datei ein

Es gibt auch meine Zuordnung der Funktionstasten:

map <F1> <Esc>:w<CR>:Perl $e = `./error.pl`; my ($f,$l,@w) = split(":",$e); my $w=join(":",@w); $curwin->Cursor($l,0); VIM::Msg($w);<CR>
map <F2> :wincmd w<CR>
map <F3> :wincmd s<CR>
map <F4> :wincmd v<CR>
map <F5> :wincmd o<CR>
map <F6> :sball<CR>
map <F7> :wq<CR>
map <F8> :wincmd q<CR>
map <F9> :wincmd -<CR>
map <F10> :wincmd +<CR>
map <F11> :wincmd <<CR>
map <F12> :wincmd ><CR>

In diesem Fall wird mein F1 zugeordnet, um den Cursor auf den nächsten Fehler zu setzen, der für eine Quellcodemigration korrigiert werden muss.

map _ ebi"^[ea"^[

Diese Map würde dazu führen, dass _ einen String zitiert

1
piotr

Meins verwendet Makros anstelle von Suchen - das Kombinieren eines Makros mit dem visuellen Modus ist manchmal effizienter.

1
lukaszkorecki