neovim / vim:在应用语法突出显示之前忽略电子邮件引号 替代项

当我回复包含补丁的邮件时,我想在跳过“>”引号后应用语法突出显示。具体来说,给出如下所示的 quoted 补丁:

> ---
>  fs/kernfs/dir.c        |  195 ++++++++++++++++++++++++++++++++++++++++++------
>  include/linux/kernfs.h |    3 +
>  2 files changed,177 insertions(+),21 deletions(-)
> 
> diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
> index 91e0045..dba0d42 100644
> --- a/fs/kernfs/dir.c
> +++ b/fs/kernfs/dir.c
> @@ -44,28 +44,159 @@ static int kernfs_name_locked(struct kernfs_node *kn,char *buf,size_t buflen)
>   return strlcpy(buf,kn->parent ? kn->name : "/",buflen);
>  }
>  
> -static char * __must_check kernfs_path_locked(struct kernfs_node *kn,> -                       size_t buflen)
> +/**
> + * kernfs_node_depth - compute depth of the kernfs node from root.
> + * The root node itself is considered to be at depth 0.
> + */
> +static size_t kernfs_node_depth(struct kernfs_node *kn)
>  {
> - char *p = buf + buflen;
> + size_t depth = 0;
> +
> + BUG_ON(!kn);
> + while (kn->parent) {
> +     depth++;
> +     kn = kn->parent;
> + }
> + return depth;
> +}
> +

我想要一种告诉neovim在行首忽略“>”并将其余部分当作补丁的方法。

wearekill000 回答:neovim / vim:在应用语法突出显示之前忽略电子邮件引号 替代项

Vim当前的语法突出显示设计无法轻松地解决此问题;匹配和区域通常固定在行首(^)上。使用电子邮件引号前缀时,必须忽略这些字符。就(例如 diff )语法而言,^匹配应从第3列开始,即在与差异无关的>前缀之后。 / p>

如果每个语法插件将支持可选的b:syntax_prefix而不是硬编码^,则电子邮件语法可以将该变量设置为^\%(>\s*\)\+,然后:syntax include( ) 句法。人们可能想在其前面加上数百种受支持的语法,所以这种情况不太可能发生。而且,这会使语法插件更加复杂(因为必须使用:execute将该变量插值成其他静态模式)。

替代项

如果您更改回复样式以删除>前缀(或仅编写允许您删除/恢复那些前缀的映射),则嵌入的片段(尤其是类似diff的那些片段可以通过其特征标头轻松检测到)通过我的SyntaxRange plugin自动突出显示其语法。以下配置(放入~/.vim/after/syntax/mail/SyntaxInclude.vim中可以为我完成此操作:

" mail/SyntaxInclude.vim: Include other filetype syntaxes in detected regions.
"
" INSTALL:
"   Put this into .vim/after/syntax/mail/; this way,this is sourced after the
"   core mail syntax.
"   It cannot be in .vim/ftplugin/,because these are sourced _before_ the
"   syntax files,and setting 'syntax' will clear all previous syntax
"   definitions through the functionality in $VIMRUNTIME/syntax/synload.vim,"   function s:SynSet().
"
" DEPENDENCIES:
"   - SyntaxRange.vim autoload script
"
" Copyright: (C) 2012 Ingo Karkat
"   The VIM LICENSE applies to this script; see ':help copyright'.
"
" Maintainer:   Ingo Karkat <ingo@karkat.de>
"
" REVISION  DATE        REMARKS
"   001 05-Jul-2012 file creation

" Include diff syntax for inline diffs.
call SyntaxRange#IncludeEx('start="^changeset\|^Index: \|^diff \|^--- .*\%( ----\)\@<!$" skip="^[-+@    ]" end="^$"','diff')

" vim: set ts=8 sts=4 sw=4 noexpandtab ff=unix fdm=syntax :
本文链接:https://www.f2er.com/3148008.html

大家都在问