저는 루비를 Vim으로 쓰는 플러그인을 세 개 썼어요.

7068 단어 RubyVim
평소에 Vim으로 루비를 썼는데 그러고 보니 루비를 보조적으로 쓰는 Vim 플러그인이 적다고 생각해서 지난달에 루비 플러그인을 만들어 봤어요.
이 항목은 내가 만든 세 개의 플러그인을 소개한다.
  • unite-ruby-require.vim require 보충 대상unite.vim 소스
  • neco-ruby-keyword-args
    neocomplcache에서 Ruby2.0 키워드 매개변수 추가
  • vim-textobj-ruby
    루비 블록 텍스트 대상화
  • unite-ruby-require.vim


    Ruby는 외부의 소스 코드require를 읽는 데 사용되지만 표준만 해도 대량의 라이브러리가 있어 모두 기억하기 어렵다.
    그래서 유니트.vim로 후보 추가 검색require 가능한 플러그인unite-ruby-require.vim을 만들었습니다.
    :Unite ruby/require
    
    시작 후 루비의 표준 프로그램 라이브러리와 설치된gem,bundler가 프로젝트 로컬에 설치된 프로그램 라이브러리의 경로를 수집하여 require 후보를 한 번 보여 줍니다.
    그 다음은 유닛.vim의 추가 검색에서 필요한 라이브러리를 찾으면 됩니다.
    예를 들어 URI와 관련된 클래스를 찾으려면 :Unite ruby/require 에서 열고 uri 를 입력하면 이렇게 추출됩니다.

    여기서 open-uri 을 선택하고 Enter 키를 누르면 커서 행이 삽입됩니다 require 'open-uri'.
    또한 rbenv 등에서 Vim의 Ruby 인터페이스와 다른 Ruby를 사용할 때
    let g:unite_source_ruby_require_ruby_command = '$HOME/.rbenv/shims/ruby'
    
    그러면 루비의 경로를 정의합니다.

    neco-ruby-keyword-args


    Ruby 2.0에는 이름으로 매개변수를 지정하는 키워드 매개변수가 추가되었습니다.
    지금까지 산열을 매개 변수로 시뮬레이션하여 이름 전달을 실현했지만 그럴 필요는 없다.
    # ハッシュのような書き方で引数の名前とデフォルト値を指定
    def test(tsura: 'poyo', yaba: 'poyo')
      puts tsura+yaba
    end
    
    # 指定しないとデフォルト値が使われる
    test #=> poyopoyo
    # 名前で指定するので順番は意識しなくて良い
    test(yaba: 'dameda', tsura: 'mou') #=> moudameda
    
    이로써 매개 변수의 순서를 준수해야 하는 번거로움에서 해방되고 호출자에서 어떤 매개 변수가 어떤 값을 표시하는지 명확하게 할 수 있다.
    하지만 파라미터의 이름을 기억해야 한다.
    따라서 원본 내의 키워드 매개 변수 이름을 수집하여 자동 보충 플러그인neco-ruby-keyword-args을 만들었습니다.
    neocomplcache의 원본으로 설치하기 때문에 전제는 neocomplcache를 사용하는 것입니다.
    사용 중인 캡처는 이런 느낌입니다.

    이해하기 어렵지만 맨 아래 줄에 test 방법의 tsura 파라미터를 보충하려고 노력하고 있습니다.
    보충 후보[K]는 키워드 매개 변수 보충 표시이고 그 다음은 기본값'poyo'을 나타낸다.
    후보 수집의 범위에 대해서는 상대 경로require의 원천도 차례로 수집한다. 따라서
    hoge.rb
    def hoge(foo: 'a', bar: 'b')
    end
    
    huga.rb
    require './hoge.rb'
    
    piyo.rb
    require './huga.rb'
    
    hoge #ここで補完できる
    
    이렇게 귀착지 piyo.rb → huga.rb → hoge.rb와 함께 잠수 수집 후보.

    vim-textobj-ruby


    우선, 텍스트 대상을 모르는 사람은 시도해 보세요:help text-object. 이것은 Vim의 매우 편리한 기능입니다.
    vim-textobj-ruby Rubyclass, if, beginend로 끝난 블록을 텍스트 대상으로 한 번에 삭제하고 선택하며 양크를 선택할 수 있습니다.
    유사한 플러그인에는vim-textobj-rubyblock이 있지만 자신의 환경에서 잘 실행되지 않고 문법 하이라이트 등을 사용하면 더 잘 선택할 수 있다고 판단해 새로 만들었습니다.
    또 카나 씨의 vim-textobj-user이 필요합니다.
    플러그인을 설치한 후 운동 대기 모드에 r 맵을 추가합니다. (운동 대기 모드에 대해서는 :help mapmode-o 참조)
    다음은 몇 가지 사용 예입니다.
    다음 예에서 #% 은 커서 위치입니다.
    def hoge(yo)
        if yo
            puts "yo!"
            #%
        end
        puts "everyone!"
    end
    
    defif 두 블록 중첩.if 문장 내부에 커서가 있는 상태에서 dar 를 입력하면 if 전체 블록이 삭제됩니다.
    def hoge(yo)
        #%
        puts "everyone!"
    end
    
    그리고
    def hoge(yo)
        if yo
            puts "yo!"
        end
        #%
        puts "everyone!"
    end
    
    이와 같이 ifdef 내부에 커서가 있을 때vir def 내부if yo부터 puts ...까지 시각적 모드에서 선택됩니다.
    즉, 커서가 있는 위치에 있는 블록을 객체로 텍스트 객체화합니다.

    추가 플러그인


    그 외에 내가 쓴 것은 아니지만, 내가 먼저 신경 쓰는 플러그인을 열거해 보겠다.
  • neocomplcache-rsense
    루비의 개발 원조 도구는 vimproc로 비동기적으로 RSense를 실행하여 보충하는 플러그인입니다.
  • vim-ruby
    루비를 Vim으로 쓰기 위한 여러 가지 편리한 기능으로 막힌 플러그인입니다.
    일체화된 플러그인을 별로 좋아하지 않아서 시도하지 않았지만 Vim의 루비 인터페이스 부분을 사용하여 편집 중인 원본 코드, 추출 방법 등의 보충을 실행하는 것 같습니다. 단,rbenv 등을 사용할 때 Vim에서 사용하는 루비의 원본을 실행하는 루비 버전에 오류가 발생할 수 있으므로 주의해야 합니다.
  • 좋은 웹페이지 즐겨찾기