我在MacOS X Mavericks上使用以下〜/ .vimrc和MacVim 7.4:
set guifont=Menlo:h14
set encoding=utf8
set mouse=a
set expandtab
set ts=8
set showcmd
set nocompatible
set backspace=2
set viminfo='20,\"50
set history=50
set ruler
set si
set hlsearch
syntax on
set bg=light
hi Cursor term=inverse ctermfg=black guifg=black guibg=green
hi Visual term=inverse ctermfg=yellow ctermbg=black guifg=yellow guibg=black
hi Comment term=inverse ctermfg=grey ctermbg=black guifg=white guibg=black
hi Identifier term=NONE ctermfg=black guifg=black
hi Constant term=underline ctermfg=darkred guifg=red
hi Statement term=bold ctermfg=blue guifg=blue
hi PreProc term=NONE ctermfg=black guifg=black gui=underline
hi Special term=NONE ctermfg=black …Run Code Online (Sandbox Code Playgroud) 我想在Vim(GUI版本)中自定义语法突出显示.我的语言有一个现有的语法文件.我想添加到该语法,突出显示每行的背景颜色,如果该行开头>.我发现我基本上可以实现这个目标
:syntax match Output /^>.*$/
Run Code Online (Sandbox Code Playgroud)
并添加
:hi Output guibg=LightBlue
Run Code Online (Sandbox Code Playgroud)
到colourscheme.这些Output行中的文本背景以浅蓝色着色,但它也会覆盖前景色.因此大多数语法突出显示都会消失.如何在这些行中保持前景语法突出显示?
另外:有没有办法将背景的高亮显示扩展到这些线的末端(屏幕的右端)?
我使用vim(安装cygwin)来编写c++程序,但它并不突出一些c++关键字,如new,delete,public,friend,try,但强调其他如namespace,int,const,operator,true,class,include.它也不会改变运营商的颜色.
我从未改变过它的语法文件.它出什么问题了?非常感谢.
我使用定制的配色方案; 当我将其更改为desert配色方案时,突出显示没有问题,但我需要使用该配色方案,并且无法将其更改为其他内容.
我希望它显示程序如下图(我在图片中使用了带有notepad ++的配色方案):

但现在它如下图所示:

在colorscheme这里:
"Tomorrow Night Bright - Full Colour and 256 Colour
" http://chriskempson.com
"
" Hex colour conversion functions borrowed from the theme "Desert256""
" Default GUI Colours
let s:foreground = "eaeaea"
let s:background = "000000"
let s:selection …Run Code Online (Sandbox Code Playgroud) 我知道我可以使用set list listchars=...来显示NonText和SpecialKey字符,以突出显示不同类型的非文本字符.总的来说,这是直截了当的.但是它有一个视觉副作用会让我感到不安 - 当光标线设置为on时,将光标"悬停"在一条线上listchars会以不同的颜色突出显示.这个问题已经在这个线程中提到过,似乎没有一个解决方案可以解决这个问题.
作为一个结果,我开始玩隐藏功能,这给了我不一样的结果.set concealcursor=n||v||i||c让我控制隐藏字符可见的模式.我希望能够看到隐藏的字符,所以我设置了以下内容:
function! ConcealNonText()
set conceallevel=1
set concealcursor=nvic
syntax match NonText / / conceal cchar=·
endfunction
augroup ConcealNonText
autocmd!
autocmd VimEnter * call ConcealNonText()
augroup END
Run Code Online (Sandbox Code Playgroud)
因此,无论我目前处于何种模式,它都会突出显示所有空间.但同样会产生令人不安的副作用 - 当我在视觉模式中标记线条或用我的光标线突出显示一条线条时,突出显示区域会在隐藏的地方被中断找到字符.只需看截图:
选定区域的可视模式:

带光标的普通模式:

所以我想我们试试吧set concealcursor=ic.这会导致突出显示区域不间断,但会隐藏字符.

