有时,每个月说一次,当我编程时,在打开花括号之前,我引入了一个无间断空间而不是常规空间。
这发生在我写() {时/>这会导致神秘的棉绒虫。不适用的CSS子句。
据我所知,这仅发生在vim中,但是由于它是我的主要编辑器,因此它可能从未在其他软件中发生过。但是,即使我的同事使用与我相同的键盘布局,我上一次工作中的同事都没有遇到过这个问题。我是唯一定期使用vim的人,这就是为什么我在这里发贴...
这至少在ubuntu 14.04、16.04和mac os x中发生了。
:set list不会不能显示出来。
我正在使用法语-加拿大语键盘布局,这意味着大括号字符是通过按alt +`
来完成的,我对此感到非常厌倦,这种情况很少出现,我一直忘记关于它。
如果您不能告诉我为什么这种情况持续发生,则可以通过某种配置以某种明显的方式突出显示该字符,这将是一个合适的答案,并且确实可以解决此问题。

评论

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

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

#1 楼

其他人已经提供了解决方法,但是由于发生这种情况的原因,我敢打赌,您不小心按了Alt + Space。 ,所以对我来说,输入{意味着按AltGr + 7。我只是在xfce4-terminal(在bash命令行上)做了一个快速测试,然后按AltGr + Space确实会产生一个不间断的空间(U + 00A0)。您正在按下Alt键以预期输入花括号,有时这是在您实际按下空格键之前产生的,这会产生不间断的空格。而且,由于它看起来与正常空间相同,因此您不会意识到它是在神秘破裂之前就发生了,这使您很难注意到它的发生,因此也很难取消这种习惯。

评论


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

–Sarumanatee
17年4月7日在0:15

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

–mike3996
17年4月7日在6:33

@progo是的。我现在在使用macOS,并且使用Karabiner来微调键盘布局,因为默认情况下,我键盘的最左下角是“ fn”,我认为这完全是愚蠢的。您启发我到那里签到,并且可以选择将所有不间断空格更改为普通空格

–Sarumanatee
17年4月7日在13:08

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

–Sarumanatee
17年4月7日在13:10

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

–bpj
17-4-8在19:58



#2 楼

您可以添加自动命令,在保存特定文件类型后,将不间断空格替换为常规空格。通过在vimrc中放入以下内容:

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


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

评论


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

–Sarumanatee
17年4月6日在20:40

这是一个很好的主意,但是设置标记并返回它有两个问题:必须污染其中一个寄存器,并且它将使您返回正确的行,但不能返回正确的列。

–朱达·罗南(JúdaRonén)
20-10-12在18:10

@JúdaRonén如果您使用反引号而不是撇号来跳跃,它将带您到右侧的列:vim.fandom.com/wiki/Using_marks

– Endre两者
20-10-16在8:37

我怎么不知道?谢谢!! ^ _ ^

–朱达·罗南(JúdaRonén)
20-10-16在16:22

#3 楼

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

set listchars+=nbsp:‗


评论


这确实有帮助。我想我会一直尝试找出如何始终突出显示nbsp字符,以尝试在键入时捕获它:o

–Sarumanatee
17年4月6日在20:29

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

– Tumbler41
17年4月11日在19:55

#4 楼

如果您不想输入不间断空格,则可以将它们映射到普通空格。可以通过以下命令全局执行此操作(将其添加到您的.vimrcinit.vim文件中):
execute "inoremap \u00A0 <Space>"

如果只想在当前缓冲区中进行映射,请使用<buffer>,如下所示:
execute "inoremap <buffer> \u00A0 <Space>"

我将此添加到了ftplugin/tex.vim文件中,因为我从不希望在TeX文件中使用U + 00A0(而是使用~)。您可以在ftplugin/css.vim中执行此操作。
如果您确实要键入不间断空格,则可以在插入模式下轻松地做到这一点,方法是按Ctrl + v,然后键入不间断空格(有关详细信息,请参见:h i_CTRL-V )。
execute技巧的积分)

评论


欢迎来到Vi和Vim!

– D. Ben Knoble♦
20-10-12在22:22

#5 楼

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

cat xyz.txt | grep abc


如果您按住alt键的时间太长,它将创建管道和bash之后的不间断空格将尝试查找命令“ grep”,然后告诉您未找到grep ..

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

评论


alt + space与Vim无关。默认情况下(如:无用户映射),在大多数系统上,alt + space会生成一些转义,其中包含一个Esc,这将退出Vim中的插入模式。这是回合。不可破坏的空间是系统上某些输入总线或输入管理器的结果,Vim / Gvim从未看到过。

–grochmal
17年4月8日在1:26