Wie erstelle ich vor dem Öffnen der geschweiften Klammer versehentlich einen Leerraum ohne Unterbrechung?

20

Ich bin mir bewusst, dass dies eine seltsame Frage ist und dies möglicherweise nicht das richtige Forum ist, um sie zu posten. Dies ist jedoch seit mehreren Jahren ein Problem.

Lassen Sie uns von Zeit zu Zeit einmal im Monat sagen, dass ich beim Programmieren ein No-Break-Leerzeichen anstelle eines normalen Leerzeichens einführe , bevor ich eine geschweifte Klammer öffne.

Das passiert, sagen wir mal, wenn ich schreibe () {

Dies führt zu mysteriösen Flusen. CSS-Klauseln, die nicht zutreffen. Bis ich mich erinnere, könnte es sein.

Soweit mir bekannt ist, geschieht dies nur in vim, aber da es sich um meinen Haupteditor handelt, ist es in einer anderen Software möglicherweise noch nie passiert. Aber keiner meiner Kollegen in meinen letzten Jobs hatte jemals dieses Problem, obwohl sie das gleiche Tastaturlayout wie ich verwenden. Ich bin der einzige, der vim regelmäßig benutzt, deswegen habe ich es mir überlegt, hier etwas zu posten ...

Das ist mir zumindest in Ubuntu 14.04, 16.04 und Mac OS X passiert.

:set list verrät es nicht.

Ich verwende ein französisch-kanadisches Tastaturlayout, dh das Klammerzeichen wird durch Drücken von Alt + `erstellt

Ich habe es sehr satt, Probleme zu verursachen, es ist selten genug, dass ich es immer wieder vergesse.

Wenn Sie mir nicht sagen können, warum dies so ist, wäre eine Art Konfiguration, mit der dieses Zeichen auf eine offensichtliche Weise hervorgehoben wird, eine geeignete Antwort und eine echte Hilfe bei diesem Problem.

Sarumanatee
quelle
: Sie können Ihre Tastenbelegungen wie Michael schlägt ändern superuser.com/a/142573
user12125
Aus diesem Grund habe ich mein Layout endgültig von Schwedisch auf Amerikanisch geändert. Wahrscheinlich verbringe ich mehr Zeit mit der Eingabe von Englisch + C + Perl + Bash + Vim als mit der Eingabe unserer lustigen Buchstaben å, ä und ö. Diese können einfach mit einem Compose-Key erstellt werden.
Rohr

Antworten:

24

Andere haben bereits Workarounds bereitgestellt, aber ich wette, Sie drücken versehentlich die Taste Alt+ , um den Grund dafür zu ermitteln Space.

Ich benutze Xubuntu selbst mit dem finnischen Tastaturlayout mit 105 Tasten. Tippen {bedeutet für mich also, AltGr+ zu drücken 7. Ich habe gerade einen Schnelltest in xfce4-terminal (auf der Bash-Befehlszeile) durchgeführt, und das Drücken von AltGr+ Spaceerzeugt tatsächlich ein Leerzeichen (U + 00A0).

Ich wette, was passiert, ist, dass Sie die AltTaste drücken, bevor Sie die Klammer drücken. Manchmal geschieht dies, bevor Sie die Leertaste drücken und ein nicht unterbrechendes Leerzeichen erzeugen. Und da es wie ein normaler Raum aussieht , merkt man nicht, dass es passiert ist, bevor etwas auf mysteriöse Weise kaputt geht, was es für Sie schwierig macht, das Geschehen zu bemerken und es daher auch schwierig macht, diese Gewohnheit zu verlernen.

Ilmari Karonen
quelle
Oooh, ich werde das morgen bei der Arbeit versuchen. Ich habe immer ein Leerzeichen vor meine geschweifte Klammer gesetzt. Es wäre sinnvoll, wenn ich den Finger von Zeit zu Zeit zu früh auf die Umschalttaste legen würde!
Sarumanatee
2
@Sarumanatee: Unter Linux kannst du nbsp Charakter in der Tat komplett deaktivieren. Vielleicht hat Ubuntus Tastaturmanager sogar eine Option dafür. Wenn nicht, können Sie die Tastaturbelegung selbst einstellen (es geht darum, eine Zeile zu löschen, in meinem System wäre es die Tastaturbelegung /usr/share/X11/xkb/symbols/us), nachdem Sie den Anruf setxkbmap usoder eine andere Sprache Ihrer Wahl eingestellt haben
unperson325680
@ progo JA. Ich bin gerade auf MacOS und verwende Karabiner zur Feinabstimmung des Tastaturlayouts, da meine Tastatur in der Grundeinstellung ganz links "fn" ist, was ich für völlig dumm halte. Sie haben mich dazu inspiriert, dort einzuchecken, und es besteht die Möglichkeit, alle nicht
unterbrechenden
Und diese Option bestätigt den Vorschlag von @Ilmari Karonen, da diese Karabiner-Option die Befehle zum Erstellen von nbsp anzeigt: Option + Leerzeichen und Option + Umschalt + Leerzeichen. Obwohl es sich herausstellt, war es am Ende überhaupt nicht vim-verwandt!
Sarumanatee
Ilmari Karonen hat recht, es geht also nicht um die Erklärung, sondern nur um meine Problemumgehung. Ich habe eine Syntaxübereinstimmung hinzugefügt, die das nicht unterbrechende Leerzeichen mit der Hervorhebungsgruppe "Fehler" verknüpft, sodass es sich sichtbar vom normalen Leerzeichen unterscheidet. Das Gleiche gilt für weiche und nicht unterbrechende Bindestriche (die mit zwei verschiedenen Hervorhebungsgruppen verknüpft sind, da ich diese manchmal absichtlich im Text und nicht im Code verwende).
BPJ
19

Sie können einen automatischen Befehl hinzufügen, der beim Speichern bestimmter Dateitypen nicht unterbrechende Leerzeichen durch normale ersetzt, z. indem du so etwas in dein vimrc schreibst:

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

Sie können es optimieren, indem Sie weitere Dateitypen hinzufügen oder eine Markierung setzen und nach dem Ersetzungsvorgang dorthin zurückkehren. Andernfalls gelangen Sie zum Anfang der letzten Zeile, in der eine Ersetzung vorgenommen wurde.

Endre Both
quelle
Ohh das ist ziemlich schlau. Es macht mir nichts aus, angetriebene Orte zu sein, da dies wirklich nicht so oft vorkommt und es viel weniger ärgerlich ist, als Zeit mit dem Debuggen von Dingen zu verbringen!
Sarumanatee
13

Die 'listchars'Option bietet eine Möglichkeit, um die 'list'Anzeige von nicht unterbrechenden Leerzeichen zu ermöglichen. Es ist nicht standardmäßig festgelegt, daher möchten Sie es wahrscheinlich hinzufügen.

set listchars+=nbsp:‗
Jamessan
quelle
Das hilft in der Tat. Ich denke, ich werde versuchen, die ganze Zeit herauszufinden, wie man den nbsp char hervorhebt, und versuchen, ihn zu fangen, während ich ihn schreibe: o
Sarumanatee
2
@Sarumanatee Wenn Sie die Zeile zu Ihrer hinzufügen, werden vimrcsie tatsächlich hervorgehoben, während Sie sie eingeben .
Tumbler41
1

ja, das ist wahrscheinlich alt + space, passiert mir oft, wenn ich den Pipe-Operator benutze:

cat xyz.txt | grep abc

Wenn Sie die Alt-Taste zu lange gedrückt halten, wird ein nicht unterbrechendes Leerzeichen erzeugt, nachdem die Pipe und die Bash versucht haben, den Befehl "grep" zu finden und Ihnen dann mitzuteilen, dass grep nicht gefunden wurde.

Auf Macos gab es einen Trick, um die Tastaturbelegung zu ändern. Jedes Mal, wenn Sie ein nicht unterbrechendes Leerzeichen einfügen, wird es durch ein reguläres ersetzt. Soweit ich mich erinnere, wird die Tastaturbelegung für die gesamte Tastatur geändert, sodass Ihr Problem in allen Anwendungen behoben wird.

Michael
quelle
alt + space hat nichts mit Vim zu tun. Standardmäßig (wie in: Keine Benutzerzuordnungen) generiert alt + space auf den meisten Systemen einen Escape-Befehl, der ein Esc enthält und den Einfügemodus in Vim beendet. Und das war's auch schon. Der nicht zerbrechliche Speicherplatz ist das Ergebnis eines Eingabebusses oder eines Eingabemanagers auf Ihrem System, der von Vim / Gvim nie erkannt wird.
Grochmal