Vim ืžื™ื˜ YAML ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ Kubernetes

ื ืื˜ื™ืฅ. ื˜ืจืึทื ืกืœ.: ื“ืขืจ ืึธืจื™ื’ื™ื ืขืœ ืึทืจื˜ื™ืงืœ ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขืฉืจื™ื‘ืŸ ื“ื•ืจืš Josh Rosso, ืึทืŸ ืึทืจื›ื™ื˜ืขืงื˜ ืื™ืŸ VMware ื•ื•ืึธืก ืคืจื™ืขืจ ื’ืขืืจื‘ืขื˜ ืื™ืŸ ืงืึธืžืคึผืึทื ื™ืขืก ืึทื–ืึท ื•ื•ื™ CoreOS ืื•ืŸ Heptio, ืื•ืŸ ืื™ื– ืื•ื™ืš ื“ืขืจ ืงืึธ-ืžื—ื‘ืจ ืคื•ืŸ ื“ื™ Kubernetes alb-ingress-controller. ื“ืขืจ ืžื—ื‘ืจ ืฉืึทืจืขืก ืึท ืงืœื™ื™ืŸ ืจืขืฆืขืคึผื˜ ื•ื•ืึธืก ืงืขืŸ ื–ื™ื™ืŸ ื–ื™ื™ืขืจ ื ื•ืฆื™ืง ืคึฟืึทืจ "ืึทืœื˜ ืฉื•ืœืข" ืึทืคึผืขืจื™ื™ืฉืึทื ื– ืขื ื“ื–ืฉืึทื ื™ืจื– ื•ื•ืึธืก ื‘ืขืกืขืจ ื•ื•ืขืœืŸ ื•ื•ื™ื ืืคื™ืœื• ืื™ืŸ ื“ืขืจ ืชืงื•ืคื” ืคื•ืŸ ื“ื™ ื•ื•ื™ืงื˜ืึธืจื™ืึทืก ื•ื•ืึธืœืงืŸ ื’ืขื‘ื•ื™ืจืŸ.

Vim ืžื™ื˜ YAML ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ Kubernetes

ืฉืจื™ื™ื‘ืŸ YAML ืžืึทื ื™ืคืขืกืฅ ืคึฟืึทืจ ืงื•ื‘ืขืจื ืขื˜ืขืก ืื™ืŸ ื•ื•ื™ื? ืคืืจื‘ืจืื›ื˜ ืงืึทื•ื ื˜ืœืึทืก ืฉืขื” ื˜ืจื™ื™ื ื’ ืฆื• ืจืขื›ืขื ืขืŸ ืื•ื™ืก ื•ื•ื• ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืคืขืœื“ ื–ืึธืœ ื–ื™ื™ืŸ ืื™ืŸ ื“ืขื ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’? ืึธื“ืขืจ ืืคึฟืฉืจ ืื™ืจ ื•ื•ืขื˜ ืึธืคึผืฉืึทืฆืŸ ืึท ืฉื ืขืœ ื“ืขืจืžืึธื ื•ื ื’ ืคื•ืŸ ื“ื™ ื—ื™ืœื•ืง args ะธ command? ืขืก ืื™ื– ื’ื•ื˜ ื ื™ื™ึทืขืก! Vim ืื™ื– ื’ืจื™ื ื’ ืฆื• ืœื™ื ืง ืฆื• ื™ืึทืžืœ-ืฉืคึผืจืึทืš-ืกืขืจื•ื•ืขืจืฆื• ื‘ืึทืงื•ืžืขืŸ ืึธื˜ืึทืžืึทื˜ื™ืง ืงืึทืžืคึผืœื™ืฉืึทืŸ, ื•ื•ืึทืœืึทื“ื™ื™ืฉืึทืŸ ืื•ืŸ ืื ื“ืขืจืข ืงืึทื ื•ื•ื™ื ื™ืึทื ืกื™ื–. ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืžื™ืจ ื•ื•ืขืœืŸ ืจืขื“ืŸ ื•ื•ืขื’ืŸ ื•ื•ื™ ืฆื• ืฉื˜ืขืœืŸ ืึท ืฉืคึผืจืึทืš ืกืขืจื•ื•ืขืจ ืงืœื™ืขื ื˜ ืคึฟืึทืจ ื“ืขื.

