vim으로 고속 코딩하는 방법

9842 단어 Vim
안녕하세요, 고릴라입니다.

Vim이라고 하면 고속으로 코딩할 수 있다는 인상을 가지고 있는 것이 많지 않을까요?
오늘은 Postfix Code Completion이라는 기술을 사용하여 빨리 코딩하는 방법을 소개합니다.

이 방법을 사용하면 다음 gif와 같이 빨리 JSON을 반환하는 HTTP 서버를 세울 수 있습니다.



Postfix Code Completion이란?



후치 보완이라는 보완 수법입니다.
예를 들어 (a == b)if 를 사용하려면 (a == b).if 를 입력하여 확장하면 if (a == b) { } 라는 식으로 보완해 줍니다.

뒤의 코드 if 가 이전의 코드 (a == b) 에 작용한다고 하는 생각입니다.
이것을 적극적으로 사용해 가면 보다 고속으로 코딩할 수 있게 됩니다.

제 경우에는 비교적 후치 보완뿐만 아니라 스니펫처럼 사용하고 있습니다.

Vim에서 Postfix Code Completion을 사용하는 방법



Vim은 sonictemplate.vim이라는 플러그인이 지원합니다.
기본적으로 Postfix 패턴 파일이 제공됩니다. <C-y><C-b> 에서 패턴을 확장할 수 있습니다.
물론 스스로 패턴 파일을 준비할 수도 있습니다.

먼저 자체 템플릿 디렉토리를 설정합니다. 제 경우에는 ~/.vim/sonictemplate 하고 있습니다.
let g:sonictemplate_vim_template_dir = expand('~/.vim/sonictemplate')

그런 다음 언어의 디렉토리를 만듭니다. 디렉토리 이름은 파일 유형 이름과 같아야 합니다.js 이면 javascript 라는 디렉토리를 만듭니다. 이 기사에서는 Go 언어 템플릿을 만들 것입니다.
$ mkdir ~/.vim/sonictemplate/go

그런 다음 Postfix 패턴 파일을 만듭니다. 파일 이름은 pattern.stpl여야 합니다.
$ vim ~/.vim/sonictemplate/go/pattern.stpl

pattern.stpl 에 패턴을 추기해 갑니다.

패턴 작성 방법



다음과 같이 1행째에 패턴을 2행째 이후에 전개 후의 코드를 기술합니다. 두 번째 줄 이후에는 탭이 필요합니다.
\(\S\+\)\.var$
    var {{$1}} = {{_cursor_}}

여러 패턴은 빈 줄로 구분됩니다.
\(\S\+\)\.var$
    var {{$1}} = {{_cursor_}}

\(\S\+\)\.iferr$
    if {{$1}} != nil {
        return {{$1}}
    }
    {{_cursor_}}

패턴은 정규 표현식을 사용할 수 있습니다. 그리고 확장된 코드에서는 {{}} 로 둘러싸인 플러그인 독자적인 구문을 사용할 수 있습니다.
위의 예에서 {{$1}} 는 후방 참조 ( \(\S\+\) 의 부분) 하고 있습니다. {{_cursor_}} 는 전개 후 커서의 위치를 ​​지정합니다.{{}} 를 사용한 구문은 그 밖에도 있습니다. 도움말을 참조하십시오.

패턴 예



내가 사용하는 패턴을 몇 가지 소개합니다.

db 열기


  • 패턴
  • db.open\.\(".*"\)\.\(".*"\)$
        db, err := sql.Open({{$1}}, {{$2}})
        if err != nil {
            log.Fatal(err)
        }
        defer db.Close()
        {{_cursor_}}
    
  • 코드
  • // 展開前
    db.open."sqlite3"."test.db"
    
    // 展開後
    db, err := sql.Open("sqlite3", "test.db")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
    

    쿼리 발행


  • 패턴
  • db\.query\.\(.*\)$
        rows, err := db.Query({{$1}})
        if err != nil {
            log.Fatal(err)
        }
        defer rows.Close()
        {{_cursor_}}
    
  • 코드
  • // 展開前
    db.query."select * from todos"
    
    // 展開後
    rows, err := db.Query("select * from todos")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()
    

    JSON 인코딩


    json\.encode\.\(\S\+\)\.\(\S\+\)$
        if err := json.NewEncoder({{$1}}).Encode({{$2}}); err != nil {
            {{_cursor_}}
        }
    
    // 展開前
    json.encode.writer.&gorilla
    
    // 展開後
    if err := json.NewEncoder(writer).Encode(&gorilla); err != nil {
    
    }
    

    JSON 디코딩


  • 패턴
  • json\.decode\.\(\S\+\)\.\(\S\+\)$
        if err := json.NewDecoder({{$1}}).Decode({{$2}}); err != nil {
            {{_cursor_}}
        }
    
  • 코드
  • // 展開前
    json.decode.reader.&gorilla
    
    // 展開後
    if err := json.NewDecoder(reader).Decode(&gorilla); err != nil {
    
    }
    

    append


  • 패턴
  • \(\S\+\)\.append\.\(\S\+\)$
        {{$1}} = append({{$1}}, {{$2}})
        {{_cursor_}}
    
  • 코드
  • // 展開前
    gorillas.append.gorilla
    
    // 展開後
    gorillas = append(gorillas, gorilla)
    

    HTTP 서버


  • 패턴
  • http\.server\.\(\S\+\)$
        http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
            {{_cursor_}}
        })
        log.Println("start http server :{{$1}}")
        log.Fatal(http.ListenAndServe(":{{$1}}", nil))
    
  • 코드
  • // 展開前
    http.server.8080
    
    // 展開後
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    
    })
    log.Println("start http server :8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
    

    main


  • 패턴
  • ^main$
        package main
    
        func main() {
            {{_cursor_}}
        }
    
  • 코드
  • // 展開前
    main
    
    // 展開後
    package main
    
    func main() {
    
    }
    

    마지막으로



    어때?
    이 기사를 보고 조금이라도 빨리 코딩할 수 있게 되면 기쁩니다.

    그럼 좋은 코딩 라이프 ~

    좋은 웹페이지 즐겨찾기