Как мне случайно создать пространство без перерыва перед открытием фигурной скобки?

20

Я осознаю, что это странный вопрос, и это может быть даже не тот форум, на котором можно его опубликовать. Но это было проблемой в течение нескольких лет.

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

Это случается, скажем, когда я пишу () {

Это приводит к таинственным ошибкам ворса. Пункты CSS, которые не применяются. Пока я не помню, это может быть так.

Насколько я знаю, это происходит только в vim, но, поскольку это мой главный редактор, в другом программном обеспечении этого просто не могло быть. Но никто из моих коллег на моих последних работах никогда не сталкивался с такой проблемой, хотя они используют ту же раскладку клавиатуры, что и я. Хотя я единственный, кто регулярно использует vim, поэтому я решил опубликовать здесь ...

Это случилось со мной по крайней мере в Ubuntu 14.04, 16.04 и Mac OS X.

:set list не раскрывает это.

Я использую раскладку клавиатуры french-canadien, что означает, что символ скобки делается нажатием alt + `

Я очень устал от этого вызывающего проблемы, достаточно редко, я продолжаю забывать об этом.

Если вы не можете сказать мне, почему это происходит, какая-то конфигурация для выделения этого символа каким-то очевидным способом будет подходящим ответом и действительно поможет с этой проблемой.

Sarumanatee
источник
Вы можете изменить комбинацию клавиш, как предлагает Майкл: superuser.com/a/142573
user12125
Вот дерьмо, вот почему я окончательно сменил свой макет с шведского на американский. Я, вероятно, трачу больше времени на набор английского + C + Perl + Bash + Vim, чем на смешные буквы å, ä и ö. Они легко создаются с помощью клавиши композитора.
труба

Ответы:

24

Другие уже предоставили обходные пути, но я уверен, что по этой причине вы случайно нажали Alt+ Space.

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

Могу поспорить, что происходит то, что вы нажимаете Altклавишу в ожидании ввода фигурной скобки, и иногда это происходит до того, как вы действительно нажимаете клавишу пробела, создавая неразрывный пробел. И поскольку оно выглядит идентично обычному пространству, вы не понимаете, что это произошло до того, как что-то таинственно сломалось, из-за чего вам трудно заметить, что это происходит, и, следовательно, также трудно отучиться от этой привычки.

Илмари Каронен
источник
Ооо, я так собираюсь попробовать это завтра на работе. Я всегда ставлю пробел перед своей фигурной скобкой. Было бы разумно, чтобы время от времени я слишком рано держал палец на клавише Shift!
Саруманате
2
@Sarumanatee: в Linux вы действительно можете полностью отключить символ nbsp. Возможно, у менеджера клавиатуры Ubuntu даже есть опция для этого. Если нет, то вы можете настроить клавиатуру карты самостоятельно (это вопрос удаления одной строки, в моей системе раскладка будет /usr/share/X11/xkb/symbols/us) после точной настройки вызова setxkbmap usили любого другого языка ваших предпочтений
unperson325680
@progo ДА. Сейчас я нахожусь на macos и использую Karabiner для точной настройки раскладки клавиатуры, так как самый нижний левый угол моей клавиатуры по умолчанию - "fn", что я считаю совершенно тупым. Вы вдохновили меня на регистрацию там, и есть возможность изменить все неразрывные пробелы на нормальные пробелы
Sarumanatee
И эта опция подтверждает предложение @Ilmari Karonen, так как эта опция karabiner отображает команды для создания nbsp: option + space и option + shift + space. Хотя, оказывается, это действительно не было связано с vim в конце концов!
Саруманати
Илмари Каронен прав, так что дело не в объяснении, а в описании моего обходного пути. Я добавил синтаксическое сопоставление, связывающее неразрывный пробел с группой выделения ошибок, чтобы оно заметно отличалось от обычного пробела. То же самое касается мягких дефисов и неразрывных дефисов (которые связаны с двумя различными группами подсветки, поскольку я иногда использую все это намеренно в тексте, а не в коде).
17
19

Вы можете добавить автокоманду, которая заменяет неразрывные пробелы обычными при сохранении определенных типов файлов, например. поместив что-то подобное в ваш vimrc:

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

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

Endre Both
источник
О, это довольно умно. Я не возражаю против того, чтобы быть продвинутыми местами, так как это действительно случается не так часто, и это гораздо менее раздражает, чем тратить время на отладку вещей!
Саруманати
13

'listchars'Вариант обеспечивает средство , чтобы сделать 'list'дисплей неразрывных пробелов. Это не установлено по умолчанию, поэтому вы, вероятно, хотите добавить его.

set listchars+=nbsp:‗
jamessan
источник
Это действительно помогает. Я думаю, что я попытаюсь выяснить, как все время выделять символ nbsp, чтобы попытаться поймать его, когда я его печатаю: o
Sarumanatee
2
@Sarumanatee Если вы добавите строку в свою строку, vimrcона будет выделять их по мере их ввода.
Tumbler41
1

да, это, вероятно, alt + space, часто случается со мной, когда я использую оператор pipe:

cat xyz.txt | grep abc

Если вы удерживаете клавишу Alt слишком долго, она создаст неразрывный пробел после того, как канал и bash попытаются найти команду «grep», а затем сообщат вам, что grep не был найден.

на макросах была некоторая хитрость для изменения раскладки клавиатуры, поэтому каждый раз, когда вы вставляете неразрывный пробел, он будет преобразован / заменен на обычный. Насколько я помню, раскладка клавиатуры изменяется для всей клавиатуры, поэтому она решает вашу проблему во всех приложениях.

Майкл
источник
alt + space не имеет ничего общего с Vim. По умолчанию (как в: нет пользовательских сопоставлений), в большинстве систем alt + space генерирует некоторый escape, который будет содержать Esc, который выйдет из режима вставки в Vim. И это бой. Неразрывное пространство является результатом некоторой шины ввода или менеджера ввода в вашей системе, Vim / Gvim никогда не видит его.
Grochmal