(ื“ืขืจ ืึธืจื™ื’ื™ื ืขืœ ืึทืจื˜ื™ืงืœ ืื•ื™ืš ืื™ื– ื“ื ื ื•ื•ื™ื“ื™ืื•, ื•ื•ื• ื“ืขืจ ืžื—ื‘ืจ ืจืขื“ื˜ ืื•ืŸ ื“ืขืžืึทื ืกื˜ืจื™ื™ืฅ ื“ื™ ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื“ืขื ืžืึทื˜ืขืจื™ืึทืœ.)

ืฉืคึผืจืึทืš ืกืขืจื•ื•ืขืจ

ืฉืคึผืจืึทืš ืกืขืจื•ื•ืขืจืก (ืฉืคึผืจืึทืš ืกืขืจื•ื•ืขืจืก) ืจืขื“ืŸ ื•ื•ืขื’ืŸ ื“ื™ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืคื•ืŸ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทื›ืŸ ืฆื• ืจืขื“ืืงืฆื™ืข ืื•ืŸ IDE, ืคึฟืึทืจ ื•ื•ืึธืก ื–ื™ื™ ื™ื ื˜ืขืจืึทืงื˜ ืžื™ื˜ ื™ืขื“ืขืจ ืื ื“ืขืจืข ืžื™ื˜ ืึท ืกืคึผืขืฆื™ืขืœ ืคึผืจืึธื˜ืึธืงืึธืœ - ืฉืคึผืจืึทืš ืกืขืจื•ื•ื™ืจืขืจ ืคึผืจืึธื˜ืึธืงืึธืœ (LSP). ื“ืึธืก ืื™ื– ืึท ื’ืจื•ื™ืก ืฆื•ื’ืึทื ื’ ื•ื•ื™ื™ึทืœ ืขืก ืึทืœืึทื•ื– ืื™ื™ืŸ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืฆื• ืฆื•ืฉื˜ืขืœืŸ ื“ืึทื˜ืŸ ืฆื• ืคื™ืœืข ืจืขื“ืืงืฆื™ืข / ื™ื™ื“ืขืก ืื™ืŸ ืึทืžืึธืœ. ืื™ืš ื”ืื‘ ืฉื•ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ื•ื•ืขื’ืŸ gopls - ืึท ืฉืคึผืจืึทืš ืกืขืจื•ื•ืขืจ ืคึฟืึทืจ Golang - ืื•ืŸ ื•ื•ื™ ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืื™ืŸ ื•ื•ื™ื. ื“ื™ ืกื˜ืขืคึผืก ืฆื• ื‘ืึทืงื•ืžืขืŸ ืึทื•ื˜ืึธืงืึธืžืคึผืœืขื˜ื™ืึธืŸ ืื™ืŸ YAML ืคึฟืึทืจ Kubernetes ื–ืขื ืขืŸ ืขื ืœืขืš.

Vim ืžื™ื˜ YAML ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ Kubernetes

ืื™ืŸ ืกื“ืจ ืคึฟืึทืจ ื•ื•ื™ื ืฆื• ืึทืจื‘ืขื˜ืŸ ืื™ืŸ ื“ื™ ื“ื™ืกืงืจื™ื™ื‘ื“ ื•ื•ืขื’, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ืึท ืฉืคึผืจืึทืš ืกืขืจื•ื•ืขืจ ืงืœื™ืขื ื˜. ื“ื™ ืฆื•ื•ื™ื™ ืžืขื˜ื”ืึธื“ืก ืื™ืš ื•ื•ื™ืกืŸ ืคื•ืŸ ื–ืขื ืขืŸ 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 ืคื•ืŸ ื•ื•ื™ื:

:CocInstall coc-yaml

Vim ืžื™ื˜ YAML ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ Kubernetes

