Як я можу випадково створити пробіл без перерви перед відкриттям фігурної дужки?


20

Я усвідомлюю, що це дивне питання, і це може бути навіть не правильним форумом для його розміщення. Але це вже кілька років проблема.

Час від часу, скажімо, раз на місяць, коли я програмую, я вводите пробіл без перерви замість звичайного місця, перш ніж відкривати фігурну дужку.

Це буває, скажімо, коли я пишу () {

Це призводить до появи таємничих клопів-волосінь. Статті CSS, які не застосовуються. Поки я не пам’ятаю це могло бути.

Наскільки мені відомо, це відбувається лише у vim, але оскільки це мій головний редактор, це може просто ніколи не траплятися в іншому програмному забезпеченні. Але жоден з моїх колег на моїх останніх роботах ніколи не мав такої проблеми, хоча вони використовували ту саму розкладку клавіатури, що і я. Я єдиний, хто регулярно використовує vim, тому я хоч і розміщую тут ...

Це сталося зі мною щонайменше в ubuntu 14.04, 16.04 та mac os x.

:set list не розкриває цього.

Я використовую французько-канадську розкладку клавіатури, тобто символ дужки робиться натисканням клавіш alt + `

Мені дуже набридло це спричиняти проблеми, це досить рідко, я про це забуваю.

Якщо ви не можете сказати мені, чому це все відбувається, якийсь конфігурація, щоб виділити цього персонажа якимось очевидним способом, була б підходящою відповіддю і справді допоможе у вирішенні цієї проблеми.


Ви можете змінити свої клавіші, як пропонує Майкл: superuser.com/a/142573
user12125

Таке лайно, ось чому я нарешті переключила свій макет назавжди з шведського на американський. Я, мабуть, витрачаю більше часу на введення англійської + C + Perl + Bash + Vim, ніж я вводячи наші смішні букви å, ä і ö. Вони легко виробляються за допомогою композитного ключа.
труба

Відповіді:


24

Інші вже надали робочі місця, але що стосується причини, чому це відбувається, я думаю, що ви випадково натискаєте Alt+ Space.

Я сам використовую Xubuntu з розкладкою фінської клавіатури на 105 клавіш, тому для мене введення {означає натискання AltGr+ 7. Я щойно зробив швидкий тест у xfce4-терміналі (у командному рядку bash), і натискання AltGr+ Spaceдійсно створює пробіл без перерви (U + 00A0).

Б'юсь об заклад, що відбувається, що ти натискаєш Altклавішу в очікуванні набору дужки, а іноді це відбувається ще до того, як ти фактично натиснеш пробіл, створюючи пробіл, що не розбивається. І оскільки це виглядає ідентично звичайному простору, ви не розумієте, що це сталося до того, як щось таємниче зламається, що ускладнює вам помітити це, і, таким чином, також важко засвоїти цю звичку.


Ой, я так спробую це спробувати завтра на роботі. Я завжди розміщую пробіл перед фігурною фігурною фігурною стрічкою. Було б сенс, що час від часу я пальцем натискаю клавішу зміни!
Sarumanatee

2
@Sarumanatee: на Linux ви дійсно можете взагалі відключити символ nbsp. Можливо, у менеджера клавіатур Ubuntu навіть є варіант для нього. Якщо ні, ви можете налаштувати карту клавіатури самостійно (справа в тому, щоб видалити один рядок, в моїй системі буде карта клавіш /usr/share/X11/xkb/symbols/us) після виклику finetuning setxkbmap usабо будь-якої мови на ваш уподобання
unperson325680

@progo ТАК. Зараз я перебуваю на macos, і використовую Karabiner, щоб тонко налаштувати розкладку клавіатури, оскільки найменша ліва частина моєї клавіатури "fn" за замовчуванням, що, на мою думку, є абсолютно німим. Ви надихнули мене
зайти

І цей варіант підтверджує пропозицію @Ilmari Karonen, оскільки в цьому варіанті карабінера відображаються команди для створення nbsp: option + space, і option + shift + space. Хоча, виявляється, це зрештою взагалі не було пов'язано з vim!
Саруманате

Ілмарі Каронен має рацію, тому мова йде не про пояснення, а просто для опису мого вирішення. Я додав збіг синтаксису, що пов'язує нерозривний простір до групи виділення помилок, так що він помітно відрізняється від звичайного простору. Те ж саме стосується м'яких дефісів і нерозривних дефісів (які пов'язані з двома різними групами виділень, оскільки я інколи навмисно використовую все це в тексті на відміну від коду).
bpj

19

Ви можете додати автокоманду, яка замінює нерозривні пробіли звичайними, зберігаючи певні типи файлів, наприклад. помістивши щось подібне у свій vimrc:

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

Ви можете налаштувати його, додавши більше типів файлів або встановивши позначку та повернувшись до неї після операції заміни, оскільки в іншому випадку ви будете переведені на початок останнього рядка, де було здійснено заміну.


О, це дуже розумно. Я не заперечую за тим, щоб просуватися місцями, оскільки це насправді трапляється не так часто, і це набагато менше дратує, ніж витрачати час на налагодження речей!
Саруманате

13

'listchars'Варіант забезпечує засіб , щоб зробити 'list'дисплей нерозривних пробілів. Він не встановлений за замовчуванням, тому, ймовірно, ви хочете додати його.

set listchars+=nbsp:‗

Це справді допомагає. Я думаю, я спробую дізнатись, як весь час підсвічувати nbsp char, щоб спробувати зловити його, коли я його
набираю

2
@Sarumanatee Якщо ви додасте рядок до свого, vimrcвін насправді виділить їх під час введення.
Tumbler41

1

так, це, мабуть, alt + пробіл, трапляється зі мною багато, коли я використовую оператор труби:

cat xyz.txt | grep abc

якщо ви утримуєте клавішу alt занадто довго, вона створить нерозривний простір після того, як "pipe" і "bash" спробують знайти команду "grep", а потім скажуть вам, що grep не знайдено.

на macos був якийсь трюк, щоб змінити карту клавіш, тому кожен раз, коли ви вставляєте нерозривний пробіл, він буде перетворений / замінений на звичайний. наскільки я пам’ятаю, клавіатурну карту змінюють для всієї клавіатури, тому вона виправляє вашу проблему у всіх програмах.


alt + простір не має нічого спільного з Vim. За замовчуванням (як у: відсутні відображення користувачів), у більшості систем alt + простір генерує деякий вихід, який буде містити Esc, який вийде з режиму вставки у Vim. І це бій. Нерозривний простір є результатом деякої вхідної шини або менеджера вводу у вашій системі, Vim / Gvim ніколи не бачить цього.
грохмаль
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.