첫 번째 Neovim 플러그인을 작성한 방법
10134 단어 vimtutorialtodayilearned
이전 기사( 및 )에서 나는 이미 내가 사용하는 일부 플러그인과 일부 구성 팁을 살펴보았습니다.
하지만 오늘은 한 단계 더 나아가 플러그인 작성에 대해 알아보겠습니다!
고통
우리는 직장에서 자체 쿼리 언어가 있는 데이터 기반 클라우드 앱Splunk을 사용합니다. Splunk에 대한 쿼리 작성은 특히 쿼리가 점점 커지기 시작하고 괄호의 양 때문에 길을 잃을 때 번거로울 수 있습니다.
내가 찾은 해결책은 쿼리를 더 편리하게 읽을 수 있도록 서로 다른 블록을 들여쓰고 분리하는 작은 파이썬 스크립트를 작성하는 것이었습니다.
그리고...
Neovim 플러그인으로 만드는 것은 어떻습니까? Neovim에는 Python 인터페이스가 있으므로 제대로 작동해야 합니까? 스포일러: 네.
다이빙하자!
플러그인 작성
먼저 몇 가지를 설정해야 합니다. Python 바이너리는 셸 PATH에 있어야 합니다(
:checkhealth
로 확인할 수 있음).여기에서 볼 수 있듯이 Python 바이너리가 PATH에서 누락되었으며 Neovim은 그것으로 아무것도 실행할 수 없습니다. 따라서
init.vim
에 해당 줄을 추가해 보겠습니다.let g:python3_host_prog = '/usr/bin/python3'
let g:python_host_prog = '/usr/bin/python2'
또는 바이너리를 경로에 추가할 수 있습니다.
export PATH=$PATH:/usr/bin/python:/usr/bin/python3
echo $PATH
로 확인하십시오.그런 다음 Python Neovim 라이브러리인
pynvim
버전이 모두 있는지 확인합니다.python3 -m pip install pynvim
python -m pip install pynvim
그런 다음 리포지토리와 폴더 설정을 시작할 수 있습니다.
# do your git magic here
mkdir -p rplugin/python
touch rplugin/python/nvim-test.py
documentation 에 따르면 원격 플러그인은 작업을 수행하는 새로운 방법이므로 이를 따를 것입니다.
nvim-test.py
를 살펴보고 이것Jacob Simpson's example에서 영감을 얻으십시오.import pynvim
@pynvim.plugin
class TestPlugin(object):
def _init__(self, nvim):
self.nvim = nvim
@pynvim.function("TestFunction")
def testFunction(self, args):
self.nvim.current.line = "Hello from your plugin!"
코드 분해:
nvim
.이를 테스트하기 위해 git 인스턴스에서 플러그인을 업데이트하고
init.vim
에서 플러그인을 업데이트할 수 있습니다. 하지만... 테스트vimrc
를 사용할 수도 있습니다.echo "let &runtimepath.=','.escape(expand('<sfile>:p:h'), '\,')" > testvimrc
이제 시작
nvim -u testvimrc
하고 실행:UpdateRemotePlugins
하면 플러그인이 원격 플러그인으로 등록되고 매니페스트가 생성됩니다. cat ~/.local/share/nvim/rplugin.vim
로 확인하십시오. 파일이 비어 있지 않아야 하며 거기에 플러그인이 표시되어야 합니다.이제 Neovim
:call TestFunction()
을 다시 로드한 후 실행하면 정상적으로 작동하고 작업을 테스트할 수 있습니다. 지금까지는 제거 플러그인을 업데이트할 때마다 Neovim을 재부팅해야 한다고 생각하지만 아마도 그것을 우회하는 방법이 있을 것입니다.이제 내가 한 작업에 대해:
import re
import pynvim
@pynvim.plugin
class SplunkLinter(object):
def __init__(self, nvim):
self.nvim = nvim
@pynvim.function("LintSplunk")
def lintSplunk(self, args):
current_line = self.nvim.current.line
front = current_line.split("(")
i = 0
j = 0
res = ""
for line in front:
p = ""
if j != 0:
p = "("
back = re.findall("\)", line)
line = ((i) * "\t") + p + line
self.nvim.current.buffer.append(line, -1)
if len(back) == 0:
i = i + 1
elif len(back) > 1:
i = i - len(back)
if i < 0:
i = 0
j = j + 1
self.nvim.current.line = ""
return
당신이 아무 말도 하기 전에, 나는 이것이 개선될 수 있다는 것을 압니다. 기본적으로 이 코드는 포함된 괄호 수준에 따라 문자열을 들여쓰기합니다. 그것은 기본적으로 내가 필요한 것이고 그것은 일을합니다!
test (on) (one) (one (two (three))) (one) ((two))
# to
test
(on)
(one)
(one
(two
(three)))
(one)
(
(two))
Github 저장소는 여기에 있습니다: https://github.com/christalib/nvim-splunk-linter , 문제, PR 등을 자유롭게 여십시오!
Neovim 또는 Vim용 플러그인을 이미 개발하셨습니까? 넌 어떻게 그걸 했니?
Reference
이 문제에 관하여(첫 번째 Neovim 플러그인을 작성한 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/evilcel3ri/how-i-wrote-my-first-neovim-plugin-357h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)