Eingabe von Nicht-ASCII-Zeichen unter Verwendung von Hex- oder Oktalcodes in vi

33

Ich versuche eine Golfbibliothek für Postscript zu schreiben. Aber es muss sich verdichten. Ich brauche also eine bequeme Möglichkeit, beliebige Bytes in den meisten ASCII-Text einzugeben.

Ich weiß, dass dies mit absolut jeder Programmiersprache problemlos möglich ist, aber kann ich es in vi tun? ( :help octalwar keine Hilfe).

Bearbeiten: Hier ist die resultierende Golfbibliothek für Postscript . Zum Glück wurde mir früh klar, dass das Golfen in der Bibliothek selbst eine blöde Idee war, und das tat ich nicht.

Luser Droog
quelle
7
Wenn Vim verfügbar ist, kann dies hilfreich sein
sr_ 13.01.13

Antworten:

15

Ich gehe davon aus, dass Sie verwenden vim, weil es ein vim-Befehl ist. Bei einigen Systemen handelt es sich lediglich um einen Symlink, über den es im vi-kompatiblen Modus ausgeführt wird. :helpoctalvivim

In vim:

  • Sie können Unicode-Zeichen aus der mehrsprachigen Basisebene eingeben, die Sie verwenden können:
    Drücken Sie ctrl+ vund geben Sie dann den vierstelligen hexadezimalen Unicode-Code ein.
  • Eine weitere Option sind Digraphen. Sie können mehr über sie in vimder Hilfe ( help: dig) lesen .
    Drücken Sie ctrl+ kund dann die zweistellige Sequenz.
    Sie können die in Ihrem Befehl vim usig unterstützten Sequenzen auflisten :digraph.

In nvi, vi und anderswo:

  • Ctrl+ Shiftund drücke Uund gib dann den Unicode-Hex-Code ein.
Alex Bolotov
quelle
3
Ich denke, das Ctrl+Vist für die Eingabe von Dezimalstellen , wenn nicht gefolgt vonx
3
@ Carlos ist richtig. Diese Antwort ist falsch. Alans Antwort ist richtig.
Malan
60
:help i_CTRL-V_digit

Geben Sie im Einfügemodus Ctrl+ Vgefolgt von ein

  • eine Dezimalzahl (0-255)
  • o dann eine Oktalzahl (o0-o377, dh 255 ist der Maximalwert)
  • x dann eine Hex-Zahl (x00-xFF, dh 255 ist der Maximalwert)
  • u dann eine 4-Hex-Zeichen-Unicode-Sequenz
  • U dann eine 8-Hex-Zeichen-Unicode-Sequenz

Dezimal- und Oktalzahlen sind auf drei Stellen begrenzt. Dezimalzahlen unter 100 können führende Nullen enthalten, die ignoriert werden. Oktalzahlen unter 100 Okt (dh 64) können führende Nullen enthalten, sind jedoch nicht erforderlich. Oktalzahlen größer oder gleich 100 Okt enthalten möglicherweise keine führenden Nullen (Sie können jedoch einen führenden eingeben, owenn Sie möchten).

Sie können eine Zahl beenden, indem Sie ein Zeichen eingeben, das keine gültige Ziffer für diese Basis ist. Beispielsweise,

  • Ctrl+ V    065 →  A.
  • Ctrl+ V    65B →  Ab.
  • Ctrl+ Vo041 →  !.
  • Ctrl+ Vo419 →  !9.

Normale Hexadezimalzahlen (ein Oktett) sind auf zwei Ziffern beschränkt. Wie oben können Sie das Radixzeichen (z. B. Ctrl+ Vuu0041 →  A) für Zeichen wiederholen, die  durch Hex-Codes angegeben werden.  o und  xsind unabhängig von Groß- und Kleinschreibung.

Alan
quelle
Weitere Tipps: Die Dezimalzahl muss zwischen 0 und 255 liegen. Die Hex-Zahl zwischen x00-xFF.
wisbucky
ascii esaple ist Strg + V x1b(für ASCII-Farbsequenzen)
ThorSummoner
1
Eine Erinnerung daran, dass Sie in Windows Strg + V zum Einfügen neu zuweisen und stattdessen Strg + Q im Einfügemodus verwenden können. Siehe stackoverflow.com/questions/426896/…
Chris R. Donnelly,