ืฆื•ื ืกื•ืฃ, ืื™ืจ ื•ื•ืขื˜ ืจื•ื‘ึฟ ืžืกืชึผืžื ื•ื•ื™ืœืŸ ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ coc-vim, ื“ืขืจืœืื ื’ื˜ ื•ื•ื™ ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ. ืื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ, ืขืก ืึทืงื˜ืึทื•ื•ื™ื™ืฅ ื“ื™ ืงืึธืžื‘ื™ื ืึทืฆื™ืข + ืคึผืœืึทืฅ ืฆื• ืจื•ืคืŸ ืึทื•ื˜ืึธืงืึธืžืคึผืœืขื˜ื™ืึธืŸ.

ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ 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 ื˜ืขืงืข ืื•ืŸ ืึธื ื”ื™ื™ื‘ืŸ ื ื™ืฆืŸ ืึทื•ื˜ืึธืงืึธืžืคึผืœืขื˜ื™ืึธืŸ. ื“ืจื™ื ื’ืœืขืš + ืคึผืœืึทืฅ (ืึธื“ืขืจ ืื ื“ืขืจืข ืงืึธืžื‘ื™ื ืึทืฆื™ืข ืงืึทื ืคื™ื’ื™ืขืจื“ ืื™ืŸ vim) ื–ืึธืœ ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืคืึทืจืึทื ืขืŸ ืคืขืœื“ืขืจ ืื•ืŸ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืœื•ื™ื˜ ื“ืขื ืงืจืึทื ื˜ ืงืึธื ื˜ืขืงืกื˜:

Vim ืžื™ื˜ YAML ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ Kubernetes
+ืกืคืขื™ืก ืึทืจื‘ืขื˜ ื“ืึธ ื•ื•ื™ื™ึทืœ ืื™ืš ืงืึทื ืคื™ื’ื™ืขืจื“ inoremap <silent><expr> <c-space> coc#refresh(). ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ื ื™ืฉื˜ ื’ืขื˜ืืŸ ื“ืขื, ื–ืขืŸ coc.nvim README ืคึฟืึทืจ ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ.

ืกืขืœืขืงื˜ื™ื ื’ ื“ื™ Kubernetes API ื•ื•ืขืจืกื™ืข

ื•ื•ื™ ืคื•ืŸ ื“ืขื ืฉืจื™ื™ื‘ืŸ, yaml-language-server ืฉื™ืคืŸ ืžื™ื˜ Kubernetes 1.14.0 ืกื˜ืฉืขืžืึทืก. ืื™ืš ื”ืื‘ ื ื™ืฉื˜ ื’ืขืคื•ื ืขืŸ ืึท ื•ื•ืขื’ ืฆื• ื“ื™ื ืึทืžื™ืงืึทืœืœื™ ืื•ื™ืกืงืœื™ื™ึทื‘ืŸ ืึท ืกื˜ืฉืขืžืึท, ืึทื–ื•ื™ ืื™ืš ื’ืขืขืคื ื˜ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ GitHub ืึทืจื•ื™ืกื’ืขื‘ืŸ. ืฆื•ืž ื’ืœื™ืง, ื–ื™ื ื˜ ื“ื™ ืฉืคึผืจืึทืš ืกืขืจื•ื•ืขืจ ืื™ื– ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ื˜ื™ืคึผืกืงืจื™ืคึผื˜, ืขืก ืื™ื– ื’ืึทื ืฅ ื’ืจื™ื ื’ ืฆื• ืžืึทื ื™ื•ืึทืœื™ ื˜ื•ื™ืฉืŸ ื“ื™ ื•ื•ืขืจืกื™ืข. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ื ืึธืจ ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ื˜ืขืงืข 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 ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื ื™ื˜ ืกื˜ืึทืจื˜ืึทืคึผ ืคึผืจืึธื‘ืข:

Vim ืžื™ื˜ YAML ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ Kubernetes

ืงื™ืฆืขืจ

ืื™ืš ื”ืึธืคึฟืŸ ื“ื™ ื’ืขืœืขื’ื ื”ื™ื™ื˜ ืคึผืœื™ื–ื™ื– ืื™ืจ ื•ื•ื™ ืคื™ืœ ื•ื•ื™ ืžื™ืจ. ืžื–ืœ ื™ืึทืžืœื™ื ื’! ื–ื™ื™ื˜ ื–ื™ื›ืขืจ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ื– ืฆื• ื‘ืขืกืขืจ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ื™ ื™ื•ื˜ื™ืœืึทื˜ื™ื– ื“ืขืจืžืื ื˜ ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ:

ืคึผืก ืคื•ืŸ ืื™ื‘ืขืจื–ืขืฆืขืจ

ืื•ืŸ ืขืก ืื™ื– ืื•ื™ืš ื•ื•ื™ืงื•ื‘ืข, vim-kubernetes ะธ ื•ื•ื™ืžืงื•ื‘ืขืงื˜ืœ.

ืœื™ื™ืขื ืขืŸ ืื•ื™ืš ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื‘ืœืึธื’:

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’