Obs. overs.: Den originale artikkelen ble skrevet av Josh Rosso — en arkitekt fra VMware, tidligere ansatt i selskaper som CoreOS og Heptio, og også medforfatter av Kubernetes alb-ingress-controller. Forfatteren deler en liten oppskrift som kan være veldig nyttig for «den gamle skolen» ingeniører som foretrekker vim selv i en tid hvor cloud native dominerer.

Skriver du YAML-manifest for Kubernetes i vim? Har du tilbrakt utallige timer på å prøve å forstå hvor i spesifikasjonen neste felt skal være? Kanskje du vil sette pris på en rask påminnelse om forskjellen args og command? Есть хорошие новости! Vim легко привязать к , for å få automatisk fullføring, validering og andre bekvemmeligheter. I denne artikkelen vil vi se på hvordan man setter opp klienten for språkserveren.
(Den originale artikkelen har også , der forfatteren forklarer og demonstrerer innholdet.)
Språkserver
Språkservere (language servers) forteller redaktører og IDE-er om mulighetene i programmeringsspråk, for å oppnå dette kommuniserer de seg imellom via en spesiell protokoll - (LSP). Dette er en fantastisk tilnærming: det lar en enkelt implementering gi data til mange redaktører/IDE-er. Jeg har allerede om — en språkserver for Golang — og hvordan den kan brukes i . Handlingene for å få autocompletion i YAML for Kubernetes er de samme.

For at vim skal fungere beskrevet på denne måten, er det nødvendig å installere klienten til språkserveren. To kjente metoder jeg kjenner til er og . I artikkelen vil jeg se på coc.vim — er den mest populære pluginen for øyeblikket. Den kan installeres via :
" Bruk utgivelsesgrenen (Anbefalt)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Eller bygg fra kildekoden ved å bruke yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} For kjøring coc (og dermed serveren yaml-language-server) krever at node.js er installert:
curl -sL install-node.now.sh/lts | bash Når coc.vim når du er konfigurert, installer serverer utvidelsen coc-yaml fra vim:
:CocInstall coc-yaml 
Til slutt vil du sannsynligvis ønske å begynne med konfigurasjonen coc-vim, presentert . Spesielt aktiverer den kombinasjonen +mellomrom for å kalle opp automatisk fullføring.
Innstilling av oppdagelsen av yaml-language-server
For å coc kan benytte yaml-language-server, da må det be om å laste inn skjemaet fra Kubernetes når du redigerer YAML-filer. Dette gjøres ved å redigere coc-config:
:CocConfig I konfigurasjonen må du legge til kubernetes for all files yaml. I additionally use a language server for golang, so my overall config looks like this:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": "/*.yaml"
}
} kubernetes — a reserved field, informing the language server to load the Kubernetes schema from the URL specified in . yaml.schemas can be expanded with additional schema support — see more in the .
Now you can create a YAML file and start using autocomplete. Pressing +mellomrom (or another combination set in vim) should show available fields and documentation according to the current context:

Here +space works because I configured inoremap coc#refresh(). If you haven't done this — see for a configuration example.
Choosing a Kubernetes API version
At the time of writing this article, the yaml-language-server comes with Kubernetes schemas 1.14.0. I haven't found a way to dynamically choose the schema, so I opened . Luckily, since the language server is written in TypeScript, it's quite easy to manually change the version. You just need to find the file server.ts.
To locate it on your machine, just open a YAML file with vim and find the process with yaml-language-server.
ps aux | grep -i yaml-language-server
joshrosso 2380 45.9 0.2 5586084 69324 ?? S 9:32PM 0:00.43 /usr/local/Cellar/node/13.5.0/bin/node /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js --node-ipc --node-ipc --clientProcessId=2379
joshrosso 2382 0.0 0.0 4399352 788 s001 S+ 9:32PM 0:00.00 grep -i yaml-language-serverFor us, the process 2380 is relevant: this is the one that vim uses during YAML file editing.
As you can easily see, the file is located in /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Just edit it by changing the value KUBERNETES_SCHEMA_URL, for example, to version 1.17.0:
// old 1.14.0 schema
//exports.KUBERNETES_SCHEMA_URL = "https://raw.githubusercontent.com/garethr/kubernetes-json-schema/master/v1.14.0-standalone-strict/all.json";
// new 1.17.0 schema in instrumenta repo
exports.KUBERNETES_SCHEMA_URL = "https://raw.githubusercontent.com/instrumenta/kubernetes-json-schema/master/v1.17.0-standalone-strict/all.json"; Depending on the version of the used coc-yaml the variable's location in the code may differ. Also note that I changed the repository from garethr En funksjon har blitt instrumenta. It seems that garethr switched to support the schemas there.
To check that the change has taken effect, see if the field that was previously [not there in earlier Kubernetes versions] appears. :

Sammendrag
Eg håpar denne moglegheita gledde deg like mykje som meg. God YAML'ing! Ikkje gløym å sjå på desse repositoria for å bli betre kjend med verktøya nevnt i artikkelen:
- coc-vim: ;
- coc-yaml: .
P.S. from the translator
Og det finst også , og .
Also read in our blog:
- «»;
- «».
Kilde: habr.com