那么是否有一个地方,并在某种程度上解决了我在本文开头提到的线程,或者有什么方法可以在使用时使光标和视觉选择区域不间断set concealcursor=nvic?
我使用ViM在markdown中编写文档,我也使用latex $$符号(我使用pandoc编译)输入数学.问题是ViM语法不会忽略_美元符号中的下划线,这非常令人讨厌.例如,如果我这样写:
$$ a_1 = 0 $$
然后,由于使用了下划线,Vim会将以下所有文本突出显示为斜体.
我怎么能改变呢?
如果我能用$不同的格式突出显示内部的内容,那也很好.
我有一个脚本,它读取HTML文件并用~%foo%~Perl设置的值替换出现的内容.像这样的东西:
<span class="~%classname%~">~%hi_mom%~</span>
Run Code Online (Sandbox Code Playgroud)
会在浏览器中产生这样的东西:
<span class="classyclass">Hello World</span>
Run Code Online (Sandbox Code Playgroud)
是的,所以我想使用Vim语法高亮来区分~%foo%~HTML中的出现.默认情况下,HTML语法突出显示将生成HTML元素的属性值Magenta,我希望该~%foo%~部分是DarkMagenta.我在正确的轨道上,因为如果我注释掉tokenQuoted线(或标记线),我会得到所需的结果,但是两个匹配和突出显示未注释,令牌突出显示会覆盖tokenQuoted突出显示.
syntax match token containedin=ALLBUT,htmlString,htmlValue '\~%[^%]\+%\~'
syntax match tokenQuoted containedin=htmlString,htmlValue '\~%[^%]\+%\~'
" tokenQuoted assumes htmlString/htmlValue (:highlight String) is Magenta
highlight token term=none ctermfg=White guifg=White
highlight tokenQuoted term=none ctermfg=DarkMagenta guifg=DarkMagenta
Run Code Online (Sandbox Code Playgroud)
我正在使用的文件是在默认html.vim通过
autocmd *.html ~/.vim/syntax/html.vimin 来源后获取的.vimrc.
我正在尝试在我的.vimrc:
hi link SyntasticErrorLine SignColumn
hi link SyntasticErrorSign SignColumn
hi SyntasticErrorSign guifg=red ctermfg=red
Run Code Online (Sandbox Code Playgroud)
我想要的是具有SyntasticErrorSign与背景相同SignColumn但具有自定义前景色的突出显示组。
Vim 文档说:
- 只要你对一个链接的组使用 ":highlight" 命令,链接就会被删除。
所以,我这样做的方式无论如何都行不通,有没有办法实现这一目标?
老实说,原始字符串文字是C++语言的一个很好的补充.但是(正如预期的那样)编辑们很难正确地展示这些文字.
我正在使用Vim 7.4和开箱即用的原始字符串文字完全打破语法高亮.例如在
char const txt[] = R"(printf(")";
Run Code Online (Sandbox Code Playgroud)
第二个'('在vim中突出显示为红色.
就像是
char const txt2[] = R"( "{{" )";
Run Code Online (Sandbox Code Playgroud)
打破花括号的突出显示和基于语法的自动识别 - 依此类推.
首先,我很乐意让Vim忽略语法高亮之间R"(和之间的所有)"内容.
但请注意,原始字符串文字是灵活的 - 在第一个/最后一个双引号/括号对之间允许任意匹配字符串,例如
R"abcd()")")abcd"
Run Code Online (Sandbox Code Playgroud)
也是一个有效的原始字符串文字编码
)")"
另请参阅cppreference链接以获取语法的一般定义.
因此,我的问题是如何配置Vim,以便正确识别C++原始字符串文字.
Vim似乎已经包含了一些正确的synatx功能,突出了嵌入在宿主语言中的语言片段(例如,对于编译器 - 编译器源文件).也许它们也可以用于原始字符串文字案例?
我希望非ascii字符显示在这里讨论,但是当非ascii字符在注释中时,语法高亮消失.稍微调查一下这个问题,我在vim-manual上发现,先前启动的项目具有更高的优先级(第3项).来自help :syn-priority:
当多个语法项可能匹配时,将使用以下规则:
当多个匹配或区域项目在同一位置开始时,最后定义的项目具有优先级.
关键字优先于匹配和区域项.
- 从较早位置开始的项目优先于在以后位置开始的项目.
我目前正在使用这个:
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii cterm=underline ctermfg=red ctermbg=none term=underline
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下选项给nonascii匹配项更高优先级nextgroup:
syntax match nonascii "[^\x00-\x7F]" nextgroup=Comment
Run Code Online (Sandbox Code Playgroud)
和contains选项:
syntax match nonascii "[^\x00-\x7F]" contains=ALL
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我还尝试暂时禁用评论(highlight clear Comment)而没有达到预期的效果(我的评论没有突出显示,但是nonascii继续没有突出显示).我错过了什么?
出于某种原因,似乎带有Go文件的vim的默认设置是用红色突出显示尾随空格.在某种程度上这很好,但大多数情况下我发现它很烦人,因为每次我输入一个空格时它都会以红色突出显示.有没有办法阻止这种行为?我只用Go文件体验过这个.下面是我的vimrc,但我认为我没有放任何会影响它的东西.
set nocompatible
syntax on
set autoindent
set tabstop=4 softtabstop=0
autocmd FileType go set tabstop=8 softtabstop=0
set formatoptions=tcroql
set relativenumber
set incsearch
set hlsearch
set smartindent
filetype indent on
Run Code Online (Sandbox Code Playgroud)