为啥 vim 在制表符的位置绘制下划线以及如何避免这种情况?

Posted

技术标签:

【中文标题】为啥 vim 在制表符的位置绘制下划线以及如何避免这种情况?【英文标题】:Why is vim drawing underlines on the place of tabs and how to avoid this?为什么 vim 在制表符的位置绘制下划线以及如何避免这种情况? 【发布时间】:2011-06-05 05:55:05 【问题描述】:

没有任何特定规律,我的 vim 在选项卡位置显示下划线(见下文)。

有时文本也会发生这种情况:我输入并带有下划线。

可能是什么原因?

【问题讨论】:

【参考方案1】:

这可能是因为您正在编辑一个 html 文件,并且下划线附近的文本位于 <a> 标记内。

要禁用此功能,您可以将let html_no_rendering=1 添加到您的~/.vimrc。但是,此设置也会禁用 html 文件的粗体和斜体样式。

如果您只想禁用下划线,请参阅:help html.vim。在那里它为您提供了有关在没有underline 的情况下需要重新定义哪些突出显示组的说明。

【讨论】:

【参考方案2】:

此方法(从其他响应拼凑而成)将仅在链接的文本部分下启用下划线,而无需修改完整的 html.vim 语法文件。

    创建文件~/.vim/after/syntax/html.vim

    将以下内容粘贴到该文件中:

    " disable the current htmlLink syntax
    highlight link htmlLink text
    
    " enable a new htmlLink syntax
    syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 keepend contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLinkText,javascript,@htmlPreproc
    syn match htmlLinkText contained contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLinkText,javaScript,@htmlPreproc "^\s*\zs.\-\ze\s*$"
    syn match htmlLinkText contained contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLinkText,javaScript,@htmlPreproc "\S.\-\ze\s*$"
    
    " enable the new syntax
    hi def link htmlLinkText                Underlined
    

【讨论】:

这个答案在不删除其他功能的情况下完美运行,比公认的答案好得多。【参考方案3】:

这可能是两件事之一:

你设置了'list':(试试:set list?,如果上面写着list,试试:set nolist) 您有一些语法高亮配置,将选项卡高亮显示为下划线。添加以下映射,然后将光标放在选项卡上并按&lt;F3&gt;。如果它显示一个突出显示组,请键入 hi GROUPNAME 以确认突出显示(将 GROUPNAME 替换为尖括号中最后命名的组)。然后调整你的配色方案,去掉下划线。

映射以识别高亮组:

map <F3> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">" . " FG:" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"fg#") . " BG:" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"bg#")<CR>

【讨论】:

是的,我确实在 .vimrc 中有 :set list,只是为了发现那些使用制表符的人,尽管我们同意使用空格 :D @lyuba :ret/:retab 会将文件中的所有制表符转换为空格。此外,用空格切换所有选项卡应该很容易编写脚本。这样做,他们会因此而恨你。如果同事只使用能够处理空间的体面的编辑器......;)

以上是关于为啥 vim 在制表符的位置绘制下划线以及如何避免这种情况?的主要内容,如果未能解决你的问题,请参考以下文章

wps如何设置按tab就出4个空格?

正则表达式转义符

如何在 Vim 或 Linux 中将空格转换为制表符?

为啥word文档中下划线会在按下tab键的时候自己打开,我一直在线。

在word中的表格里如何使用制表符

为啥清理 useEffect 挂钩将 RTKQ 的结果视为 isLoading 以及如何避免该问题?