opt 디렉토리만 사용하는 Neovim 플러그인 관리자 만들기

9172 단어 Neovimtech
https://github.com/notomo/optpack.nvim
Neovim용 플러그인 관리자를 제작했습니다.우선 자신이 사용하는 기능만 있다.

왜 하는 거예요?


  • 처음 동기는 애용minpac인데 확장된 스크립트가 커졌어요.
  • 추가 확장이 필요하며 사용자 설정에서 잘라내야 함
  • start 디렉터리의 행동이 자신에게 적합하지 않음
  • start 디렉터리에 플러그인이 있으면 읽기
  • 디렉터리가 있어도 설정된 주석 출력에서 비활성화
  • 단순한 취미
  • 기본적으로 재발명 플러그인인데, 다음은 실제 설치한 후에 알게 된 내용을 쓰십시오.

    opt 디렉터리를 처리할 때 주의사항


    의외로 나는 packages의 기능을 모른다.
    그중에opt 디렉터리에 대한 세 가지 주의점도 열거했다.

    packpath 밑에 같은 이름의 플러그인이 있는 경우,packadd는runtimepath에 둘을 추가합니다


    그 결과 먼저 runtimepath에서 한 쪽이 우선되었다.
    아래 루아 디렉터리의 예require("myplugin")를 사용한다면 mypackage1의 한 쪽init.lua을 읽는다.
    local packpath = "./mypackpath"
    vim.cmd("set packpath^=" .. packpath)
    
    local create_plugin = function(package_name)
      local plugin = packpath .. ("/pack/%s/opt/myplugin.nvim/lua/myplugin/"):format(package_name)
      vim.fn.mkdir(plugin, "p")
      io.open(plugin .. "init.lua", "w"):close()
    end
    create_plugin("mypackage1")
    create_plugin("mypackage2")
    
    vim.cmd("packadd myplugin.nvim")
    
    print(vim.inspect(vim.api.nvim_get_runtime_file("lua/myplugin/init.lua", true)))
    -- { "./mypackpath/pack/mypackage1/opt/myplugin.nvim/lua/myplugin/init.lua", "./mypackpath/pack/mypackage2/opt/myplugin.nvim/lua/myplugin/init.lua" }
    

    :colorscheeme는opt 디렉터리의 배색 방안도 읽을 수 있습니다


    별다른 고민은 없었지만, 예외적인 행동을 느꼈기 때문에 일단 열거했다.
    도움말에도 쓰여 있습니다.:help packages

    초기화할 때 이외: 패키지 / pluggin 디렉터리를 읽을 수 없습니다

    runtimepath에 추가되었기 때문에 초기화 시:packadd에는 문제가 없습니다.:help load-plugins
    즉, 다음과 같이 초기화할 때 처리된 마지막 처리가 +{command}라고 불릴 때 읽히지 않는다.
    $ nvim --headless -u NORC +"luafile ./test.lua"
    
    $ nvim --headless -u test.vim
    test
    
    test.vim
    luafile ./test.lua
    
    test.lua
    local packpath = "./mypackpath"
    vim.cmd("set packpath^=" .. packpath)
    
    local create_plugin = function(package_name)
      local plugin = packpath .. ("/pack/%s/opt/myplugin.nvim/after/plugin/"):format(package_name)
      vim.fn.mkdir(plugin, "p")
      local f = io.open(plugin .. "myplugin.lua", "w")
      f:write([[print("test")]])
      f:close()
    end
    create_plugin("mypackage1")
    
    vim.cmd("packadd myplugin.nvim")
    
    읽지 않으면 동작에 영향을 주는 플러그인이라면 명확하게 읽을 수밖에 없다.
    (예: :runtime after/plugin/myplugin.vim

    테스트 시 Giit 서버 사용


    플러그인 업데이트를 작성할 때 동작 테스트를 할 때 모듈이 아닌 Git 서버를 사용합니다.
    플러그인 관리자는 항상 손상을 원하지 않습니다.
    나는 Giit 서버를 마크로 설정해서 의미 있는 테스트를 쓸 자신이 없다.
    Giit 서버는 python -m http.server --cgigit-http-backend에서
    테스트 내에 시작/종료.
    https://git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP
    테스트이기 때문에 환경 변수GIT_HTTP_EXPORT_ALL에 설치하여 모든 창고를 공개합니다.(1패)
    optpack.nvim 처리된Git 서버의 URL은 선택적으로 변경할 수 있으며 테스트에서 사용할 수 있습니다http://127.0.0.1:8000/cgi-bin/git-http-backend.
    현지에서 활동하는 만큼 테스트를 늘려도 전체가 1초 정도면 완성되고 체험도 나빠지지 않았다.

    감상

  • 설치하기 어려운 기능은 생략해도 어려워
  • 플러그인별로 일련의 git 명령 실행
    없어Promise엄격해
  • 좋은 웹페이지 즐겨찾기