Comment puis-je continuer à créer accidentellement un espace sans pause avant d'ouvrir l'accolade?

20

Je suis conscient que c'est une question étrange, et ce n'est peut-être même pas le bon forum pour la poster. Mais cela pose problème depuis plusieurs années.

De temps en temps, disons une fois par mois, lorsque je programme, j'introduis un espace No-Break au lieu d'un espace régulier, avant d'ouvrir une accolade.

Cela arrive, disons quand j'écris () {

Cela conduit à de mystérieux insectes pelucheux. Clauses CSS qui ne s'appliquent pas. Jusqu'à ce que je me souvienne que ce pourrait être ça.

Pour autant que je sache, cela ne se produit que dans vim, mais comme c'est mon éditeur principal, cela ne s'est peut-être jamais produit dans d'autres logiciels. Mais aucun de mes collègues de travail dans mes derniers emplois n'a jamais eu ce problème, même s'ils utilisent la même disposition de clavier que moi. Je suis le seul à utiliser vim régulièrement, c'est pourquoi j'ai pensé à poster ici ...

Cela m'est arrivé au moins dans Ubuntu 14.04, 16.04 et Mac OS X.

:set list ne le révèle pas.

J'utilise une disposition de clavier franco-canadienne, ce qui signifie que le caractère d'accolade se fait en appuyant sur alt + `

Je suis très fatigué de ce qui cause des problèmes, c'est assez rare que j'oublie toujours.

Si vous ne pouvez pas me dire pourquoi cela continue, une sorte de configuration pour mettre en évidence ce personnage d'une manière évidente serait une réponse appropriée et aiderait vraiment à résoudre ce problème.

Sarumanatee
la source
Vous pouvez modifier vos raccourcis clavier comme Michael le suggère: superuser.com/a/142573
user12125
Merde comme ça, c'est pourquoi j'ai finalement changé ma mise en page de façon suédoise en américaine. Je passe probablement plus de temps à taper anglais + C + Perl + Bash + Vim qu'à taper nos drôles lettres å, ä et ö. Ceux-ci sont facilement produits à l'aide d'une clé de composition.
pipe

Réponses:

24

D'autres ont déjà fourni des solutions de contournement, mais quant à la raison pour laquelle cela se produit, je parie que vous appuyez accidentellement sur Alt+ Space.

J'utilise Xubuntu avec la disposition du clavier finlandais à 105 touches, donc pour moi, taper {signifie appuyer sur AltGr+ 7. Je viens de faire un test rapide dans xfce4-terminal (sur la ligne de commande bash), et appuyer sur AltGr+ Spaceproduit en effet un espace sans coupure (U + 00A0).

Je parie que ce qui se passe, c'est que vous appuyez sur la Alttouche en prévision de taper l'accolade, et parfois cela se produit avant d'appuyer sur la barre d'espace, produisant un espace insécable. Et comme il semble identique à un espace normal, vous ne réalisez pas qu'il s'est produit avant que quelque chose ne se brise mystérieusement, ce qui rend difficile pour vous de le remarquer et donc aussi difficile de désapprendre cette habitude.

Ilmari Karonen
la source
Oooh je vais donc essayer ça demain au travail. Je mets toujours un espace devant mon attelle bouclée, il serait logique que j'aie le doigt sur la touche Maj trop tôt de temps en temps!
Sarumanatee
2
@Sarumanatee: sur linux, vous pouvez en effet désactiver complètement le caractère nbsp. Peut-être que le gestionnaire de clavier d'Ubuntu a même une option pour cela. Sinon, vous pouvez régler la carte du clavier vous-même (il s'agit de supprimer une ligne, dans mon système, la carte des touches le serait /usr/share/X11/xkb/symbols/us) après avoir peaufiné l'appel setxkbmap usou la langue de votre
choix
@progo YES. Je suis sur macos en ce moment, et j'utilise Karabiner pour affiner la disposition du clavier car mon clavier le plus en bas à gauche est "fn" par défaut, ce qui je pense est complètement stupide. Vous m'avez inspiré à vous enregistrer là-bas, et il y a une option pour changer tous les espaces insécables en espace normal
Sarumanatee
Et cette option confirme la suggestion de @Ilmari Karonen, car cette option de mousqueton affiche les commandes pour créer nbsp: option + espace et option + décalage + espace. Bien que cela se soit avéré, ce n'était vraiment pas lié à vim à la fin!
Sarumanatee
Ilmari Karonen a raison, il ne s'agit donc pas d'explication, mais simplement de décrire ma solution. J'ai ajouté une correspondance de syntaxe reliant l'espace insécable au groupe de surbrillance d'erreur, afin qu'il soit visiblement différent de l'espace ordinaire. Il en va de même pour le trait d'union doux et le trait d'union insécable (qui sont liés à deux groupes de surbrillance différents car j'utilise parfois tous ces éléments intentionnellement dans du texte par opposition au code).
bpj
19

Vous pouvez ajouter une autocommande qui remplace les espaces insécables par des espaces réguliers lors de l'enregistrement de types de fichiers particuliers, par exemple. en mettant quelque chose comme ça dans votre vimrc:

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

Vous pouvez le modifier en ajoutant plus de types de fichiers ou en définissant une marque et en y retournant après l'opération de remplacement, sinon vous serez propulsé au début de la dernière ligne où un remplacement a été effectué.

Endre Both
la source
Ohh c'est assez intelligent. Cela ne me dérange pas d'être propulsé dans des endroits car cela ne se produit vraiment pas souvent, et c'est beaucoup moins ennuyeux que de passer du temps à déboguer des choses!
Sarumanatee
13

L' 'listchars'option permet d' 'list'afficher des espaces insécables. Il n'est pas défini par défaut, vous souhaiterez probablement l'ajouter.

set listchars+=nbsp:‗
jamessan
la source
Cela aide en effet. Je pense que je vais essayer de découvrir comment mettre en évidence le caractère nbsp tout le temps, pour essayer de l'attraper pendant que je le tape: o
Sarumanatee
2
@Sarumanatee Si vous ajoutez la ligne à votre ligne, vimrcelle les mettra en surbrillance lorsque vous les taperez .
Tumbler41
1

oui, c'est probablement alt + espace, ça m'arrive beaucoup quand j'utilise l'opérateur de pipe:

cat xyz.txt | grep abc

si vous maintenez la touche alt trop longue, cela créera un espace insécable après que le pipe et bash essaieront de trouver une commande "grep" puis vous diront que grep n'a pas été trouvé.

sur macos, il y avait une astuce pour changer le clavier, donc chaque fois que vous insérez un espace insécable, il sera converti / remplacé par un régulier. pour autant que je m'en souvienne, le clavier est modifié pour l'ensemble du clavier, il résout donc votre problème dans toutes les applications.

Michael
la source
alt + espace n'a rien à voir avec Vim. Par défaut (comme dans: aucun mappage utilisateur), sur la plupart des systèmes, alt + espace générera un escape qui contiendra un Esc, qui quittera le mode d'insertion dans Vim. Et c'est tout. L'espace insécable est le résultat d'un bus d'entrée ou d'un gestionnaire d'entrée sur votre système, Vim / Gvim ne le voit jamais.
grochmal