如何在打开花括号之前意外地创建一个不间断空间?


20

我意识到这是一个奇怪的问题,它甚至可能不是发布它的合适论坛。但这已经是一个问题了几年了。

有时,每个月说一次,当我编程时,在打开花括号之前,我会引入一个No-Break空间而不是常规空间。

发生这种情况,可以说我在写作时 () {

这会导致神秘的棉绒虫。不适用的CSS子句。直到我记得可能是这样。

据我所知,这仅发生在vim中,但是由于它是我的主编辑器,因此它可能从未在其他软件中发生过。但是,即使我的同事使用与我相同的键盘布局,我上一次工作中的同事都没有遇到过这个问题。我是唯一定期使用vim的人,这就是为什么我在这里发贴...

至少在Ubuntu 14.04、16.04和Mac OS X中,这发生在我身上。

:set list 没有透露。

我正在使用法语-加拿大语键盘布局,这意味着大括号字符是通过按alt +`

我对这种引起问题的方式感到非常厌倦,这种情况很少被我忘记。

如果您不能告诉我为什么这种情况持续发生,以某种明显的方式突出显示该字符的配置将是一个合适的答案,并且确实可以解决此问题。


您可以按照Michael的建议更改键绑定:superuser.com/a/142573
user12125

像这样的废话是为什么我最终将自己的布局从瑞典永久性地转换为美国人。与输入有趣的å,ä和ö字母相比,输入英语+ C + Perl + Bash + Vim所花的时间可能更多。使用组合键可以很容易地产生它们。
管道

Answers:


24

其他人已经提供了解决方法,但是由于发生这种情况的原因,我敢打赌您不小心按了Alt+ Space

我自己使用的是具有105键芬兰语键盘布局的Xubuntu,所以对我来说,键入{意味着按AltGr+ 7。我只是在xfce4-terminal(在bash命令行上)进行了快速测试,然后按AltGr+ Space确实会产生一个不间断的空格(U + 00A0)。

我敢打赌,正在发生的事情是您正在按下Alt键以预期输入大括号,有时是您实际按下空格键之前产生了一个不间断的空格。而且,由于它看上去与正常空间相同,因此您不会意识到它是在神秘破坏之前就已经发生的,这使您很难注意到它的发生,因此也很难忘记这种习惯。


噢,我很想明天在工作中尝试这个。我总是在花括号前留一个空格,这很有意义,我不时将手指放在换档键上!
Sarumanatee

2
@Sarumanatee:在Linux上,您确实可以完全禁用nbsp字符。也许Ubuntu的键盘管理器甚至可以选择。如果不是,您可以/usr/share/X11/xkb/symbols/us在微调呼叫setxkbmap us或您喜欢的任何语言之后自行调整键盘映射(这是删除一行的问题,在我的系统中,键盘映射将是)
unperson325680 '17

@progo是的。我现在在使用macOS,并且使用Karabiner来微调键盘布局,因为默认情况下,我键盘的最左下角是“ fn”,我认为这完全是愚蠢的。您启发了我在此处进行检查,并且可以选择将所有不中断的空间更改为正常空间
Sarumanatee

该选项证实了@Ilmari Karonen的建议,因为该karabiner选项显示了创建nbsp的命令:option + space和option + shift + space。尽管事实证明,但最终它确实与vim无关!
Sarumanatee '17

Ilmari Karonen是正确的,因此这与解释无关,而仅是描述我的解决方法。我添加了语法匹配,将不间断空间链接到“错误”突出显示组,因此它与普通空间明显不同。软连字符和不间断连字符也是如此(它们链接到两个不同的突出显示组,因为有时我会故意在文本中而不是代码中使用所有这些字符)。
bpj

19

您可以添加一个自动命令,该命令在保存特定文件类型时将常规的空格替换为常规的空格。通过在您的vimrc中放置以下内容:

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

您可以通过添加更多文件类型或设置标记并在替换操作之后返回它来进行调整,否则,您将被推进到进行替换的最后一行的开头。


哦,那真是太聪明了。我不介意被推进,因为这种情况确实很少发生,而且比花时间调试事情要麻烦得多!
Sarumanatee'Apr

13

'listchars'选项提供了一种使'list'显示不间断空格的方法。默认情况下未设置,因此您可能要添加它。

set listchars+=nbsp:‗

确实有帮助。我想我会一直尝试找出如何突出显示nbsp字符,以便在我键入时尝试抓住它:o
Sarumanatee

2
@Sarumanatee如果将行添加到您的行中vimrc,实际上,在键入时会突出显示它们。
Tumbler41年

1

是的,这可能是alt +空格,当我使用管道运算符时,在我身上经常发生:

cat xyz.txt | grep abc

如果您按住Alt键的时间太长,它将在管道之后创建一个不间断的空间,bash会尝试找到命令“ grep”,然后告诉您未找到grep。

在macOS上,有一些技巧可以更改键盘映射,因此,每次插入不间断的空格时,它将被常规规则转换/替换。据我所记得,整个键盘的键盘映射都已更改,因此它可以解决所有应用程序中的问题。


alt + space 与Vim 无关。默认情况下(如:无用户映射),在大多数系统上,alt + space会生成一些转义,其中包含一个Esc,它将退出Vim中的插入模式。这是回合。不可破坏的空间是系统上某些输入总线或输入管理器的结果,Vim / Gvim从未看到过。
grochmal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.