Jak mogę przypadkowo stworzyć przestrzeń bez przerwy przed otwarciem nawiasów klamrowych?

20

Zdaję sobie sprawę, że to dziwne pytanie i może to nawet nie być odpowiednie forum do opublikowania go. Ale to był problem od kilku lat.

Od czasu do czasu, powiedzmy raz w miesiącu, kiedy programuję, wprowadzam spację No-Break zamiast zwykłej spacji, zanim otworzę nawias klamrowy.

Tak się dzieje, powiedzmy, kiedy piszę () {

Prowadzi to do tajemniczych robaków. Klauzule CSS, które nie mają zastosowania. Dopóki nie zapamiętam, to może być to.

O ile mi wiadomo, dzieje się tak tylko w vimie, ale ponieważ jest to mój główny edytor, może nigdy nie zdarzyć się w innym oprogramowaniu. Ale żaden z moich współpracowników w moich ostatnich pracach nigdy nie miał tego problemu, mimo że używają tego samego układu klawiatury co ja. Jednak jestem jedynym, który regularnie korzysta z vima, dlatego postanowiłem tutaj pisać ...

Zdarzyło mi się to przynajmniej w Ubuntu 14.04, 16.04 i Mac OS X.

:set list nie ujawnia tego.

Używam francuskiego układu klawiatury Canadien, co oznacza, że ​​znak nawiasu klamrowego jest wykonywany przez naciśnięcie Alt + `

Jestem bardzo zmęczony tym, że powodują problemy, dość rzadko zapominam o tym.

Jeśli nie możesz mi powiedzieć, dlaczego tak się dzieje, to jakaś konfiguracja podkreślająca tę postać w jakiś oczywisty sposób byłaby odpowiednią odpowiedzią i naprawdę pomogłaby w rozwiązaniu tego problemu.

Sarumanatee
źródło
Możesz zmienić swoje skróty klawiszowe, jak sugeruje Michael: superuser.com/a/142573
user12125
Cholera, właśnie dlatego ostatecznie zmieniłem mój układ ze szwedzkiego na amerykański. Prawdopodobnie spędzam więcej czasu, pisząc po angielsku + C + Perl + Bash + Vim, niż pisząc nasze śmieszne litery å, ä i ö. Można je łatwo wytworzyć za pomocą klawisza tworzenia.
rura

Odpowiedzi:

24

Inni już udostępnili obejścia, ale jeśli tak się dzieje, założę się, że przypadkowo naciskasz Alt+ Space.

Sam używam Xubuntu z 105-klawiszowym układem fińskiej klawiatury, więc dla mnie pisanie {oznacza naciśnięcie AltGr+ 7. Właśnie zrobiłem szybki test na xfce4-terminalu (w linii poleceń bash), a naciśnięcie AltGr+ Spacerzeczywiście tworzy przestrzeń bez przerw (U + 00A0).

Założę się, że to, co się dzieje, polega na tym, że naciskasz Altklawisz w oczekiwaniu na wpisanie nawiasu klamrowego, a czasami dzieje się to zanim faktycznie naciśniesz spację, tworząc niełamliwe miejsce. A ponieważ wygląda identycznie jak normalna przestrzeń, nie zdajesz sobie sprawy, że stało się to, zanim coś tajemniczo się zepsuło, co utrudnia zauważenie, że tak się dzieje, a tym samym trudne jest oduczenie tego nawyku.

Ilmari Karonen
źródło
Oooh, więc spróbuję tego jutro w pracy. Zawsze stawiam spację przed nawiasami klamrowymi. To ma sens, że od czasu do czasu trzymam palec na klawiszu Shift!
Sarumanatee
2
@ Sarumanatee: na Linuksie można rzeczywiście całkowicie wyłączyć znak nbsp. Być może menedżer klawiatury Ubuntu ma nawet taką opcję. Jeśli nie można dostroić klawiatura map siebie (jest to kwestia usunięcie jednej linii, w moim systemie keymap będzie /usr/share/X11/xkb/symbols/us) po dostrajanie połączenia setxkbmap uslub cokolwiek językiem preferencjami
unperson325680
@progo TAK. Korzystam teraz z makr i używam Karabinera, aby dostroić układ klawiatury, ponieważ najbardziej dolna lewa klawiatura to domyślnie „fn”, co moim zdaniem jest całkowicie głupie. Zainspirowałeś mnie do zameldowania się tam, a istnieje możliwość zmiany wszystkich nietłukących się spacji na normalne
Sarumanatee
Ta opcja potwierdza sugestię @Ilmari Karonen, ponieważ ta opcja karabinka wyświetla polecenia do utworzenia nbsp: opcja + spacja i opcja + shift + spacja. Chociaż okazuje się, że tak naprawdę nie było to wcale związane z vimem!
Sarumanatee
Ilmari Karonen ma rację, więc nie chodzi tu o wyjaśnienie, ale tylko o opisanie mojego obejścia. Dodałem dopasowanie składni łączące nieprzerwaną spację z grupą wyróżniania Błąd, dzięki czemu jest ona wyraźnie różna od zwykłej spacji. To samo dotyczy łącznika miękkiego i niełamliwego (które są powiązane z dwiema różnymi grupami podświetlenia, ponieważ czasami używam ich celowo w tekście zamiast w kodzie).
bpj
19

Możesz dodać komendę automatyczną, która zastępuje niełamliwe spacje zwykłymi po zapisaniu określonych typów plików, np. umieszczając coś takiego w swoim vimrc:

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

Możesz go ulepszyć, dodając więcej typów plików lub ustawiając znak i powracając do niego po operacji zamiany, w przeciwnym razie zostaniesz przeniesiony na początek ostatniego wiersza, w którym dokonano zamiany.

Endre Both
źródło
Och, to całkiem sprytne. Nie mam nic przeciwko byciu napędzanym miejscami, ponieważ tak naprawdę nie zdarza się to często i jest to o wiele mniej denerwujące niż spędzanie czasu na debugowaniu rzeczy!
Sarumanatee
13

Ta 'listchars'opcja umożliwia 'list'wyświetlanie nienaruszających się spacji. Nie jest domyślnie ustawiony, więc prawdopodobnie chcesz go dodać.

set listchars+=nbsp:‗
jamessan
źródło
To naprawdę pomaga. Myślę jednak, że spróbuję dowiedzieć się, jak cały czas wyróżniać znak nbsp, aby spróbować go złapać podczas pisania: o
Sarumanatee
2
@ Sarumanatee Jeśli dodasz wiersz do swojego vimrc, w rzeczywistości podświetli je podczas pisania.
Tumbler41 11.04.17
1

tak, to prawdopodobnie alt + spacja, często mi się zdarza, gdy używam operatora potoku:

cat xyz.txt | grep abc

jeśli przytrzymasz klawisz Alt zbyt długo, utworzy on nieprzerwaną spację po potoku, a bash spróbuje znaleźć polecenie „grep”, a następnie powie, że grep nie został znaleziony.

na komputerach Mac istniała sztuczka polegająca na zmianie mapy klawiszy, więc za każdym razem, gdy wstawisz niełamliwe miejsce, zostanie ono przekonwertowane / zastąpione zwykłym. o ile pamiętam, mapa klawiszy została zmieniona dla całej klawiatury, więc naprawia twój problem we wszystkich aplikacjach.

Michael
źródło
alt + spacja nie ma nic wspólnego z Vimem. Domyślnie (jak w: brak mapowań użytkowników), w większości systemów alt + space wygeneruje escape, który będzie zawierał Esc, który opuści tryb wstawiania w Vimie. I to wszystko. Nieprzerwana przestrzeń jest wynikiem działania magistrali wejściowej lub menedżera wejściowego w twoim systemie, Vim / Gvim nigdy jej nie widzi.
grochmal