Come posso continuare a creare accidentalmente uno spazio senza interruzioni prima di aprire la parentesi graffa?


20

Sono consapevole che questa è una domanda strana e potrebbe non essere nemmeno il forum giusto per pubblicarla. Ma questo è stato un problema per diversi anni.

Di tanto in tanto, diciamo una volta al mese, quando programmo, presento uno spazio No-Break invece di uno spazio normale, prima di aprire una parentesi graffa.

Questo succede diciamo quando scrivo () {

Questo porta a misteriosi bug lanugine. Clausole CSS che non si applicano. Fino a quando non ricordo che potrebbe essere così.

Per quanto ne so, questo accade solo in vim, ma dal momento che è il mio editor principale potrebbe non essere mai successo in altri software. Ma nessuno dei miei colleghi nei miei ultimi lavori ha mai avuto quel problema, anche se usano lo stesso layout di tastiera di me. Sono l'unico ad usare Vim regolarmente però, ecco perché ho pensato di pubblicare qui ...

Questo mi è successo almeno in Ubuntu 14.04, 16.04 e Mac OS X.

:set list non lo rivela.

Sto usando un layout di tastiera francese-canadese, il che significa che il carattere di parentesi graffa viene eseguito premendo alt + `

Sono molto stanco di questo che causa problemi, è abbastanza raro che continuo a dimenticarmene.

Se non riesci a dirmi perché questo continua a succedere, una sorta di configurazione per evidenziare quel personaggio in una sorta di modo ovvio sarebbe una risposta adeguata e aiuterebbe davvero con questo problema.


Puoi cambiare le tue combinazioni di tasti come suggerisce Michael: superuser.com/a/142573
user12125

Merda come questa è la ragione per cui ho finalmente cambiato definitivamente il mio layout da svedese ad americano. Probabilmente passo più tempo a scrivere inglese + C + Perl + Bash + Vim di quanto scrivo le nostre divertenti lettere å, ä e ö. Questi sono facilmente prodotti utilizzando una chiave di composizione.
pipe

Risposte:


24

Altri hanno già fornito soluzioni alternative, ma per quanto riguarda il motivo per cui succede, scommetto che stai premendo accidentalmente Alt+ Space.

Sto usando Xubuntu con il layout di tastiera finlandese a 105 tasti, quindi per me digitare {significa premere AltGr+ 7. Ho appena fatto un test rapido in xfce4-terminal (sulla riga di comando bash), e premendo AltGr+ Spaceeffettivamente si produce uno spazio senza interruzioni (U + 00A0).

Scommetto che ciò che sta accadendo è che stai premendo il Alttasto in previsione della digitazione del controvento, e talvolta ciò accade prima di premere effettivamente la barra spaziatrice, producendo uno spazio non-break. E poiché sembra identico a uno spazio normale, non ti rendi conto che è successo prima che qualcosa si rompa misteriosamente, rendendoti difficile notare che sta accadendo e quindi anche difficile disimparare quell'abitudine.


Oooh, lo proverò domani al lavoro. Metto sempre uno spazio davanti alla mia parentesi graffa, avrebbe senso che di tanto in tanto avessi il dito sul tasto maiuscole!
Sarumanatee,

2
@Sarumanatee: su Linux puoi davvero disabilitare del tutto il carattere nbsp. Forse il gestore della tastiera di Ubuntu ha anche un'opzione per questo. In caso contrario, puoi sintonizzarti da solo sulla mappa della tastiera (è una questione di eliminare una linea, nel mio sistema sarebbe la mappa dei tasti /usr/share/X11/xkb/symbols/us) dopo aver sintonizzato la chiamata setxkbmap uso qualsiasi lingua tu preferisca
unperson325680

@progo SÌ. Sono su macos in questo momento, e uso Karabiner per mettere a punto il layout della tastiera poiché il più in basso a sinistra della mia tastiera è "fn" per impostazione predefinita, che credo sia completamente stupido. Mi hai ispirato a fare il check-in lì, e c'è un'opzione per cambiare tutti gli spazi non-break in spazio normale
Sarumanatee,

E quell'opzione conferma il suggerimento di @Ilmari Karonen, poiché quell'opzione moschettone mostra i comandi per creare nbsp: opzione + spazio e opzione + maiusc + spazio. Anche se alla fine, alla fine non è stato per niente collegato a VIM!
Sarumanatee,

Ilmari Karonen ha ragione, quindi non si tratta della spiegazione, ma solo per descrivere la mia soluzione alternativa. Ho aggiunto una corrispondenza di sintassi che collega lo spazio non interrompibile al gruppo di evidenziazione Errore, in modo che sia visibilmente diverso dallo spazio ordinario. Lo stesso vale per il trattino morbido e il trattino non interrotto (che sono collegati a due diversi gruppi di evidenziazione poiché a volte li uso intenzionalmente nel testo anziché nel codice).
bpj,

19

È possibile aggiungere un comando automatico che sostituisce gli spazi non interrompibili con quelli normali al salvataggio di determinati tipi di file, ad es. inserendo qualcosa di simile nel tuo vimrc:

augroup RemoveSpaces
  autocmd!
  autocmd BufWritePre *.css silent! :%s/\%u00A0/ /g
augroup end

Puoi modificarlo aggiungendo più tipi di file o impostando un segno e ritornando ad esso dopo l'operazione di sostituzione, altrimenti verrai spinto all'inizio dell'ultima riga in cui è stata effettuata una sostituzione.


Ohh è abbastanza intelligente. Non mi dispiace essere spinto in posti poiché ciò non accade così spesso, ed è molto meno fastidioso che passare il tempo a fare il debug delle cose!
Sarumanatee,

13

L' 'listchars'opzione fornisce un mezzo per creare 'list'spazi non interrotti di visualizzazione. Non è impostato di default, quindi probabilmente vuoi aggiungerlo.

set listchars+=nbsp:‗

Questo aiuta davvero. Penso che proverò a scoprire come evidenziare il carattere nbsp in ogni momento, per provare a catturarlo mentre lo sto scrivendo: o
Sarumanatee

2
@Sarumanatee Se aggiungi la linea alla tua vimrc, infatti, le evidenzierà mentre le digiti.
Tumbler41,

1

sì, probabilmente è alt + spazio, mi capita molto quando uso l'operatore pipe:

cat xyz.txt | grep abc

se tieni premuto il tasto alt troppo a lungo, creerà uno spazio non interrompibile dopo che pipe e bash proveranno a trovare un comando "grep" e poi ti diranno che grep non è stato trovato.

su macos c'era qualche trucco per cambiare la keymap, quindi ogni volta che si inserisce uno spazio non-break, verrà convertito / sostituito da un normale. per quanto ricordo, la keymap è cambiata per l'intera tastiera, quindi risolve il problema in tutte le applicazioni.


alt + spazio non ha nulla a che fare con Vim. Per impostazione predefinita (come in: nessuna mappatura utente), sulla maggior parte dei sistemi alt + space genererà qualche escape che conterrà un Esc, che uscirà dalla modalità di inserimento in Vim. E questo è tutto. Lo spazio non interrompibile è il risultato di alcuni bus di input o input manager sul tuo sistema, Vim / Gvim non lo vede mai.
grochmal
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.