我正在使用此帖子的格式为PGP加密的密码创建一个Vim语法高亮文件:http://pig-monkey.com/2013/04/password-management-vim-gnupg/。即,语法如下:
Super Ecommerce{{{
user: foobar
pass: g0d
Comments{{{
birthday: 1/1/1911
first car: delorean
}}}
}}}
已经折叠正在使用{{{
和}}}
来防止肩膀冲浪。但是,当一个条目被扩展时,我还想用红色背景和红色前景文本隐藏密码,以便在扩展时继续防止肩膀冲浪。
目前,我通过将密码包装在(((
和)))
块中来解决此问题。这样,我可以控制隐藏哪些密码,以及哪些密码不是。我解决这个问题的Vim语法是:
set conceallevel=3
syntax region gpgpassPasswords start="\v\(\(\(" end="\v\)\)\)"
highlight link gpgpassPasswords Conceal
highlight gpgpassPasswords ctermbg=red ctermfg=red
我们的“超级电子商务”区块将如下所示:
Super Ecommerce{{{
user: foobar
pass: (((g0d)))
...
然后(((g0d)))
将在红色背景上打印为红色前景文本,从而有效地隐藏密码。
但是,我认为我宁愿隐瞒^\s*pass:\s*
之后没有(((
和)))
的所有密码。不幸的是,我似乎无法通过隐藏密码来获得正确的语法,而不会隐藏其他所有内容。
如何在没有额外区域字符的情况下隐藏密码?
答案 0 :(得分:2)
我认为以下内容应该有效:
syn match MyPassword /\%(^\s*pass:\s*\)\@<=\S\+/ conceal cchar=*
setl conceallevel=2 concealcursor=nv
然而,这取决于您的其他语法规则。使用较新的Vims,您也可以使用matchadd()
函数调用。
答案 1 :(得分:1)
使用\zs
(匹配开始)和\ze
(匹配结束)来限制匹配区域:
:syntax match gpgpassPasswords /^\s*pass:\s*\zs.*\ze$/