Neovim 내의 terminal 중에서 Neovim 조작

이번은 전회의 기사와 달리, Neovim 전용의 화제입니다.
  • 【(Neo)Vim】terminal mode의 매핑에 대한 어둠과 그 해결법 - Qiita

  • Neovim의 터미널에서 작업 할 때 "이 디렉토리를 시작으로 Vim 명령을 실행하고 싶다"는 것이 종종 있습니다. 보다 구체적으로는, 「current 디렉토리를 건네주어 denite 를 기동하고 싶다」라고 생각했군요.

    몇 가지 방법은 있다고 생각합니다만, 이것을 이하와 같이 실현하는 것을 생각했습니다.
  • 디렉토리를 이동할 때마다 Neovim에 디렉토리 이름을 알립니다.
  • zsh 의 $chpwd_functions 를 사용합니다.
  • bash 에서는 무리 같은? 1

  • 터미널 (터미널 작업 모드)에서 특정 키를 누르면 저장된 현재 디렉토리 이름으로 denite를 시작합니다.

  • Neovim 공식 Wiki을 보면 어쨌든 모든 언어로 Neovim을 조작 할 수 있음을 알 수 있습니다. 이번에는 (아마) 가장 주요한 Python으로 써 보았습니다.

    Python으로 Neovim에 연결



    neovim-client 모듈을 사용합니다. 미리 설치해 둡시다.
    pip3 install neovim
    

    이제 Neovim에 연결하려면 attach 함수를 사용합니다. $NVIM_LISTEN_ADDRESS 라는 환경 변수에 Socket 파일의 전체 경로가 전달되어 있으므로 이것을 사용합시다.

    neovim_pwd.py
    import os
    from neovim import attach
    
    nvim = attach('socket', path=os.environ['NVIM_LISTEN_ADDRESS'])
    

    나중에 command 메서드에서 Vimscript를 실행할 수 있습니다.

    neovim_pwd.py
    nvim.command('let b:__pwd__ = "{}"'.format(os.getcwd()))
    

    이것뿐입니다. 실제로는 디렉토리명의 이스케이프나 환경 변수가 설정되어 있지 않았을 때의 대응도 필요합니다. 정식 버전의 소스는 여기에 있습니다.

    나중에이 파이썬 스크립트를 zsh로 설정하기 만하면됩니다.

    .zshrc
    neovim-pwd() {
      (( $+commands[neovim_pwd.py] )) && neovim_pwd.py
    }
    if [[ -n $NVIM_LISTEN_ADDRESS ]]; then
      neovim-pwd
      chpwd_functions+=( neovim-pwd )
    fi
    

    이와 같이 .zshrc 에 추기해 두면, Neovim 내의 단말에서만, 현재 디렉토리를 Neovim 에 통지해 줍니다. 후에는 Vim 측에서 이것을 사용하는 것 뿐이지요.

    .vimrc
    " ステータスラインにカレントディレクトリーを表示します
    tnoremap <A-z><A-z> <C-\><C-n>:echo 'pwd is ' . b:__pwd__<CR>i
    noremap  <A-z><A-z> :echo 'pwd is ' . b:__pwd__<CR>
    " カレントディレクトリーから denite を起動します
    tnoremap <A-z><A-n> <C-\><C-n>:call denite#start([{'name': 'file', 'args': ['', b:__pwd__]}])<CR>
    noremap  <A-z><A-n> :call denite#start([{'name': 'file', 'args': ['', b:__pwd__]}])<CR>
    



    훌륭하게, 단말내로부터 현재 디렉토리가 통지되어 있습니다. 직접 denite도 시작할 수 있습니다. 편리하네요.



    hook - How can I run a command in bash after any change in $PWD? - Unix & Linux Stack Exchange 

    좋은 웹페이지 즐겨찾기