기타

Vim 마스터의 길...

99duuk 2025. 3. 3. 15:19

작년에 인텔리제이 서브로 vscode대신 lazyvim을 사용하려고 했는데 진입장벽을 넘지 못하고 포기했다..

하지만 다시 또 온다... vim 마스터가 될거야..

lazyvim을 재설치하고 다시 한 번 써보려했지만 단축키 기억도 제대로 못하는데 사용법 익히는게 너무 막막하다..

일단 인텔리제이에
IdeaVim 을 설치했다...

그리고 몇년째 곧잘 활용 못하는 Vimium을 적극 사용해보기로...


먼저 Vimium 단축키다...

현재 페이지 탐색

  • ?: 모든 단축키 목록이 담긴 도움말 표시.
  • h: 왼쪽으로 스크롤.
  • j: 아래로 스크롤.
  • k: 위로 스크롤.
  • l: 오른쪽으로 스크롤.
  • gg: 페이지 맨 위로 이동.
  • G: 페이지 맨 아래로 이동.
  • d: 페이지 반만큼 아래로 스크롤.
  • u: 페이지 반만큼 위로 스크롤.
  • f: 현재 탭에서 링크 열기.
  • F: 새 탭에서 링크 열기.
  • r: 페이지 새로고침.
  • gs: 소스 코드 보기.
  • i: 입력 모드 진입 (Esc로 나올 때까지 명령 무시).
  • yy: 현재 URL 클립보드에 복사.
  • yf: 링크 URL 클립보드에 복사.
  • gf: 다음 프레임으로 이동.
  • gF: 메인/최상위 프레임에 포커스.

새 페이지로 이동

  • o: URL, 북마크, 방문 기록 열기.
  • O: 새 탭에서 URL, 북마크, 방문 기록 열기.
  • b: 북마크 열기.
  • B: 새 탭에서 북마크 열기.

검색 사용

  • /: 검색 모드 진입 (쿼리 입력 후 Enter로 검색, Esc로 취소).
  • n: 다음 검색 결과로 이동.
  • N: 이전 검색 결과로 이동.

방문 기록 탐색

  • H: 뒤로 가기.
  • L: 앞으로 가기.

탭 관리

  • J, gT: 왼쪽 탭으로 이동.
  • K, gt: 오른쪽 탭으로 이동.
  • g0: 첫 번째 탭으로 (예: 3g0은 3번째 탭).
  • g$: 마지막 탭으로.
  • ^: 이전에 방문한 탭으로.
  • t: 새 탭 생성.
  • yt: 현재 탭 복제.
  • x: 현재 탭 닫기.
  • X: 닫힌 탭 복원.
  • T: 열린 탭 검색.
  • W: 현재 탭을 새 창으로 이동.
  • <a-p>: 탭 고정/고정 해제.

마크 사용

  • ma, mA: 로컬 마크 "a" 설정 (대문자 A는 전역 마크).
  • a`,A`: 로컬 마크 "a"로 이동 (대문자 A는 전역 마크).
  • 
    
    
    

