Vim с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ YAML для Kubernetes

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ написал Josh Rosso β€” Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΠ· VMware, Ρ€Π°Π½Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠΈΠΉ Π² Ρ‚Π°ΠΊΠΈΡ… компаниях, ΠΊΠ°ΠΊ CoreOS ΠΈ Heptio, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ соавтором Kubernetes alb-ingress-controller. Автор дСлится нСбольшим Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ для ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² ΠΏΠΎ эксплуатации «старой ΡˆΠΊΠΎΠ»Ρ‹Β», ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΡ… vim Π΄Π°ΠΆΠ΅ Π² эпоху побСдившСго cloud native.

Vim с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ YAML для Kubernetes

ΠŸΠΈΡˆΠ΅Ρ‚Π΅ YAML-манифСсты для Kubernetes Π² vim? ΠŸΡ€ΠΎΠ²Π΅Π»ΠΈ бСсчислСнныС часы Π² ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°Ρ… ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π³Π΄Π΅ Π² этой спСцификации Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅? А ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€Π°Π΄Ρ‹ быстрому напоминанию ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π΅ args ΠΈ command? Π•ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ новости! Vim Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΊ yaml-language-server, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ автоматичСскоС Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ удобства. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ для этого Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° языкового сСрвСра.

(Π£ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ, Π³Π΄Π΅ Π°Π²Ρ‚ΠΎΡ€ рассказываСт ΠΈ дСмонстрируСт содСрТимоС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°.)

Π―Π·Ρ‹ΠΊΠΎΠ²ΠΎΠΉ сСрвСр

Π―Π·Ρ‹ΠΊΠΎΠ²Ρ‹Π΅ сСрвСры (language servers) Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎ возмоТностях языков программирования Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌ ΠΈ IDE, для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΏΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ β€” Language Server Protocol (LSP). Π­Ρ‚ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: вСдь ΠΎΠ½ позволяСт ΠΎΠ΄Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ сразу мноТСство Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ²/IDE. Π― ΡƒΠΆΠ΅ писал ΠΏΡ€ΠΎ gopls β€” языковой сСрвСр для Golang β€” ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² vim. ДСйствия для получСния автодополнСния Π² YAML для Kubernetes Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹.

Vim с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ YAML для Kubernetes

Π§Ρ‚ΠΎΠ±Ρ‹ vim Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π» описанным способом, понадобится ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° языкового сСрвСра. Π”Π²Π° извСстных ΠΌΠ½Π΅ способа β€” это LanguageClient-neovim ΠΈ coc.vim. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ coc.vim β€” это самый популярный ΠΏΠ»Π°Π³ΠΈΠ½ Π½Π° настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· vim-plug:

" Use release branch (Recommend)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Or build from source code by use yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

Для запуска coc (ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, сСрвСра yaml-language-server) потрСбуСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ установлСнного node.js:

curl -sL install-node.now.sh/lts | bash

Когда coc.vim настроСн, установитС сСрвСрноС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ coc-yaml ΠΈΠ· vim’Π°:

:CocInstall coc-yaml

Vim с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ YAML для Kubernetes

НаконСц, Π²Ρ‹ скорСС всСго Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ coc-vim, прСдставлСнной ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π’ частности, ΠΎΠ½Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ <Ctrl>+ΠΏΡ€ΠΎΠ±Π΅Π» для Π²Ρ‹Π·ΠΎΠ²Π° автодополнСния.

Настройка обнаруТСния yaml-language-server

Π§Ρ‚ΠΎΠ±Ρ‹ coc ΠΌΠΎΠ³ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ yaml-language-server, Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ схСму ΠΎΡ‚ Kubernetes ΠΏΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ YAML-Ρ„Π°ΠΉΠ»ΠΎΠ². Π­Ρ‚ΠΎ дСлаСтся Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ coc-config:

:CocConfig

Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ потрСбуСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ kubernetes для всСх Ρ„Π°ΠΉΠ»ΠΎΠ² yaml. Π― Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ языковой сСрвСр для golang, поэтому ΠΌΠΎΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ выглядит Ρ‚Π°ΠΊ:

{
  "languageserver": {
      "golang": {
        "command": "gopls",
        "rootPatterns": ["go.mod"],
        "filetypes": ["go"]
      }
  },

  "yaml.schemas": {
      "kubernetes": "/*.yaml"
  }
}

kubernetes β€” Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅, ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰Π΅Π΅ языковому сСрвСру ΠΎ нСобходимости Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Kubernetes-схСму ΠΏΠΎ URL, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ Π² этой константС. yaml.schemas ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… схСм β€” ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ см. Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ YAML-Ρ„Π°ΠΉΠ» ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ. НаТатиС <Ctrl>+ΠΏΡ€ΠΎΠ±Π΅Π» (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ, настроСнной Π² vim) Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ доступныС поля ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π² соотвСтствии с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ контСкстом:

Vim с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ YAML для Kubernetes
Π—Π΄Π΅ΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ <Ctrl>+ΠΏΡ€ΠΎΠ±Π΅Π», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я настроил inoremap <silent><expr> <c-space> coc#refresh(). Если Π²Ρ‹ этого Π½Π΅ сдСлали β€” см. coc.nvim README для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

Π’Ρ‹Π±ΠΎΡ€ вСрсии Kubernetes API

К ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ написания этой ΡΡ‚Π°Ρ‚ΡŒΠΈ yaml-language-server поставляСтся со схСмами Kubernetes 1.14.0. Π― Π½Π΅ Π½Π°ΡˆΡ‘Π» способа динамичСски Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ схСму, поэтому ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ GitHub issue. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ языковой сСрвСр написан Π½Π° typescript, вСсьма Π»Π΅Π³ΠΊΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ. Для этого достаточно Π½Π°ΠΉΡ‚ΠΈ Ρ„Π°ΠΉΠ» server.ts.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° своСй машинС, просто ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ YAML-Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ vim ΠΈ Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ процСсс с 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-server

Для нас Π°ΠΊΡ‚ΡƒΠ°Π»Π΅Π½ процСсс 2380: ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ vim Π²ΠΎ врСмя рСдактирования YAML-Ρ„Π°ΠΉΠ»Π°.

Как Π»Π΅Π³ΠΊΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ„Π°ΠΉΠ» располоТСн Π² /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Достаточно ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ KUBERNETES_SCHEMA_URL, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Π²Π΅Ρ€ΡΠΈΡŽ 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";

Π’ зависимости ΠΎΡ‚ вСрсии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ coc-yaml располоТСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ я ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с garethr Π½Π° instrumenta. ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ garethr ΠΏΠ΅Ρ€Π΅ΡˆΡ‘Π» Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ схСм ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΌ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ вступило Π² силу, посмотритС, появляСтся Π»ΠΈ ΠΏΠΎΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅ [Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… вСрсиях Kubernetes] Π½Π΅ Π±Ρ‹Π»ΠΎ. НапримСр, Π² схСмС для K8s 1.14 Π½Π΅ Π±Ρ‹Π»ΠΎ startupProbe:

Vim с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ YAML для Kubernetes

РСзюмС

НадСюсь, такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ€Π°Π΄ΠΎΠ²Π°Π»Π° вас Π½Π΅ мСньшС, Ρ‡Π΅ΠΌ мСня. Бчастливого YAML’ΠΈΠ½Π³Π°! НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с этими рСпозиториями, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ, упомянутыми Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅:

P.S. ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

А Π΅Ρ‰Ρ‘ Π΅ΡΡ‚ΡŒ vikube, vim-kubernetes ΠΈ vimkubectl.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π² нашСм Π±Π»ΠΎΠ³Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com