Vim语法隐藏密码

时间:2015-12-31 10:17:52

标签: vim passwords gnupg

我正在使用此帖子的格式为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*之后没有((()))的所有密码。不幸的是,我似乎无法通过隐藏密码来获得正确的语法,而不会隐藏其他所有内容。

如何在没有额外区域字符的情况下隐藏密码?

2 个答案:

答案 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$/