在将内容传递到vim -R
时如何指定语法类型?
由于vim具有vim.yalm插件,因此可以正确显示文件内容
vim -R foo.yaml
但是,使用管道时不会检测语法
cat foo.yaml | vim -R -
一种解决方法是在打开文件后键入:set syntax=yaml
。
我希望能够执行以下操作:
cat foo.yaml | vim -R - --syntax=yaml
是否可以通过语法高亮将文件内容传递到vim -R
?
理由
我希望能够在将Kubernetes配置文件应用到集群之前对其进行预览。我希望预览具有颜色。
helm template foo | vim -R -
或
sops --decrypt foo.yaml | vim -R -
sops --decrypt foo.yaml | kubectl apply -f -
答案 0 :(得分:2)
是的,有一种方法:
cat foo.yml | vim -c "doautocmd BufRead x.yml" -R -
这告诉Vim,应该执行autocmd
,就像加载了名为x.yml
的文件一样。这包括文件类型检测以及语法。名称x.yml
仅用于标识要运行的命令,而不用于其他任何用途。
也可以:
cat foo.yml | vim -c "doautocmd Filetype yaml" -R -
这告诉Vim执行检测到文件类型autocmd
时运行的yaml
。
答案 1 :(得分:1)
如在另一个堆栈溢出站点上所示,可以pass options使用-c
来vim
例如vim -R -c 'set syntax=yaml' -
将其包装在bash函数中可以满足我的需求
function vaml() {
vim -R -c 'set syntax=yaml' -;
}
现在我可以做
cat foo.yaml | vaml
答案 2 :(得分:1)
基于上面的autocmd答案:将以下内容添加到您的.vimrc
或.vim/ftdetect/k8s-yaml.vim
中:
" file detection of kubernetes yamls
function! DetectYaml()
if getline(1) =~ 'apiVersion:'
setfiletype yaml
endif
if getline(1) =~ '---'
setfiletype yaml
endif
endfunction
augroup filetypedetect
au StdinReadPost * call DetectYaml()
augroup END
这样,您可以将输出通过管道传递到vim -
中。该检测是针对以---
(helm)或apiVersion:
(kubectl)开头的Kuberntes和Helm Yaml文件的。