Posso definire una codifica personalizzata per vim?


9

Uso spesso Puzzle di programmazione e Code-golf . Molti utenti laggiù hanno scritto lingue personalizzate esclusivamente per il golf. Sto anche lavorando da solo in questo momento. Molte di queste lingue hanno le loro codifiche personalizzate in modo che possano comprimere più comandi in un singolo byte. Ad esempio, sul serio , gelatina e 05AB1E .

Posso configurare vim per usare la mia codifica personalizzata? Vorrei configurare un mapping di byte per unicode punti di codice. Per esempio:

0x01 == "¢"

Quindi, quando scrivo, <C-v><C-a>visualizzerebbe un ¢carattere e, quando scrivo, salverà il byte 0x01.

È possibile anche in remoto? Inoltre, funzionerebbe bene con gli appunti di sistema? (ad esempio, posso copiare e incollare dal mio browser in vim e viceversa)


2
Probabilmente avresti bisogno di scrivere il tuo script di sintassi e usarlo :help conceal.
Romainl

Guardando l'aiuto di Vim per encodinge charconvertho visto che tenta internamente di usare iconvprima la funzione per convertire i set di caratteri. iconvpuò gestire la conversione tra diversi set di caratteri. Una risposta su come aggiungere un set di caratteri iconvpuò essere trovata qui (sembra che tu debba inviare per posta il manutentore). Forse questo ti aiuta. :)
Erwin Rooijakkers,

Risposte:


7

Come suggerito da Romainl, puoi ottenerlo con la concealfunzione di vim.

Ecco un esempio di script che può essere utilizzato:

let rules = [
      \ ['01' , '☺'],
      \ ['02' , '☻'],
      \ ['03' , '♥'],
      \ ['04' , '♦'],
      \ ['05' , '♣'],
      \ ['06' , '♣'],
      \ ['07' , '•'],
      \ ['08' , '◘'],
      \ ['^A' , '¢'],
      \ ]

for [value, display] in rules
  execute "syntax match vartest /".value."/ conceal cchar=".display
endfor

" Ensure the character is concealed
set conceallevel=2
set concealcursor=nvc

Come puoi vedere, ho preso sul serio alcune delle mappe e il tuo ^Aesempio. Attento se si desidera copiare / incollare questo codice, è ^Anecessario digitare <C-v> <C-A>.

Ciò che fa questo codice è, definisce per ogni value/ displaycoppia una corrispondenza di sintassi.

per esempio

syntax match vartest /08/ conceal cchar=◘

Abbinerà ogni 08sequenza e il file e li nasconderà con il personaggio.

Si vede , ma il testo nel file viene 08.


È quindi possibile prendere un elenco di regole e (con una macro elaborata, vale a dire sul serio:) 0i\ ['^[f s', '^[lxf)s'],^[ld$trasformare ogni riga in un array vim utilizzabile.

Inoltre, se si desidera digitare unicode letterale con vim, è possibile utilizzare questo flusso di lavoro:

<C-V> u XXXX

Dov'è XXXXil valore unicode, quindi digitando <C-V>u0001verrà inserito ^Acome desiderato.


Se vuoi verificare il contenuto del file, ti consiglio di usare un dump esadecimale del file, che puoi avere con xxd .

per esempio

$ vim

<C-V><C-A><C-V><C-B>
:x a.txt

$ xxd a.txt
0000000: 0102 0a                                  ...

Puoi vedere qui il tuo ^Acome 01e il tuo ^Bcome 02. ( 0arappresenta la nuova riga alla fine del file)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.