Atom에서 소스 전체에 auto indent 적용

개요



Atom의 auto indent는 "일일이 모두 선택"하지 않으면 소스 전체에 적용하지 않습니다.
반면에 Atom에는 init.coffee와 keymap.cson이 있습니다. 이것을 편집하면 다음과 같은 이점이 있습니다.
  • init.coffee로 소스 전체를 auto indent 하기 위한 프로그램을 만들 수 있다
  • keymap.cson에서 프로그램에 단축키를 할당합니다.
  • 즉 단축키 1발로 전행 auto indent시키는 자동화가 가능

  • 한 줄을 쓸 때마다 조정이 강해지는 것이 힘들기 때문에 만들었다.

    init.coffee: 모든 행 auto indent용 프로그램



    "File"탭 > "Init Script..."에서 열린다.
    Atom's API에 없기 때문에 어른의 사정으로, 「커서를 선두행에 날려 1행씩 내려가면서 전행에 auto indent를 적용해, 다시 원래의 위치에 커서를 되돌린다」라고 하는 머리 나쁜 것 같은 처리 구성에 되었다.

    전행이라든가 말하면서 선행에는 효과가 없을지도.

    다음 소스를 init.coffee에 추가합니다.
    처리명은 우선 「all-text-indent」로 했다(2행째: 'custom:all-text-indent').

    init.coffee
    # 全行auto indentプログラム
    atom.commands.add 'atom-text-editor','custom:all-text-indent',->
      editor=atom.workspace.getActiveTextEditor()
      lastRow=editor.getLastBufferRow()
      pos=editor.getCursorBufferPosition()  # 現在のカーソル位置
      editor.moveToTop()
      for i in [1..lastRow]
        editor.moveDown(1)
        editor.autoIndentSelectedRows()  # auto indent処理
      editor.setCursorBufferPosition(pos)  # カーソル位置を戻す
    

    CoffeeScript는 처음 만졌지만 Atom 공식 참조는 초보자에게 엄격했다 (Atom's API Essential Classes - TextEditor).

    keymap.cson: 단축키 할당



    "File"탭 > "Keymap..."에서 열린다.
    구성이 간단하고 이해하기 쉽습니다. 참고 : 하나의 키 바인드에서 동시에 여러 명령을 실행합니다.

    그런 다음 "init.coffee 편집은 Atom을 다시 시작하지 않으면 유효하지 않습니다"라고 말했습니다.

    다음 소스를 keymap.cson에 추가합니다. 방금 만든 프로세스 "all-text-indent"에 바로 가기 키를 할당합니다. PyCharm의 자동 들여 쓰기가 Ctrl + Alt + L이므로 여기도 마찬가지입니다.

    keymap.cson
    # 全行auto indent用ショートカットキー
    'atom-text-editor':
      'ctrl-alt-l':'custom:all-text-indent'
    

    에디터상에서의 동작이므로 atom-text-editor로 적용하고 있다. 아무래도 잘 사용하면 파일 조작이라든지 여러가지 할 수 있는 것 같다.

    실행 예와 문제점



    PHP 파일로 시도했지만 일반적으로 목표로합니다.
    PyCharm에 익숙했기 때문에 같은 수준으로 가지고 만족.


    ※실제의 코딩으로 이런 무너지는 방법은 아마 하지 않는다. 모든 행에 auto indent가 적용되고 있는 것을 보기 쉽게 하기 위해 의도적으로 무너지고 있다.

    곤란한 일이라고 하면, 1행씩의 처리이므로 「실행 취소(Ctrl+Z)」를 중반 포기할 수밖에 없다.
    이상한 곳에서 적용하면 상당히 비참한 눈을 당한다.

    불평 (포엠)


  • 원래 전행 auto indent 해 주지 않는 것은 어떤 것인가 (무료이기 때문에 어쩔 수 없다)
  • CoffeeScript 공식 참조 이해하기 어렵다. 일본어 해설 사이트에 신세를 졌습니다
  • 목적과는 상관 없지만 Atom 's API의 Point 객체 참조로 막혔습니다. 첫 번째 요소에서 행 수와 열 수를 모두 반환하거나 두 번째 요소에는 아무것도 없거나 (undefined) 자신이 지금 무엇과 싸우고 있는지 알 수 없습니다.
  • ↑ 배열의 것이지만 요소 번호가 통하지 않는다 = 혹시: 연상 배열?
  • ↑Atom 공식 레퍼런스를 잘 읽으면, 사전명 같은 "row", "column"의 문자가 ( Atom's API Essential Classes - Point )
  • ↑ 사전형은 확실히 매우 편리하지만, 「이름을 모르면 요소 번호로 좋은 느낌에 오마화할 수도 없고 막는다」라고 하는 어둠을 안고 있으므로 해설도 조심해 주었으면 하는 곳(조사하는 쪽도 어디에 주목해야할지 공부했습니다.
  • 좋은 웹페이지 즐겨찾기