3P by GN⁺ | ★ favorite | 댓글 1개
  • ModelessVim은 vim 설정 파일 모음으로, 터미널에서 vim의 기능을 유지하면서 GUI 편집기식 키 바인딩으로 저장·선택·복사·붙여넣기를 할 수 있게 함
  • 대상 사용자는 vim을 선호하는 숙련자가 아니라, 평소 VSCode 같은 GUI 편집기를 쓰지만 가끔 터미널 편집기가 필요한 사람임
  • 기본 구성은 Ctrl+S 저장, Shift+방향키 선택, Ctrl+C/V 복사·붙여넣기, Ctrl+F 검색, F3/F4 검색 이동 같은 표준 단축키를 제공함
  • 상단에는 키 바인딩을 알려주는 인포바, 하단에는 파일명·커서 위치 등 정보를 보여주는 상태바가 있으며, 기본 구성은 Nerd Font와 유니코드 표시를 요구함
  • vim 8.2, Debian 11 Bullseye, WSL2, Windows 10 21H2, Windows Terminal 환경에서 테스트됐고, MIT 라이선스의 자유·오픈소스 설정 파일 모음임

GUI 편집기처럼 쓰는 vim

  • ModelessVim은 vim모드 없는 편집기처럼 동작하게 만드는 설정 파일 모음임
  • 일반적인 모드 없는 편집기에서는 글자 키로 바로 텍스트를 입력하고, 저장 같은 명령은 키 바인딩으로 실행함
    • GUI 편집기 대부분과 nano 같은 일부 터미널 편집기가 여기에 해당함
  • 기본 vim 같은 모드 있는 편집기는 명령 모드, 입력 모드, 비주얼 모드 등 여러 모드를 사용함
    • 예: 저장은 명령 모드에서 w를 쓰고, 실제 입력은 입력 모드에서 수행함

대상 사용자와 설계 이유

  • 이 구성은 그래픽 편집기보다 vim을 선호하는 애호가를 대상으로 하지 않음
  • 평소 VSCode 같은 GUI 편집기를 쓰지만, 때때로 터미널에서 실행되는 편집기가 필요한 사용자를 대상으로 함
  • vim 명령을 배워도 정기적으로 쓰지 않으면 계속 잊어버린다는 문제가 있음
  • nano 같은 모드 없는 터미널 편집기보다 vim은 여러 언어에 대한 문법 강조 지원 등 기능이 더 강력하므로, 이 설정은 vim 기능을 유지하면서 모드 없는 사용성을 제공함

제공 기능

  • 표준적인 키 바인딩을 지원함
  • 화면 상단에 키 바인딩을 떠올릴 수 있는 인포바를 표시함
  • 화면 하단에는 파일, 커서 위치, 기타 정보를 보여주는 상태바를 표시함
  • 여러 옵션에 대해 합리적인 기본 설정을 제공함
  • 테스트 환경은 다음과 같음
    • vim 8.2
    • Debian 11 Bullseye
    • Windows 10 21H2의 WSL2
    • Windows Terminal

설치와 사용 방식

  • 저장소를 ~/.vim에 클론함
    git clone --sparse \
        https://github.com/SebastianMuskalla/ModelessVim.git \
        ~/.vim
    
  • vim~/.vim 안의 vimrc 파일을 자동 감지해야 함
  • 자동 감지가 되지 않으면 ~/.vimrc에서 ~/.vim/modeless.vimrc 같은 파일로 심볼릭 링크를 만들 수 있음
    ln -s ~/.vim/modeless.vimrc ~/.vimrc
    
  • sudoedit에서 모드 없는 vim을 쓰려면 .bashrc, .zshrc 등에 다음 설정을 넣음
    export EDITOR=vim
    

모드 있는 vim도 유지하는 방식

  • 일반적인 모드 있는 vim을 계속 쓸 수 있도록, vi 명령은 모드 있는 버전을 실행하게 두는 구성을 권장함
  • /usr/bin/vi 심볼릭 링크는 셸 스크립트로 안전하게 교체할 수 있음
  • 저장소의 vi 스크립트 예시는 ~/.vim/virc가 있으면 이를 사용해 vim을 실행하고, 없으면 기본 vim을 실행함
    #!/bin/sh
    
    if [ -e "$HOME/.vim/virc" ]
    then
        vim -u "$HOME/.vim/virc" "$@"
    else
        vim "$@"
    fi
    

