Comment entrer des caractères non ascii en utilisant des codes hexadécimaux ou octaux dans vi

33

J'essaie d'écrire une bibliothèque de golf pour postscript. Mais il doit être condensé lui-même. J'ai donc besoin d'un moyen pratique de taper des octets arbitraires dans un texte principalement ascii.

Je sais que cela peut facilement être fait avec absolument n'importe quel langage de programmation, mais puis-je le faire dans vi? ( :help octaln'était d'aucune aide).

Edit: Voici la bibliothèque de golf résultante pour postscript . Heureusement, j'ai réalisé très tôt que jouer au golf à la bibliothèque elle-même était une idée stupide et je ne l'ai pas fait.

luser droog
la source
7
Si Vim est disponible, cela pourrait aider
sr_

Réponses:

15

Je suppose que vous utilisez vim, car c'est une commande de vim. Sur certains systèmes, il n'y a qu'un lien symbolique vers lequel il s'exécute en mode compatible vi. :helpoctalvivim

En vim:

  • Vous pouvez entrer des caractères unicode à partir d'un plan multilingue de base que vous pouvez utiliser:
    Appuyez sur ctrl+ vpuis entrez le code unicode hexadécimal à quatre chiffres.
  • Une autre option est les digraphes. Vous pouvez en savoir plus à leur sujet dans viml'aide de ( help: dig).
    Appuyez sur ctrl+ k, puis sur une séquence de deux caractères.
    Vous pouvez lister les séquences prises en charge dans votre commande vim usig :digraph.

Aux nvi, vi et ailleurs:

  • Ctrl+ Shiftet appuyez sur Upuis entrez le code hexadécimal Unicode.
Alex Bolotov
la source
3
Je pense que Ctrl+Vc'est pour entrer des chiffres décimaux , s'il n'est pas suivi parx
3
@Carlos a raison. Cette réponse est fausse. La réponse d'Alan est correcte.
malan
60
:help i_CTRL-V_digit

En mode insertion, tapez Ctrl+ Vsuivi de

  • un nombre décimal (0-255)
  • o puis un nombre octal (o0-o377, soit 255 est la valeur maximale)
  • x puis un nombre hexadécimal (x00-xFF, c'est-à-dire que 255 est la valeur maximale)
  • u puis une séquence Unicode 4 hexchar
  • U puis une séquence Unicode 8 hexchar

Les nombres décimaux et octaux sont limités à trois chiffres. Les nombres décimaux inférieurs à 100 peuvent inclure des zéros non significatifs, qui sont ignorés. Les nombres octaux inférieurs à 100 oct (soit 64) peuvent inclure des zéros non significatifs, mais ils ne sont pas obligatoires. Les nombres octaux supérieurs ou égaux à 100 oct peuvent ne pas inclure de zéros non significatifs (mais vous pouvez taper un premier osi vous le souhaitez).

Vous pouvez terminer un nombre en tapant un caractère qui n'est pas un chiffre valide pour ce radix. Par exemple,

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

Les nombres hexadécimaux réguliers (un octet) sont limités à deux chiffres. Comme pour ce qui précède, vous pouvez répéter le caractère radical (par exemple,  Ctrl+ Vuu0041 →  A) pour les caractères spécifiés par des codes hexadécimaux.  o et  xsont insensibles à la casse.

Alan
la source
Pour ajouter quelques astuces supplémentaires: le nombre décimal doit être compris entre 0 et 255. Le nombre hexadécimal entre x00-xFF.
wisbucky
ascii esaple est ctrl + v x1b(pour les séquences de couleurs ascii)
ThorSummoner
1
Un rappel que si vous êtes sous Windows et remappé Ctrl + V pour coller, vous pouvez utiliser Ctrl + Q en mode Insertion à sa place. Voir stackoverflow.com/questions/426896/…
Chris R. Donnelly