Was ist der einfachste Weg, um en dash in Vim einzufügen?

33

Um einen Bindestrich einzufügen , benutze ich ^v u 2014sieben Tastendrücke. Gibt es einen einfacheren Weg? (Ich habe mir Digraphen angesehen und dort keinen Bindestrich gefunden.)

Tomas Tomecek
quelle
4
Zu Ihrer Information, U + 2014 ist ein EM DASH. U + 2013 ist ein EN DASH. fileformat.info/info/unicode/char/2014/index.htm , fileformat.info/info/unicode/char/2013/index.htm
Quincy Bowers
7
Wenn Sie X11 verwenden, würde ich XCompose sagen ... Da dies für alle Ihre Anwendungen und nicht nur für Vim funktioniert. Oder wenn Sie unter OSX oder Windows arbeiten, die von diesem Betriebssystem bereitgestellten Funktionen.
Martin Tournoij
Vielleicht nicht der einfachste Weg, aber ich neige dazu, <Ctrl-Shift-U>2013<Space>weil es überall funktioniert. Ein paar Tastencodes reichen weit (ich verwende hauptsächlich U + 2013, U + 2014, U + 2026, U + 2212, U + 2192, U + B0; - / - /… / - / → / °).
wchargin
Aus Neugier, wie Sie angezeigt werden en Striche? AFAIK, es gibt keine Möglichkeit, Schriften mit nicht festgelegter Breite korrekt anzuzeigen (dh mit ungleichmäßiger Zeichenbreite und Kerning), sodass Striche und Ems immer genau wie Bindestriche aussehen, die sich bis zum äußersten Rand der Zeichengrenze erstrecken. Hast du nichts dagegen, eine extreme Trennung zwischen der Darstellung des Charakters in Vim und der Darstellung an anderer Stelle zu haben?
Kyle Strand
2
Ich bin bei @Carpetsmoker: Compose - - -für einen Em-Dash, Compose - - .für einen En-Dash. Komponieren ist magisch, besonders wenn Sie es der ansonsten völlig unbenutzten Feststelltaste zuordnen.
Rmano

Antworten:

42

Sie können Digraphen verwenden: Ctrl+k-N(mit einem Großbuchstaben N)

Im Einfügemodus werden Digraphen Ctrl+kgefolgt von einer zweistelligen Sequenz eingegeben . Für en-dash lautet die Reihenfolge -N.

Wie Quincy betonte, U+2014ist Em-Dash. Wenn Sie dies mit Digraphen eingeben möchten, lautet die Reihenfolge -M.

tommcdo
quelle
Ebenso kann mit <Ck> -M ein EM DASH eingefügt werden.
Quincy Bowers
U+2014ist nicht en-dash? Mein ganzes Leben war eine Lüge! Bearbeiten: jetzt verstehe ich es: meine Terminal-Schriftart (Inconsolata) rendert beide Striche auf die gleiche Weise.
Tomas Tomecek
3
Um zu dieser Antwort zu gelangen: hex 2013 ist Dezimalzahl 8211. Verwenden Sie den :digraphsBefehl, um alle Digraphen anzuzeigen, und suchen Sie nach 8211.
200_success
10

Wenn es keinen vordefinierten Digraphen gibt oder Sie eine einprägsamere Tastenfolge wünschen, können Sie Digraphen in Ihrem vimrc definieren. Im Folgenden werden beispielsweise zwei Digraphen für en dash (8211) und em dash (8212) definiert, die ihre XCompose-Sequenzen widerspiegeln.

digraph -. 8211 -- 8212

Der :digraphBefehl erwartet, dass der Wert dezimal und nicht hexadezimal angegeben wird. Aus diesem Grund ist es 8211 für en dash und nicht 2013.

Jamessan
quelle
Der en dash Digraph ist eingebaut.
200_success
1
@ 200_success Ich habe nicht gesagt, dass es nicht so ist. :) Die Digraph-Auswahlmöglichkeiten von Vim stimmen nicht immer mit den Standardoptionen überein. Daher ist es hilfreich, zu wissen, wie man einen eigenen Digraph definiert, auch wenn einer bereits vorhanden ist.
Jamessan
8

Die Standardmethode zum Einfügen eines Bindestrichs in Vim ist die Verwendung eines Digraphen, wie tommcdo erklärt hat .

Allerdings finde ich Digraphe im Allgemeinen und insbesondere dafür ein ( Ctrl+k, -, Shift+N) recht umständlich tippen. Zur schnelleren Eingabe von Bindestrichen können Sie einer Dateitypdatei das folgende Paar von Einfügemodus-Zuordnungen hinzufügen, z .vim/after/ftplugin/markdown.vim.

Für en / em Striche:

inoremap <buffer> --<space> –<space>
inoremap <buffer> -- —

Hinweis <buffer>: Diese Zuordnung gilt nur für Markdown-Dateien. Dies ist notwendig , weil es einige Kontexte (zB Programmierung) sind , wo ich nicht will zwei Bindestriche durch Striche ersetzt werden.