Nerd Font와 ASCII 대안

  • 기본 구성은 Nerd Fonts를 필요로 함
  • Nerd Font는 추가 아이콘이 들어간 고정폭 글꼴
  • 상단 인포바와 하단 상태바가 Nerd Font의 커스텀 아이콘 일부를 사용함
  • 터미널은 유니코드 문자 표시를 지원해야 함
  • 커스텀 글꼴을 쓰지 않거나 쓸 수 없는 경우를 위해 ASCII만 쓰는 파일도 제공함
    • statusline_ascii.vimrc
    • infoline_ascii.vimrc
  • _ascii 버전 사용법은 modeless.vimrc 또는 modeful.vimrc 안의 지침을 따름

주요 키 바인딩

  • 열기·저장·종료
    • Ctrl+Q: 모든 탭을 닫고 각 파일 저장 여부를 물음
    • Ctrl+W: 현재 탭을 닫고 저장 여부를 물음
    • Ctrl+O: 파일 열기
    • Ctrl+S: 현재 파일 저장
    • 이름이 없는 파일은 저장이 동작하지 않음
  • 검색과 치환
    • Ctrl+F: 찾기
    • F3: 다음 검색 결과
    • F4: 이전 검색 결과
    • Ctrl+R: 특정 텍스트의 모든 등장 위치를 치환
  • 선택·잘라내기·복사·붙여넣기
    • Ctrl+A: 전체 선택
    • Shift+Left/Right/Down/Up: 해당 방향으로 선택
    • Ctrl+C: 현재 선택 영역 복사, 선택이 없으면 현재 줄 복사
    • Ctrl+X: 현재 선택 영역 잘라내기, 선택이 없으면 현재 줄 잘라내기
    • Ctrl+D: 현재 줄 잘라내기
    • Ctrl+V: 붙여넣기
  • 기타 동작
    • Ctrl+Z: 실행 취소
    • Ctrl+Y: 다시 실행
    • Shift+Tab: 4칸 되돌리기
    • Ctrl+L: 줄 번호 토글
    • Ctrl+N, Ctrl+B: 일반 vim 모드에서 다음 명령 입력을 허용하며, :q! 같은 vim 명령을 입력할 수 있음
    • F2: 붙여넣기 모드 토글
      • 붙여넣기 모드에서는 vim이 붙여넣은 텍스트를 다시 포맷하지 않음

저장소 파일 구성과 라이선스

댓글과 토론

