O multiplicador para 1 ou mais correspondências é \+ ; você esqueceu a barra invertida (ou o modificador \v "muito mágico"). Usar \ze no final é supérfluo. ^ corresponde a todos os começos da linha \n apenas começando na segunda linha. Por favor, esteja ciente de que o Vim usa um dialeto de expressão regular especial, então, o que vários sites da Web dizem que você pode precisar de adaptação. As :help pattern páginas são as melhores e autoritativas referências.
syn match header /^#\+\zs.*/
Além disso, sua adição de sintaxe pode estar obscurecida pelas regras de sintaxe existentes. Você pode tentar acrescentar containedin=ALL , mas essa não é uma solução geral. Talvez seja necessário analisar a sintaxe existente e criar uma solução especial para cada sintaxe. Como alternativa, você pode usar o comando :match . Isso funciona no topo (e independente) do realce de sintaxe. A desvantagem é que isso é window-local , então você precisa de :autocmd magic se quiser aplicar isso apenas a determinados buffers, ou também a splits de janelas.
match header /^#\+\zs.*/
crítica de estilo
Com seu au BufRead,BufNewFile *.txt syn match , você mescla vários aspectos: detecção de tipo de arquivo (o mapeamento de *.txt para um tipo de arquivo (aqui: implícito)), personalização de tipo de arquivo, realce de sintaxe. Seria mais limpo (e mais extensível) separar as coisas:
- Defina um% fil_de% filetype:
text. Esta detecção pode já existir na sua versão do Vim. - Defina o destaque da sintaxe (ou extensão) em
au BufRead,BufNewFile *.txt setf text(ou~/.vim/syntax/text.vimpara estender uma sintaxe existente).