VIM открыть YAML с подсветкой синтаксиса из STDIN - PullRequest
0 голосов
/ 30 января 2019

Как бы вы указали тип синтаксиса при передаче содержимого в 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 с помощью синтаксиса hi-lighting?

Обоснование

Я хочу иметь возможность предварительно просмотреть файлы конфигурации kubernetes, прежде чем применить их к кластеру.Я хочу, чтобы у предварительного просмотра был цвет.

helm template foo | vim -R -

или

sops --decrypt foo.yaml | vim -R -
sops --decrypt foo.yaml | kubectl apply -f -

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Да, есть способ:

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.

0 голосов
/ 25 июля 2019

Опираясь на ответ 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 -.Обнаружение предназначено для Yaml-файлов Kuberntes & helm, которые начинаются с --- (helm) или apiVersion: (kubectl)

0 голосов
/ 30 января 2019

Как показано на другом сайте переполнения стека, можно передать опции для vim, используя -c

например vim -R -c 'set syntax=yaml' -

Оборачивая это вФункция bash дает мне то, что я ищу

function vaml() {
  vim -R -c 'set syntax=yaml' -;
}

Так что теперь я могу сделать

cat foo.yaml | vaml
...