VIM 使用 STDIN 中的语法高亮打开 YAML
VIM open YAML with syntax highlighting from STDIN
将内容传送到 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 -
如另一个堆栈溢出站点所示,可以使用 -c
pass options 到 vim
例如vim -R -c 'set syntax=yaml' -
将其包装在 bash 函数中可以得到我正在寻找的东西
function vaml() {
vim -R -c 'set syntax=yaml' -;
}
所以现在我可以做
cat foo.yaml | vaml
是的,有办法:
cat foo.yml | vim -c "doautocmd BufRead x.yml" -R -
这告诉 Vim,它应该像加载名为 x.yml
的文件一样执行 autocmd
。这包括文件类型检测和语法。名称x.yml
仅用于识别运行的命令,不用于任何其他用途。
也可能:
cat foo.yml | vim -c "doautocmd Filetype yaml" -R -
这告诉 Vim 在检测到文件类型 yaml
时执行属于 运行 的 autocmd
。
基于上面的 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 文件量身定制的
将内容传送到 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 -
如另一个堆栈溢出站点所示,可以使用 -c
例如vim -R -c 'set syntax=yaml' -
将其包装在 bash 函数中可以得到我正在寻找的东西
function vaml() {
vim -R -c 'set syntax=yaml' -;
}
所以现在我可以做
cat foo.yaml | vaml
是的,有办法:
cat foo.yml | vim -c "doautocmd BufRead x.yml" -R -
这告诉 Vim,它应该像加载名为 x.yml
的文件一样执行 autocmd
。这包括文件类型检测和语法。名称x.yml
仅用于识别运行的命令,不用于任何其他用途。
也可能:
cat foo.yml | vim -c "doautocmd Filetype yaml" -R -
这告诉 Vim 在检测到文件类型 yaml
时执行属于 运行 的 autocmd
。
基于上面的 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)