Vim에서 테스트 코드를 작성하면서 현장에서 테스트 할 수있는 tmux send-keys로 매우 편안합니다.

5591 단어 Vim루비Railstmux
Vim에서 테스트 코드를 작성하면서 Vim을 빠지지 않고 그 자리에서 파일이나 그 행을 테스트하고 싶습니다.



그런 때 Emacs 라든지 Atom이라고 플러그인으로 했지만, 이젠 Vim이라고 그런 방식이 제대로 안 된다고 생각했던 곳에서 "이제 tmux 로 다른 페인트 열어서 send-keys 하는 것이 좋다"는 결론 되었다.

이 방법이라면 테스트의 종류에 따라 바꾸는 것도 실행 커멘드를 바꾸는 것만으로 간단하게 할 수 있고, 실제로 테스트를 흘리는 것이 Docker 컨테이너 안,라든가 말할 때에도 그대로 응용할 수 있으므로 꽤 좋다.

구체적으로 어떻게 할 수 있을까 하면, 앞으로 쓰는 예에서는, tmux 를 좌우의 2 페인으로 분할해 두고,
  • 왼쪽 창에 Vim
  • 오른쪽 창에서 테스트 명령을 실행할 위치

  • 가 설정된 상태에서 Vim에서 테스트 코드를 쓰면서 오른쪽 창에서 테스트를 실행한다는 것.

    send-keys를 실행하는 스크립트



    우선 send-keys 를 실행하는 스크립트를 준비한다.

    tmux-send-keys-to-right-pane
    #!/usr/bin/env sh
    
    session=$(tmux display-message -p '#S')
    window=${session}:$(tmux display-message -p '#I')
    
    args=""
    
    for arg in $@; do
      args="${args}""${arg} "
    done
    
    tmux send-keys -t right C-z "${args}" C-m
    

    꽤 잡잡한 만큼 어떤 느낌이라든가.

    이것에 실행 권한을 붙여 패스가 통과하는 곳에 두게 되었고, tmux 창에서 오른쪽 창을 시작하고, 예를 들어 왼쪽 창에서
    $ tmux-send-keys-to-right-pane ls -la
    

    그렇다면 오른쪽 창에서 ls -la가 실행된다고 생각합니다.

    이것으로 실행하는 대상을 테스트 명령으로 하면, 당연히 오른쪽 창에서는 테스트가 실행된다.

    Vim에서 ↑ 스크립트 실행



    여기에서 Vim 설정이됩니다!

    우선 .vimrc 에 직접 설정을 써 갑니다! 또, 사사로 대단히 죄송합니다만, 지금 제가 Ruby on Rails 로 Minitest 를 쓰고 있어 그것을 실행하고 싶다고 하는 마음이 있기 때문에, Ruby on Rails 로 Minitest 를 실행하는 것을 예로서 설명하고 싶습니다 ! 죄송합니다.

    괜찮을까요? 그럼 .vimrc 에 다음을 기재해 주세요!

    .vimrc
    command! RailsTest echo s:rails_test(expand('%'), getpos('.'))
    
    function! s:rails_test(file, pos)
      let l:cmd = printf('tmux-send-keys bin/rails test %s:%d', a:file, a:pos[1])
      return system(l:cmd)
    endfunction
    
    nnoremap <Leader>rt :<C-u>RailsTest<Return>
    

    간단히 설명하면, 이것으로 하고 싶은 것을 할 수 있는 녀석입니다! 너무 쉬웠습니까? 좀 더 설명하면, 이것은 Vim 의 버퍼상에서 실행하는 것으로, 버퍼의 파일과 커서 위치를 Rails(5) 의 테스트 커멘드에 건네주고, 테스트를 실행하는, 그러한 것입니다.

    여기에서는 RailsTest라는 명령이 정의되어 있고 <Leader>rt가 바인드되어 있으므로, 이것을 읽은 후 왼쪽 창의 Vim에서 Minitest 파일을 열고 오른쪽 창에서는 Rails의 루트 디렉터리를 현재 디렉터리로 한 상태에서 <Leader>rt 키를 스트로킹하면 오른쪽 창에서 bin/rails test <バッファのファイル名>:<行番号>가 실행되고 예, 실행됩니다. 물론 Vim 내부에서 동기적으로 실행하는 것은 아니므로 테스트 실행 중에 Vim의 동작이 차단되는 것은 없으므로 안심하십시오. 앞서 말씀드렸듯이 오른쪽 창에서 Docker 컨테이너 bash를 실행하면 그대로 명령을 다시 작성하지 않고도 Docker 컨테이너에서 테스트를 실행할 수 있으며 위를 복사하여 명령 이름과 함수 이름,
      let l:cmd = printf('tmux-send-keys bin/rails test %s:%d', a:file, a:pos[1])
    

    여기의 행을 다시 쓰면 임의의 명령을 실행할 수 있으므로 편리하게 사용할 수 있다고 생각합니다. 덧붙여서 tmuxinator 라든가 그런 녀석은 한 번도 사용한 적이 없습니다. 나중에 참고로 했습니다 thanks to htp://스페루세 r. 코 m / 쿠에 s 치온 s / 492266 / 룬 - r - 센 d - 아 - 맘 드 - 아 - t-mu x - 파네 - 아 - 룬 - got - x - 대단한 친구

    좋은 웹페이지 즐겨찾기