Hacker News 의견들
  • 저자가 든 이유, 즉 구문 강조나 여러 기능에서 Vim이 다른 터미널 기반 편집기보다 낫다는 설명은 개념적으로 충분히 이해됨
    다만 뭔가 신성모독 같은 느낌이 있음. Tesla에 V8 엔진을 얹거나, 호박파이에서 호박을 빼는 것 같음
    더 많은 사람이 Vim에 접근할 수 있게 되는 건 좋지만, 방식은 마음에 들지 않음. 그래도 만든 사람에게는 박수를 보냄

    • “호박파이에서 호박을 빼는 것 같다”는 비유와 달리, 대부분의 호박파이는 실제로는 호박이 아니라 버터넛 스쿼시나 비슷한 호박류로 만들어짐
      https://en.wikipedia.org/wiki/Cucurbita_moschata
      https://www.thekitchn.com/whats-actually-in-your-canned-pump...
    • Emacs도 터미널에서 돌아감. 어디에나 설치된 건 Vim이 아니라 Vi이고, 어차피 편집기와 설정을 설치할 거라면 그냥 Emacs를 설치해도 됨
    • 모르는 사람을 위해 덧붙이면, 실제로 V8 엔진을 얹은 Tesla가 적어도 두 대는 있음
      https://youtu.be/x-6kHjF1U1E?t=402
      https://twitter.com/FthePump1/status/1738425546621825468
    • 실제 기타는 프렛과 배워야 할 코드가 너무 많으니 Guitar Hero를 더 좋아하는 것과 비슷함
    • 진심으로 좀 아픔. 말은 되지만 아픔
      편집기 모드로 더 부드럽게 들어가는 길이 있었으면 좋겠음. 구석에 모드와 명령을 간단한 그래픽으로 보여주는 식이면 어떨까 싶음
      사용자가 가장 쓸 법한 명령을 알려주는 동적 Vim 인포그래픽 같은 것 말임
  • 이미 Vim에 내장된 기능을 저자가 몰랐던 것 같기도 함: easy vim, 즉 evim이나 vim -y가 있음. man vim을 보면 됨
    그래도 모드 없는 편집기를 찾는다면 Vim은 원하는 편집기가 아님. Vim의 본질과 어긋나고 Vim의 힘을 묶어버림
    Vim을 배우는 건 여정이고, 익숙해지고 나면 왜 Vim인지 이해하게 됨

    • 알아두면 좋겠음
      물론 easy vim을 종료하는 방법은 결국 구글링해야 했음
    • “Vim의 본질과 어긋나고 힘을 묶는다”는 말은 첫 번째도 마지막도 아닌 해키한 프로젝트를 떠올리게 함. 브라우저 밖에서 쓰이는 JS V8 같은 느낌임
      모드 없는 Vim이나 서버 쪽 JavaScript를 피해야 할 좋은 이유가 있을 수도 있지만, 업계는 충분히 괜찮은 해법과 충분히 괜찮은 결과를 압도적으로 받아들임
      결국 Vim go brrrrrr 같은 느낌임
  • Vim 관련 글마다, Vim이 끝내 와닿지 않았다는 가상의 댓글에 대해 늘 하는 말이 있음: Escape 키를 CapsLock으로 재매핑하라는 것임. 정상적인 사람이라면 안 그러고는 Vim을 좋아하기 어려움
    Escape는 가장 중요한 키이고, 삽입할 때마다 문장부호처럼 눌러야 함. 그러니 손가락에서 가장 먼 키여서는 안 됨
    그렇게 된 건 역사적 우연일 뿐임. 피해자가 되지 말고 재매핑하길 바람
    Ctrl+[Ctrl+C를 쓰는 사람들도 알고 있고, 익숙해진 건 알지만 사람은 뭐든 익숙해질 수 있음. 그렇다고 좋은 건 아님. 이상한 조합은 별로고 Ctrl+C에는 몇 가지 특이점이 있음 → https://vi.stackexchange.com/questions/25764/use-control-c-i...
    jk도 알고 있음. 영리한 방법이긴 하지만, 내 매핑은 시스템 전체에 적용되기 때문에 bash, zsh, fish, gdb, firenvim의 Vim 모드에서도 추가 설정 없이 올바른 위치의 Escape를 누릴 수 있음

    • 이 조언은 Vim 사용자든 아니든 모두에게 좋다고 봄. 8년쯤 전 HN에서 누가 이 제안을 했고, 그 뒤로 돌아본 적이 없음
      CapsLock은 현대 컴퓨팅에서는 사실상 쓸모가 거의 없지만, 왼손 새끼손가락 바로 아래에 No/Cancel/Quit/Esc 버튼이 있는 건 훌륭함
      뇌는 하루쯤이면 익숙해지니 한번 시도해볼 만함
    • Ctrl+C가 Escape와 동일하다는 오해가 계속 반복되는 걸 막고 싶음. Ctrl+CEscape와 같지 않음
      특히 InsertLeave를 트리거하지 않아서 몇몇 플러그인이 동작하지 않음
      조언은 “Esc를 더 편한 곳에 재매핑하라”로 요약할 수 있음. 내 CapsLock은 탭하면 Escape, 누르고 있으면 Ctrl임
      삽입 모드 탈출에는 jk를 씀. 손가락이 항상 J/K 위에 있는데, 왜 새끼손가락을 한 키라도 뻗는 “피해자”가 되어야 하나 싶음
    • 그럼 나는 정상인이 아닌가 봄. 재매핑한 적이 없는데도 10년째 열성적인 Vim 사용자
    • “좋다는 뜻은 아니다”가 곧 문제라는 뜻도 아님. 그리고 재매핑을 좋아하는 사람들은 이미 Ctrl을 그 자리에 두고 있음
    • CapsLock 키는 확실히 키보드의 황금 자리를, 자주 쓰지도 않는 기능이 차지하고 있음
      나는 CapsLock을 기능 키로 재매핑하고, CapsLock 자체는 기능+Shift로 옮겼음
      기능+Tab은 Escape로 매핑했는데, 새끼손가락 하나로 쉽게 누를 수 있는 조합임
      이렇게 하면 손을 움직여야 하는 많은 키를 기능+[영숫자 키]로 옮길 수 있음. 기능+i는 insert, 기능+u는 page up, 기능+j는 page down, 기능+r은 home, 기능+f는 end 같은 식임
      QMK를 지원하는 키보드를 써서 이 커스터마이징은 전부 키보드 안에 들어가지만, Windows의 AutoHotKey 같은 컴퓨터 쪽 소프트웨어로도 아마 가능할 것임
  • 오래된 Vim 고인물로서, 잘됐으면 좋겠음
    vim -y도 확인해보길 권함. 그리고 그걸 써보면 아마 질문이 하나 생길 텐데, 답은 Ctrl-l
    이걸 이단이라고 비난하는 사람들에게는 그냥 놔두라고 하고 싶음. 각자 흐름에 맞는 편집기를 쓰면 됨
    프로그래밍은 남이 생각하는 “네 편집기는 이렇게 써야 한다”는 믿음까지 맞춰가며 하기엔 이미 충분히 어려움

  • IBM CUA
    수십 년 전에 TUI 앱을 위한 Common User Access, 즉 FILE | EDIT 같은 표준 메뉴 시스템이 Windows나 Mac OS처럼 정의되어 있었다면 오늘날 Unix/Linux가 얼마나 달랐을지 늘 궁금했음
    표준 덕분에 VI와 Emacs가 같은 키 바인딩을 가졌을 수도 있음
    https://sqlite.org/hctree/doc/hctree/doc/hctree/index.html#s...

    • vi와 emacs는 선사시대 유물임. 요즘 사람들은 /\ 정도는 괜찮아하고, 일부는 파일 구분자로 :도 감당할 수 있음
      하지만 선캄브리아 시대에는 특정 버전의 파일을 편집하려면 ^를 알아야 했음. 차이가 추적되고 있었기 때문임
      둘 다 훌륭하고 놀라운 도구이며 뭐든 처리할 수 있음. 파일 시스템이 막 새로 나온 발명품 같았고 무엇이 좋은지 나쁜지 아무도 몰라서, 모든 걸 다 집어넣어야 했기 때문임
      표준이 존재하기 전에 표준을 만들기는 어려움
    • Vi의 힘은 키 바인딩이 IBM CUA보다 훨씬 인체공학적이라는 데 있음. 터치 타이핑을 한다면 특히 그렇음
      Vi/Vim/NeoVim의 키 바인딩은 편리하고, 조합 가능하고, 기억하기 쉬워서 바꿀 이유가 없음
    • 정말 맞는 말임. 1980년대 말에서 1990년대 초쯤, 큰 DOS 앱들은 이상한 독자 UI를 버리고 CUA UI로 갈아탔음
      예전 UI로 돌아가는 옵션이 가끔 있었지만 많지는 않았고, 일부는 예전 UI도 함께 남겼지만 대체로 한 번에 바뀌었음
      그리고 모든 게 나아졌고, 사용자들은 적응했고, 아무도 뒤돌아보지 않았으며 우리 모두에게 더 좋았음
      안타깝게도 그 메모는 Unix 세계에는 닿지 않았고, 끔찍한 1970년대 방식이 이제는 성전처럼 모셔지고 있음
    • Emacs에는 cua-mode라는 모드가 있고, 브라우저 같은 현대 GUI 프로그램과 더 비슷한 키 바인딩을 제공함
  • 내가 Vim을 가끔만 쓰는 주된 이유는 이 글이 다루는 것과 조금 다름. 일반적인 조직에서 배포한 모든 VM에 기본으로 있고, SSH 너머에서 쓸 수 있는 유일하게 합리적인 편집기가 Vim이기 때문임
    거기서는 보통 기본 설정이고, 설정을 바꾸거나 다른 편집기를 설치하기가 간단하지 않음
    좋은 시도이고 멋져 보이지만, 결국 커서를 그럭저럭 움직이는 기본기는 배워야 하는 처지임

    • 기본기는 15분 안에 배울 수 있음
    • CapsLock을 Escape로 재매핑하면 더 좋아짐
      이제 Vim을 억지로 쓰는 게 아니라 실제로 즐길 수 있고, 좋아하는 셸의 Vim 모드도 써보면서 명령줄 닌자가 될 수 있음
      j/k로 명령 기록을 오르내리고 /만으로 명령 기록을 검색하는 걸 상상해보면 됨
    • 이게 내가 Vim만 쓰는 정확한 사용 사례이고, 그래서 스스로 최소 설정으로만 쓰도록 강제함
    • 다행히 보통은 nano가 설치되어 있고, vi(m)보다 한 자릿수 정도는 더 낫다고 봄
      셸 안에서는 편집기에 들어가 몇 줄 고치고 바로 나오는 게 필요한데, nano가 그걸 아주 잘함
  • 터미널에서 가끔 이상한 설정 파일을 고치려고 Vim을 쓰는 사용자에게 커스텀 Vim 설정을 만지라고 기대하는 건 비현실적이라고 봄
    GUI 편집기처럼 동작하는 좋은 편집기를 정말 찾는다면 micro를 강력히 추천함 [1]
    기본으로 마우스를 지원하고, 많은 언어의 구문 강조가 바로 들어 있으며, 대부분의 키 바인딩이 GUI 편집기와 같고 복사/붙여넣기도 기대한 대로 동작함
    [1] https://github.com/zyedidia/micro

  • 35년 전, vi를 처음 접한 지 며칠 안 돼서 이런 시도를 해봤음
    하지만 여러 머신에 계속 로그인해야 했기 때문에 곧 그냥 기본 vi를 그대로, 모드까지 포함해 쓰는 게 낫다고 판단했음
    그 철학은 세월이 지나도 잘 맞았음

    • 대학에서 Vim을 처음 배운 초기에 비슷한 깨달음을 얻었음. 어떤 도구든 커스터마이징은 결국 수확 체감 지점에 도달하고, 그 이후의 변경은 기본 상태의 도구를 쓰는 능력을 떨어뜨림
      이 통찰은 거의 모든 도구에 적용된다고 봄. 소프트웨어부터 하드웨어와 그 밖의 것들까지 마찬가지임
      도구의 기본 동작을 익힌 뒤 커스터마이징으로 효율을 높이되, 수정되지 않은 상태에서 더 이상 효과적으로 쓸 수 없을 정도로 커스터마이징하지는 말아야 함
      때로는 남의 도구를 써야 하고, 그때도 제대로 일할 수 있어야 함
    • 전적으로 동의하지만, 기본값은 다음 10억 사용자를 수용해야 한다는 점도 인정해야 함
      배포판은 easy-mode를 sensible-editor로 두고, runtime mswin.vim, set nocompatible 같은 것을 skel vimrc로 넣을 권리가 있어야 한다고 봄
      새 사용자가 “vi 종료하는 법”을 구글링하게 만드는 것보다 이런 설정은 바꾸기 쉬움
      하지만 이 글처럼 Ctrl-O를 재매핑하는 건 호환성을 깨는 변경임
    • 그때 어떤 플러그인이나 프로젝트를 썼는지 기억나는지 궁금함. 링크된 것은 꽤 최근 것처럼 보임 [1]
      다른 구현도 있나?
      [1]: https://github.com/SebastianMuskalla/ModelessVim/blob/main/L...
    • 지금은 자체 설정 파일을 포함하는 실제로 이식 가능한 실행 파일이 있음. 여러 플랫폼과 여러 운영체제를 지원하니, 바이너리 하나만 scp하면 끝낼 수 있음
  • 저자가 말하듯 이건 다른 편집기를 쓰는 사용자를 위한 것임. 그렇다면 언제 필요할까 싶음
    아마 사용자가 다른 장치에 로그인했고 터미널 접근만 가능한 상황을 말하는 것 같은데, 그런 경우 이 설정은 기본 설치되어 있지 않을 것임. 그래서 Vim이나 Emacs를 배우는 이유가 생김
    사용 사례가 원격 박스에 이걸 설치하는 것이고 권한도 허용된다는 뜻인가? 권한이 있다면 기존 IDE로 접속해서 터미널을 아예 건너뛸 수 있지 않을까?

    • 내가 이걸 쓰기 시작한 이유는 좋아하는 편집기인 micro의 Ruby 구문 강조가 매우 좋지 않아서였음
      아주 구체적인 사용 사례지만 꽤 괜찮고, 모드 없는 Vim으로 갈아탈까 생각 중임
    • 이건 그냥 Vim 설정임. 공유 시스템에서는 홈 디렉터리는 수정할 수 있지만 추가 소프트웨어 설치 권한은 없는 경우가 아주 흔함
      홈 디렉터리에 소프트웨어를 설치하는 것도 가능하긴 하지만 대체로 좋게 보지 않음
    • IDE를 안 쓰는 주된 이유는 sshfs가 늘 짜증나게 느리다고 느끼기 때문이고, VPS에서 코드를 바로 편집하는 게 편할 때가 많음
      그래서 이건 꼭 시도해볼 생각임
  • 모드 없는 Vim이라니, 땅콩버터 없는 땅콩버터 샌드위치 같음. 그래도 그게 원한다면 잘 쓰면 됨

    • Vim을 아주 가끔만 만지는 사람이, 그럴 수도 있는 순간을 위해 이 저장소를 내려받을지는 잘 상상이 안 됨