추가 고급 명령어

  • ]], [[: '다음' 또는 '>' / '이전' 또는 '<' 라벨 링크 따라가기 (페이지네이션 탐색).
  • <a-f>: 여러 링크를 새 탭에서 열기.
  • gi: 페이지의 첫 번째 텍스트 입력란에 포커스 (Tab으로 순환).
  • gu: URL 계층 한 단계 위로.
  • gU: URL 루트로 이동.
  • ge: 현재 URL 편집.
  • gE: 현재 URL 편집 후 새 탭에서 열기.
  • zH: 맨 왼쪽으로 스크롤.
  • zL: 맨 오른쪽으로 스크롤.
  • v: 비주얼 모드 (p/P로 붙여넣고 이동, y로 복사).
  • V: 비주얼 라인 모드.
  • R: 페이지 강력 새로고침 (캐시 무시).

명령어 반복 가능 (예: 5t로 탭 5개 연속 생성). <Esc> 또는 <c-[>로 명령어 초기화 및 입력/검색 모드 종료.


https://github.com/philc/vimium/blob/master/README.md#keyboard-bindings


IdeaVim

1. 기본 이동 (지금 아시는 것)

  • 글자 단위 이동: h (좌), j (하), k (상), l (우)
    • 메서드나 변수명 안에서 세밀하게 이동할 때.
  • 단어 단위 이동:
    • w: 다음 단어 처음으로 (예: publicvoid).
    • b: 이전 단어 처음으로 (빠르게 뒤로).
    • e: 다음 단어 끝으로 (예: 변수명 끝으로).
  • 줄 단위 이동:
    • 0: 줄 맨 처음 (예: 들여쓰기 앞).
    • $: 줄 맨 끝 (예: 세미콜론 위치).
    • ^: 줄의 첫 코드 위치 (들여쓰기 뒤).
    • gg: 파일 맨 위 (클래스 선언으로).
    • G: 파일 맨 아래 (엔드포인트나 메서드 끝으로).

2. 입력과 편집 (지금 아시는 것 + 추가)

  • 입력 시작:
    • i: 커서 앞에서 입력 (변수명 수정).
    • a: 커서 뒤에서 입력 (파라미터 추가).
    • A: 줄 끝에서 입력 (예: 메서드 끝에 세미콜론 추가).
    • o: 새 줄 아래에서 입력 (새 메서드나 로직 추가).
    • O: 새 줄 위에서 입력 (주석 추가).
  • 삭제:
    • dd: 현재 줄 삭제 (잘못된 코드 지우기).
    • dG: 커서부터 파일 끝까지 삭제 (대량 정리).
    • dw: 단어 삭제 (변수명 실수 지울 때).
    • diw: 커서가 단어 안에 있을 때 단어 전체 삭제 (공백 안 지움).
    • x: 커서 위치 글자 하나 삭제 (오타 수정).

3. 자바 스프링에서 자주 쓸 만한 추가 명령어

  • 복사/붙이기 (로그나 코드 재사용):
    • yy: 현재 줄 복사 (예: @GetMapping 라인 복사).
    • p: 커서 뒤에 붙이기 (복사한 코드 붙여넣기).
    • P: 커서 앞에 붙이기.
  • 변경 (리팩토링이나 수정):
    • cw: 단어 변경 (커서부터 단어 끝까지 지우고 입력 모드).
      • 예: intString으로 바꿀 때.
    • ci" 또는 ci': 따옴표 안 내용 변경 (문자열 수정).
      • 예: "hello""world".
  • 검색 (메서드나 변수 찾기):
    • /문자열 + Enter: 파일 내 검색 (예: /getUser로 메서드 찾기).
    • n: 다음 검색 결과로, N: 이전 결과로.
    • *: 커서가 있는 단어 검색 (변수명 찾기 유용).
  • 줄 이동 (코드 구조 확인):
    • :숫자: 특정 줄로 이동 (예: :50으로 50번째 줄).
    • { / }: 단락 단위 이동 (메서드 간 이동).

4. 자바 스프링 특화 작업

  • 중괄호 탐색 (메서드 블록 이동):
    • %: 짝이 맞는 중괄호/괄호로 이동.
      • 예: 메서드 시작 {에서 누르면 끝 }로 이동.
  • 들여쓰기 조정 (코드 정렬):
    • >>: 현재 줄 오른쪽으로 들여쓰기.
    • <<: 현재 줄 왼쪽으로 들여쓰기.
    • ==: 현재 줄 자동 들여쓰기 맞춤.
  • 주석 처리 (디버깅/설명 추가):
    • LazyVim 기준: <Space>/ (줄 주석 토글).
    • 기본 Vim: I// + Esc (줄 처음에 // 삽입).

5. 저장 및 종료 (작업 마무리)

  • :w: 저장.
  • :q: 종료 (IntelliJ에서는 파일 닫기).
  • :wq: 저장 후 종료.
  • :q!: 저장 안 하고 강제 종료 (실수한 코드 버릴 때).

자바 스프링 코딩 예시 시나리오

상황 1: 새 메서드 추가

@GetMapping("/users")
public List<User> getUsers() {
    return userService.findAll();
}
  • o 눌러 새 줄 추가 → @GetMapping("/users") 입력.
  • o로 다음 줄 → public List<User> getUsers() { 입력.
  • o로 블록 안 → return userService.findAll(); 입력.
  • $로 줄 끝 → } 추가.

상황 2: 변수명 수정

int count = 10;
  • w로 "count" 시작으로 이동 → cwtotal 입력.
  • 결과: int total = 10;.

상황 3: 메서드 찾기

  • /findAll 입력 → Enter → n으로 다음 결과 이동.
  • %로 메서드 끝 확인.

상황 4: 코드 삭제/복사

  • 잘못된 줄에서 dd로 삭제.
  • @PostMapping 라인에서 yy → 아래로 이동 → p로 붙여넣기.

'기타' 카테고리의 다른 글

ArrayList와 HashSet 만들어보기.. C++  (1) 2025.03.03
순서복잡도 (Time Complexity)  (0) 2025.03.02
List와 Set의 차이  (0) 2025.03.02
어떻게 공부할 것인가.... 1  (0) 2025.02.11
Deque  (1) 2025.01.16