Ich habe eine Datei voller Text (z. B. Markdown oder LaTeX). Ich möchte die Anzahl der Wörter in einem Teil dieser Datei zählen.
Ich weiß, dass ich :! wc -w %wc -w auf dem aktuellen Puffer ausführen kann . Und ich weiß, dass ich den interessierenden Abschnitt in ein benanntes Register ziehen kann. Ich vermute, es gibt eine Möglichkeit, ein benanntes Register zur Verwendung in einem Befehl oder einer Pipe an das Betriebssystem zu senden, aber ich konnte keines finden. Oder gibt es eine bessere Möglichkeit, die Wörter in einem Register zu zählen?
Mein Anwendungsfall ist, dass ich viel nicht programmiertes Schreiben (Notizen, Abschlussarbeiten usw.) in vim mache und ich möchte zählen, wie viele Wörter ich während einer Bearbeitung zu einem bestimmten Abschnitt der Datei hinzugefügt habe Session.
quelle
g<C-g>
. Genial!Es gibt zwei Möglichkeiten, wie dies erreicht werden kann, die reine Vimscript-Methode und die
wc
Methode.Der reine Vim-Weg
Sie können dazu den Befehl suchen und ersetzen verwenden. Zum Beispiel:
Anstatt ein bestimmtes Muster durch etwas zu ersetzen, werden nur die Vorkommen des Musters gezählt. Dies liegt an der
n
Flagge. Um die Wörter in einem bestimmten Abschnitt (in diesem Fall in den Zeilen 5 bis 15) zu zählen, können Sie Folgendes tun:Dadurch entfällt die Notwendigkeit, den Inhalt einer Auswahl in ein Register zu ziehen.
5-15
Lesen Sie das Hilfethema für, um weitere Möglichkeiten für das zu sehen, was ersetzt werden kanncmdline-ranges
. Wenn Sie dies häufig tun möchten, ist es wahrscheinlich gut, eine Zuordnung (oder einen Befehl) dafür zu erstellen. Wenn Siehlsearch
aktiviert haben, möchten Sie möglicherweise:nohlsearch
anschließend ausgeführt werden, um die Hervorhebung zu löschen.Der
wc
WegDas gleiche kann mit erreicht werden
wc
. Auf die gleiche Weise, wie Siecmdline-ranges
den Bereich mit dem:s
Befehl auswählen können, können Sie sie mit externen Befehlen verwenden. Zum Beispiel:Dies führt die Zeilen 5 bis 15 durch den
wc
Befehl. Der Nachteil dabei ist, dass dieser Zeilenbereich durch die Ausgabe des Befehls ersetzt wird. Sie können diese Änderung durch Drücken von rückgängig machenu
. Beachten Sie auch, dass die Vimscript-Lösung möglicherweise nicht mit verschiedenen Sprachen\w
funktioniert , da sie nicht mit den Wortzeichen in anderen Sprachen übereinstimmt.wc
kann es besser machen als\w
. Hier ist auch ein ausgefallener Befehl, um dies zu beschleunigen:Beachten Sie, dass dies das
a
Register blockiert .Hinweis
Es scheint, dass dies auch im visuellen Modus mit der
g<C-g>
Tastenkombination erreicht werden kann. Eine Erklärung hierzu finden Sie in der Antwort von Carpetsmoker.quelle
\w
klingt zunächst nach einer guten Idee, aber nach dem Testen habe ich eine Reihe von Problemen festgestellt. Das größte Problem ist, dass es nicht mit Nicht-ASCII-Zeichen übereinstimmt, sodass ein Wort wieüber
einfach übersprungen wird ( gestern gab es eine Frage dazu ). Ein Wort wiee-mail
wird auch als 2 Wörter gezählt, da-
es nicht in ist\w
(die Verwendung von a-
ist im Englischen etwas ungewöhnlich, im Niederländischen jedoch sehr häufig). Es kann andere Zeichen geben, die auf diese Weise ignoriert werden, was uns zu meinem letzten Punkt bringt: Konventionen darüber, was als "Wort" angesehen wird, können abweichen ...wc
das Gebietsschema (ich weißwc
übrigens nicht, ob GNU tatsächlich damit umgeht, GNU-Tools sind nicht für ihre hervorragende Unicode-Unterstützung bekannt).wc
Lösung hinzufügen .Für Wörter verwenden Sie:
.
bezeichnet die aktuelle Zeile.Außerdem habe ich Folgendes in meine .vimrc-Datei eingefügt:
Ich kann tippen:
und der
zzcw
Wille erweitert sich aufs/\i\+/&/g
Das
zzcw
ist nur ein seltsamer Name, der (für mich) zu nichts passt.Ein Nebeneffekt ist, dass die gesamte Datei ausgewählt und hervorgehoben wird.
Ich wollte in der Lage sein, mehrzeilige Tweets in eine Datei einzugeben, sicherzustellen, dass nicht zu viele Zeichen vorhanden sind, und den Tweet in Twitter einfügen.
quelle