Diese Zuordnungen machen sich die Tatsache zunutze, dass in den Kontexten, in denen ich sie normalerweise verwende, Bindestriche von Leerzeichen umgeben sind und Bindestriche nicht . * Die Verwendung dieser Zuordnungen bedeutet daher, dass ich in den weniger leistungsfähigen Texteditoren, die ich manchmal verwenden muss, genau dieselben Tastendrücke verwenden kann und trotzdem eine vernünftige Ausgabe erhalte. **

Ich benutze eine etwas kompliziertere Lösung als die oben, weil für den typographischen Gründen Ich mag meine em-Striche mit umgeben Haar Räumen . Wenn Sie diese im Markdown haben, ist sie weniger lesbar, aber zum Glück hat Vim eine Lösung dafür, mit der Funktion "Verbergen", mit der Sie bestimmte Syntaxelemente ausblenden können, wenn sich der Cursor in einer anderen Zeile befindet: ***

inoremap <buffer> --<space> –<space>
inoremap <buffer> -- &#8202;—&#8202;

syntax match entity_hairspace "&#8202;" conceal
setl conceallevel=2

* Wenn ich jemals einen Gedankenstrich ohne Leerzeichen verwenden muss, kann ich einfach die Rücktaste drücken, nachdem ich das Mapping eingegeben habe.
** Wenn Sie im Allgemeinen keine solchen Gedankenstriche verwenden oder sich nie aus Vim herauswagen, können Sie die Zuordnungen mit etwas anderem auslösen: z . B. --.und ---. Wenn Sie andere Trigger verwenden, können Sie diese auch direkt in Ihre .vimrc-Datei einfügen und die <buffer>Optionen entfernen .
*** Sie können auch ein verborgenes Zeichen verwenden cchar, um Syntaxelemente durch ein einzelnes Zeichen zu ersetzen, anstatt sie vollständig auszublenden. Wenn Sie sich Sorgen um Codierungsprobleme machen, können Sie Vim so veranlassen, &ndash;HTML-Entitäten in der Datei als Bindestriche anzuzeigen .

Reich
quelle
Verwenden Sie Bindestriche in Vim? Sehen sie nicht seltsam aus, weil sie nur eine Spaltenbreite haben? Kennen Sie irgendwelche Tricks, um Striche zu erzeugen, die tatsächlich viel Platz beanspruchen, vielleicht den Wert von zwei Spalten?
Kyle Strand
@KyleStrand Wie geil willst du werden? Versuchen set conceallevel=1 | syntax match longdash '—' conceal cchar=-Sie Folgendes : (Beachten Sie, dass der erste Gedankenstrich in diesem Befehl ein Bindestrich und der zweite ein Bindestrich mit voller Breite ist.)
Rich
Ich sehe keinen Unterschied in der Anzeige oder sehe, warum die Anzeige dann zwei Spalten einnimmt. Haben Sie meine Frage zufällig falsch verstanden, oder ist es wahrscheinlich, dass ich Ihren Vorschlag falsch verstehe?
Kyle Strand
.... eigentlich weiß ich nichts über die Vim-Syntaxspezifikation. Funktioniert der syntax matchBefehl auch außerhalb des Kontexts einer Syntaxdatei?
Kyle Strand
@KyleStrand Ich habe Ihre Frage verstanden. Haben Sie versucht, diese Zeile in Ihren vimrc zu kopieren? Oder läuft es einfach in Vim? :)
Rich
3

Auf meiner französischen AZERTY Mac-Tastatur kann ich mit Alt+ einen Bindestrich einfügen -. Ihr Kilometerstand kann natürlich variieren.

romainl
quelle
2
Alt+-(oder Option+-um pedantisch zu sein) ist eine Mac-spezifische Verknüpfung. Es funktioniert überall in OS X, ist aber nicht mit vi oder vim verwandt.
ash108
1
Funktioniert in MacVim, aber in Terminal Vim verhält es sich wie [Esc] gefolgt von -, wodurch in den normalen Modus gewechselt und der Cursor an den Anfang der vorherigen Zeile gesetzt wird.
200_success
3

Installieren Sie mein Unicode-Plugin , geben Sie Vim ein und geben Sie DASH ein, gefolgt von CtrlXCtrlZ, um die Unicode-Vervollständigung zu aktivieren.

Bildbeschreibung hier eingeben

(Beachten Sie das -N in der Beschreibung, das den Digraphen zur Eingabe dieses Zeichens zeigt.)

Christian Brabandt
quelle
0

Inspiriert von Richs großartiger Antwort habe ich meinem vimrc die folgenden Zeilen hinzugefügt:

" For en/em dashes, respectively
autocmd FileType markdown imap -- –
autocmd FileType markdown imap --- —

Funktioniert wie ein Genuss!

Will Wright
quelle
0

Für einen en dash ist ein Digraph der beste Weg, wie in verschiedenen anderen Antworten vorgeschlagen. Für beliebige Unicode-Zeichen können Sie auch den ^VEinfügemodus verwenden (siehe :he i_CTRL-V_digit).

Für einen Bindestrich wäre das zum Beispiel ^Vu2013.

tremby
quelle
Mir ist jetzt klar, dass dies tatsächlich das ist, was das OP bereits getan hat! (Obwohl en dash 2013 ist, nicht 2014 - das ist em dash.) Ich denke, dass es immer noch gut ist, irgendwo auf dem Stapel der Antworten zu stehen.
Tremby