-
ideavim은 IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm, RubyMine, AppCode, DataGrip, GoLand, Rider, Cursive, Android Studio에서 사용할 수 있는 vim plugin이다.
설치
최신 버전의 vim plugin을 설치하기 위해서는 IDE의 plugin manager를 사용하면 설치할 수 있다.
"Tools | Vim Emulator" 메뉴 항목을 통해 사용 여부를 선택할 수 있다.
vim와 IDE 간의 단축키 충돌은 Linux & Window인 경우 "File | Settings | Editor | Vim Emulation", "File | Settings | Keymap"을 통해 재설정하여 해결할 수 있다.
macOS인 경우 "Preferences | Editor | Vim Emulation", "Preferences | Keymap"을 통해 재설정하여 해결할 수 있다.
또한, ~/.ideavimrc 파일에 key-mapping 명령어를 사용해 해결할 수 있다.
Early Access Program
새로운 기능과 수정사항이 반영된 버전을 사용하고 싶다면 EAP(Early Access Program)를 해보자.
2가지 방법이 있다.
방법1
아래 화면의 상태 바에서 ideavim 아이콘을 클릭하고, EAP | Get Early Access... 선택한다.
방법2
File | Settings | plugins 이동하고, 톱니바퀴 모양의 아이콘을 클릭한다.
Manage Plugin Repositories 선택하고,
https://plugins.jetbrains.com/plugins/eap/ideavim을 추가한다.
다음은 위 내용을 실행한 화면이다.
공개되지 않은 기능 목록은 Changelog에서 볼 수 있다.
EAP와 pre-release를 구별하는 것이 중요하다.
Vim 기능
Supported:
- Motion keys(커서 위치를 이동할 때 사용하는 키)
- Deletion/changing
- Insert mode commands
- Marks
- Registers
- Undo/redo
- Visual mode commands
- Some Ex commands
- Some :set options
- Full Vim regexps for search and search/replace
- Key mappings
- Macros
- Digraphs
- Command line and search history
- Window commands
- Vim web help
- Select mode
Emulated Vim plugins:
- vim-surround
- vim-multiple-cursors
- vim-commentary
Not supported (yet):
- Jump lists
- Various less-used commands
Motion keys
<C-키>는 CTRL과 해당 키를 함께 누르는 것을 의미합니다.
highlight 된 검색 결과는 :noh 또는 :nohlsearch 를 입력하면 highlight 를 끌 수 있습니다.
키 ideavim vim 기능 왼쪽으로 이동 0 가능 현재 라인의 가장 왼쪽으로 커서 이동. HOME 키와 같다. ^ 가능 현재 라인의 첫 번째 글자로 커서 이동. 0 과 비슷하지만 인덴트(공백)를 무시하므로 더 유용하다. F문자 가능 왼쪽으로 문자를 검색하여 해당 문자 위로 커서 이동. T문자 가능 왼쪽으로 문자를 검색하여 해당 문자 뒤로 커서 이동. ; 가능 다음 검색 결과로 이동. , 가능 이전 검색 결과로 이동. b 가능 커서 왼쪽 단어의 첫 글자로 이동. B 가능 커서 왼쪽 단어의 첫 글자로 이동. 단 특수문자도 단어의 일부로 친다. ge 가능 커서 왼쪽 단어의 마지막 글자로 이동. gE 가능 커서 왼쪽 단어의 마지막 글자로 이동. 단 특수문자도 단어의 일부로 친다. 오른쪽으로 이동 $ 가능 현재 라인의 가장 마지막으로 커서 이동. END 키와 같다. f문자 가능 오른쪽으로 문자를 검색하여 해당 문자 위로 커서 이동. t문자 가능 오른쪽으로 문자를 검색하여 해당 문자 앞으로 커서 이동. ; 가능 다음 검색 결과로 이동. , 가능 이전 검색 결과로 이동. W 가능 커서 오른쪽 단어의 첫 글자로 이동. 단 특수문자도 단어의 일부로 친다. w 가능 커서 오른쪽 단어의 첫 글자로 이동. E 가능 커서 오른쪽 단어의 마지막 글자로 이동. 단 특수문자도 단어의 일부로 친다. e 가능 커서 오른쪽 단어의 첫 글자로 이동. 위쪽으로 이동 gg 가능 첫 번째 라인으로 이동. <C-b> 가능 페이지 up. <C-u> 가능 반 페이지 up. H 가능 현재 화면에 보이는 첫 번째 라인으로 이동. { 가능 현재 커서가 위치한 문단의 시작 지점으로 이동. ( 가능 현재 커서가 위치한 문장의 시작 지점으로 이동. M 가능 현재 화면의 중간 라인으로 이동. 아래쪽으로 이동 G 가능 마지막 라인으로 이동. <C-f> 가능 페이지 down. <C-d> 가능 반 페이지 down. L 가능 현재 화면에 보이는 마지막 라인으로 이동. } 가능 현재 커서가 위치한 문단의 마지막 지점으로 이동. ) 가능 현재 커서가 위치한 문장의 마지막 지점으로 이동. M 가능 현재 화면의 중간 라인으로 이동. 특수 이동 숫자gg 가능 해당 라인 넘버로 이동. :숫자 가능 해당 라인 넘버로 이동. /정규식 가능 현재 파일 내 검색 후 커서를 옮겨준다. ?정규식 가능 현재 파일 내 검색 후 커서를 옮겨준다.(역방향) * 가능 현재 커서가 있는 위치의 단어를 검색한다. # 가능 현재 커서가 있는 위치의 단어를 검색한다.(역방향) n 가능 다음 검색 결과로 커서 이동. N 가능 이전 검색 결과로 커서 이동. % 가능 현재 커서가 위치한 괄호((), {}, [] 등)의 짝으로 이동한다. `문자 일종의 북마크 기능. 자세한 내용은 marks 문서를 참고. '문자 일종의 북마크 기능. 자세한 내용은 marks 문서를 참고. <C-e> 불가능 위로 스크롤. <C-y> 불가능 아래로 스크롤. zz 가능 현재 커서가 있는 위치를 화면 중간으로 스크롤 한다. 이동 예제 10<C-f> 가능 페이지 down을 10 회 한다. 100k 가능 100 줄 위로 간다. 7l 가능 7칸 오른쪽으로 간다. {v} 가능 현재 문단 전체를 선택한다. {v}y 가능 현재 문단 전체를 복사한다. {v}d 가능 현재 문단 전체를 삭제한다. 3w 가능 오른쪽으로 3 단어 이동한다. d3w 가능 오른쪽으로 3 단어를 삭제한다. 2ft 가능 오른쪽의 두 번째 t 로 이동한다. d2ft 가능 오른쪽의 두 번째 t 까지 삭제한다. y2ft 가능 오른쪽의 두 번째 t 까지 복사한다. "ay2ft 오른쪽의 두 번째 t 까지 a 레지스터로 복사한다. v2ft 가능 오른쪽의 두 번째 t 까지 선택한다. dt' 가능 현재 커서 위치부터 ' 앞까지 삭제한다. yt' 가능 현재 커서 위치부터 ' 앞까지 복사한다. vt' 가능 현재 커서 위치부터 ' 앞까지 선택한다. 42gg 가능 44번 라인으로 이동한다. d42gg 가능 현재 커서 위치부터 44번 라인까지 삭제한다. %v%"by 현재 커서가 있는 문장을 감싸는 괄호 내 전체를 선택하고 b 레지스터에 복사한다. 검색 예제 /asdf 가능 문자열 asdf 를 검색한다. /asdf/s 가능 문자열 asdf 를 검색하고, asdf 의 첫번째 문자 a 로 커서를 이동한다.(디폴트 값) /asdf/e 가능 문자열 asdf 를 검색하고, asdf 의 마지막 문자 f 로 커서를 이동한다. /asdf/e+2 문자열 asdf 를 검색하고, asdf 의 마지막 문자 f 이후 2 번째 위치로 커서를 이동. 2/asdf 불가능 문자열 asdf 를 검색한 결과 두 번째 asdf 로 커서를 이동한다. 2/asdf/e-3 불가능 문자열 asdf 를 검색한 결과 두 번째 asdf 의 마지막 문자 f 이전 3 번째 위치로 커서 이동. /asdf/+7 가능 문자열 asdf 를 검색하고, 검색 결과의 7 줄 아래로 커서 이동. /^\n\{3} 가능 빈 라인 3 줄을 찾는다. /^[a-t] 가능 a 에서 t 사이의 알파벳으로 시작하는 라인을 찾는다. /aaa\_s*bbb 가능 aaa 와 bbb 사이에 여러 줄의 공백 라인이 있어도 찾는다. JUMP ', ', `, G, /, ?, n, N, %, (, ), [[, ]], {, }, :s, :tag, L, M, H
위의 이동 명령들 중 단순 좌우이동이 아닌 것은 모두 JUMP 라고 부릅니다. 즉, 다음 명령들이 점프에 속합니다.
:ju 가능 점프 히스토리 :jumps 가능 점프 히스토리 <C-o> 가능 점프 히스토리의 이전 점프로 이동한다. <C-i> 가능 점프 히스토리의 다음 점프로 이동한다.
Insert mode commands
<C-키>는 CTRL과 해당 키를 함께 누르는 것을 의미합니다.
키 ideavim vim 기능 기본 <C-h> 가능 커서 앞의 한 글자를 삭제한다. <BS>(백스페이스)와 같다. <C-w> 가능 커서 앞의 한 단어를 삭제한다. <C-u> 가능 커서 앞의 모든 문자를 삭제한다. <C-j> 불가능 <NL>. <Enter>와 같다고 생각하면 된다. <C-m> 불가능 <CR>. <Enter>와 같다고 생각하면 된다. <C-t> 불가능 현재 편집중인 라인을 오른쪽으로 한 단계 들여쓰기 한다. <C-d> 불가능 현재 편집중인 라인을 왼쪽으로 한 단계 들여쓰기 한다. 0<C-d> 현재 편집중인 라인의 인덴트를 전부 삭제한다. ^<C-d> 0<C-d>와 같지만, <Enter>로 다음 라인으로 갔을 때, 인덴트가 유지된다. <C-e> 불가능 커서 바로 아랫줄의 문자를 입력한다. <C-y> 불가능 커서 바로 윗줄의 문자를 입력한다. <C-k> 불가능 입력한 다음 1~2 개의 키를 입력하면 특수 문자를 입력할 수 있다. <C-v> 불가능 특수 문자를 입력할 수 있다. <C-q> 불가능 <C-v>와 같다. <C-i> 가능 <Tab>키를 입력. 붙여넣기 <C-r> 가능 입력한 다음 레지스터 문자(0-9a-z"%#*+:.-=)를 입력하면 해당 레지스터에 담긴 값을 붙여넣을 수 있다. <C-r><C-r> 불가능 <C-r>과 같지만, 레지스터에 담긴 값을 문자열로 붙여넣는다. <C-r><C-o> <C-r><C-r>과 같지만, 인덴트를 적용하지 않는다(앞의 공백 무시). <C-r><C-p> <C-r><C-r>과 같지만, 인덴트를 적용한다. <C-r>= = 레지스터의 특수한 기능 때문에 여러가지 표현식을 입력하고 평가 결과를 붙여넣을 수 있다. <C-a> 가능 바로 전 INSERT 모드에서 입력한 문자열을 그대로 입력. <C-2> 가능 바로 전 INSERT 모드에서 입력한 문자열을 그대로 입력한 다음, NORMAL 모드로 전환. 자동완성, CTRL-x 모드 <C-n> 불가능 키워드 자동완성(다음). <C-p> 불가능 키워드 자동완성(이전). <C-x> 불가능 <C-x>모드로 들어간다. <C-x><C-f> 파일명 자동 완성. bash의 <TAB> 파일명 자동완성과 비슷하다. <C-x><C-l> line 자동 완성. 단어 자동완성과 같은 느낌으로 한 줄을 완성한다. <C-x><C-e> 불가능 아래로 한 줄씩 스크롤한다. <C-x><C-y> 불가능 위로 한 줄씩 스크롤한다. <C-x><C-k> dictionary 자동 완성. 설정 필요. <C-x><C-v> Vim command line 명령어 자동완성. <C-x><C-o> omni completion. 프로그래밍 언어 별 키워드, 기본 함수 등의 자동 완성. VIM7 부터 추가.
register
register는 문자열을 저장하는 공간이다.
register 보는 방법은 :reg 또는 :registers를 입력한다.
:reg 명령어 실행에서 보이는 ^J는 줄바꿈, ^I는 탭을 의미한다.
register 사용 방법
NORMAL, VISUAL, INSERT 모드에서 사용 가능하다.
NORMAL, VISUAL 모드에서 사용하는 방법과 INSERT 모드에서 사용하는 방법이 다르다.
- NORMAL, VISUAL 모드에서 사용하는 방법
복사/삭제액션 -> 예) p 명령어시 붙여넣기를 실행한다.
"레지스터기호 복사/삭제액션 -> 예) "2p 명령어시 "2 레지스터의 내용을 붙여넣기한다.
- INSERT 모드에서 사용하는 방법
<C-r> 레지스터기호 -> 예) <Ctrl+r>2 명령어시 "2레시지스터의 내용을 붙여넣기한다.
register 목록
레지스터 타입 ideavim 테스트 설명 "" unnamed O 마지막으로 삭제했거나 복사한 문자열이 들어간다. "0 - "9 numbered O "" 레지스터의 히스토리. 숫자가 클 수록 오래된 값들이다. "a - "z named O 자동 입력이 없고 사용자가 자유롭게 사용할 수 있는 레지스터. "A - "Z named X 자동 입력이 없고 사용자가 자유롭게 사용할 수 있는 레지스터. "- small delete O 한 줄 미만의 삭제가 이루어진 경우 "- 레지스터에 입력된다. "*, "+ selection and drop O gui 클립보드 레지스터. (다른 프로그램의 ⌘C) ". read-only X 가장 최근에 입력된 문자열이 입력되는 레지스터. ": read-only O 가장 최근에 입력한 command line 명령어가 입력되는 레지스터. "% read-only X 현재 편집중인 파일의 이름이 입력되어 있는 레지스터. "/ last search pattern O 가장 최근의 검색어가 입력되는 레지스터. "= expression register X 가장 최근에 사용한 expression 이 입력되는 레지스터. "_ black hole X 블랙홀 레지스터! /dev/null 같은 역할을 합니다. register 사용 예제 (기초)
- NORMAL 모드
키 ideavim 테스트 설명 yy O 현재 라인을 "" 레지스터와 "0 레지스터에 입력한다. 기존 "0 레지스터의 값은 "1 로 밀려난다. dd O 현재 라인을 삭제하고 "" 레지스터와 "0 레지스터에 입력한다. 기존 "0 레지스터의 값은 "1 로 밀려난다. "+yy O 현재 라인을 클립보드("+ 레지스터)에 입력한다. "+p O 클립보드("+레지스터)의 내용을 붙여넣기한다. "2p O "2 레지스터의 내용을 붙여넣기한다. "%p X "% 레지스터의 내용(현재 편집중인 파일의 이름)을 붙여넣기한다. :let @+='test' X "+ 레지스터에 test 라는 문자열을 입력한다. :let @a=@+ X "a 레지스터에 "+ 레지스터의 값을 입력한다. :@: O 가장 최근에 사용한 command line 명령어를 다시 실행한다. - INSERT 모드
키 ideavim 테스트 설명 <C-r>+ O 클립보드("+레지스터)의 내용을 붙여넣기한다. <C-r>2 O "2 레지스터의 내용을 붙여넣기한다. <C-r>% X "% 레지스터의 내용(현재 편집중인 파일명)을 붙여넣기한다. <C-r>=7*8 X expression 레지스터를 사용해, 56을 입력한다. <C-r>=@a X expression 레지스터를 사용해, "a레지스터의 값을 입력한다. - VISUAL 모드
키 ideavim 테스트 설명 "+y O 선택한 영역을 클립보드("+ 레지스터)에 입력한다. "cy O 선택한 영역을 "c 레지스터에 입력한다. register 사용 예제 (응용)
- NORMAL 모드
키 ideavim 테스트 설명 vi}"7y O 현재 커서가 위치하고 있는 { } 영역 내의 모든 문자열을 7 레지스터에 입력한다. ggVG"by O 현재 파일 전체를 b 레지스터에 입력한다. %v%y O 현재 커서가 있는 코드를 감싼가장 가까운 괄호 내 모든 문자열을 "" 레지스터에 입력한다. :let @+=expand('%:p') X "+ 레지스터에 현재 파일의 경로를 입력한다. :let @a=@b.@c.'123' X "b, "c 레지스터와 '123' 이란 문자열을 concat 하여 "a 레지스터에 입력한다. :let @a=substitute(@a,'d','a','g') X "a 레지스터의 문자열 중 모든 d 를 a 로 replace 한다. - INSERT 모드
키 ideavim 테스트 설명 <C-r>=@a.@b X "a와 "b레지스터의 값을 concat 하여 입력한다. <C-r>=@a.'123'.@b X "a, 문자열 'test', "b레지스터의 값을 concat 하여 입력한다. <C-r>=system('cat filename') X filename파일 내용을 붙여넣는다.
macro
vim에는 사용자의 키 입력을 기록해서 반복해주는 기능인 macro가 있다.
macro는 레지스터에 기록된다.
macro 사용법
키 ideavim 테스트 설명 q레지스터기호 O 기록 시작. q O 기록 종료. @레지스터기호 X 매크로 호출. @@ X 가장 최근에 호출한 매크로 호출.
mark
mark는 커서 위치를 기억하는 일종의 북마크 기능이다.
mark는 .viminfo에 기록되기 때문에 vim을 종료한 후에 다시 실행해도 마크를 사용할 수 있다.
mark 목록
마크 ideavim 테스트 설명 ' O 가장 최근에 점프한 라인. ` O 가장 최근에 점프한 위치. a - z O 로컬 마크. 파일마다 a 부터 z 까지의 로컬 마크를 가질 수 있다.
예) 'a
A - Z O 글로벌 마크. test 라는 파일에 A 마크를 지정하면 A 마크를 호출하여 어디에서도 test 파일로 점프할 수 있다. " O 현재 편집중인 파일에서 다른 파일로 점프하거나 했을 경우, 커서가 마지막으로 위치한 곳. 0 - 9 O 종료한 파일 히스토리. 마지막으로 편집한 여러 파일이 기록에 남게 된다. ^ O 가장 최근에 INSERT 모드였던 위치.
예) '^
. O 마지막으로 편집한 위치. < O 가장 최근에 VISUAL 모드로 선택한 첫 글자의 위치. > O 가장 최근에 VISUAL 모드로 선택한 마지막 글자의 위치. ( O 현재 문장의 시작지점. ) O 현재 문장의 종료지점. { O 현재 문단의 시작지점. } O 현재 문단의 종료지점. mark 목록 확인하는 방법
:marks 명령어는 모든 마크의 정보를 출력한다.
mark 지정 방법
m 마크아이디
mark로 이동하는 방법
키 ideavim 테스트 설명 ` 마크아이디 O 커서를 a 마크로 이동. ' 마크아이디 O 커서를 a 마크가 있는 라인으로 이동(해당 라인의 가장 왼쪽으로 이동합니다). ]` X 다음 마크로 이동. ]' X 다음 마크가 있는 라인으로 이동. [` X 이전 마크로 이동. [' X 이전 마크가 있는 라인으로 이동. mark를 삭제하는 방법
키 ideavim 테스트 설명 :delm 마크아이디 O 마크아이디의 mark 삭제 :delmarks 마크아이디 O 마크아이디의 mark 삭제 :delm! O 소문자 마크아이디 전체 삭제 :delmarks! O 소문자 마크아이디 전체 삭제 mark 사용 예제 (기본)
키 ideavim 테스트 설명 ma O 현재 커서 위치를 마크 a 에 기억시킨다. mA O 현재 커서 위치와 파일을 마크 A 에 기억시킨다. `a O 현재 커서 위치를 a 마크로 이동. 'a O 현재 커서 위치를 a 마크가 있는 라인으로 이동. `A O A 마크를 지정한 파일을 열고 마크 위치로 이동. 'A O A 마크를 지정한 파일을 열고 마크가 있는 라인으로 이동. `. O 마지막으로 편집한 파일의 마지막으로 편집한 위치로 돌아간다. :marks O 모든 마크의 리스트를 확인한다. :marks abc X 마크 a,b,c 의 리스트를 확인한다. :delm a O a 마크를 삭제한다. :delm a-d O a,b,c,d 마크를 삭제한다. :delm abdh O a,b,d,h 마크를 삭제한다. :delm! O a 부터 z 까지 소문자 마크를 모두 삭제한다. mark 사용 예제 (응용)
키 ideavim 테스트 설명 v`a O 현재 커서부터 a 마크까지 선택한다. y'a O 현재 커서부터 a 마크가 있는 라인의 첫 글자까지 복사한다. d`a O 현재 커서부터 a 마크까지 삭제한다. `<v`> O 마지막으로 선택한 영역을 다시 선택한다.
이 기능은 NORMAL 모드에서 gv로도 가능하다.`1:cd 히스토리의 1번 파일 마크로 이동한 다음, 작업 경로(:pwd로 확인 가능)도 변경한다. 'b'' O b 마크로 점프한 다음, 점프 직전의 위치로 돌아간다. :'a,'b d O a 마크가 있는 라인부터 b 마크가 있는 라인까지 삭제한다. :'a,'b y O a 마크가 있는 라인부터 b 마크가 있는 라인까지 복사한다. :'a,'b s/test/pass/g O a 마크부터 b 마크 사이의 모든 test 문자열을 pass로 replace 한다. zf'a X 현재 커서가 있는 위치부터 a 마크가 있는 라인까지 보이지 않도록 fold 한다.
명령어
키 ideavim 테스트 설명 :tabonly O 해당 탭을 제외한 모든 탭을 닫는다. :shell O 내장 터미널을 실행한다.
전체 목록
/* * IdeaVim - Vim emulator for IDEs based on the IntelliJ platform * Copyright (C) 2003-2019 The IdeaVim authors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ /** * IdeaVim command index. * * * 1. Insert mode * * tag action * ------------------------------------------------------------------------------------------------------------------- * * |i_CTRL-@| {@link com.maddyhome.idea.vim.action.change.insert.InsertPreviousInsertExitAction} * |i_CTRL-A| {@link com.maddyhome.idea.vim.action.change.insert.InsertPreviousInsertAction} * |i_CTRL-C| {@link com.maddyhome.idea.vim.action.change.insert.InsertExitModeAction} * |i_CTRL-D| {@link com.maddyhome.idea.vim.action.change.shift.ShiftLeftLinesAction} * |i_CTRL-E| {@link com.maddyhome.idea.vim.action.change.insert.InsertCharacterBelowCursorAction} * |i_CTRL-G_j| TO BE IMPLEMENTED * |i_CTRL-G_k| TO BE IMPLEMENTED * |i_CTRL-G_u| TO BE IMPLEMENTED * |i_<BS>| {@link com.maddyhome.idea.vim.action.editor.VimEditorBackSpace} * |i_digraph| IdeaVim enter digraph * |i_CTRL-H| IntelliJ editor backspace * |i_<Tab>| {@link com.maddyhome.idea.vim.action.editor.VimEditorTab} * |i_CTRL-I| IntelliJ editor tab * |i_<NL>| {@link com.maddyhome.idea.vim.action.change.insert.InsertEnterAction} * |i_CTRL-J| TO BE IMPLEMENTED * |i_CTRL-K| IdeaVim enter digraph * |i_CTRL-L| TO BE IMPLEMENTED * |i_<CR>| {@link com.maddyhome.idea.vim.action.change.insert.InsertEnterAction} * |i_CTRL-M| {@link com.maddyhome.idea.vim.action.change.insert.InsertEnterAction} * |i_CTRL-N| {@link com.maddyhome.idea.vim.action.window.LookupDownAction} * |i_CTRL-O| {@link com.maddyhome.idea.vim.action.change.insert.InsertSingleCommandAction} * |i_CTRL-P| {@link com.maddyhome.idea.vim.action.window.LookupUpAction} * |i_CTRL-Q| TO BE IMPLEMENTED * |i_CTRL-R| {@link com.maddyhome.idea.vim.action.change.insert.InsertRegisterAction} * |i_CTRL-R_CTRL-R| TO BE IMPLEMENTED * |i_CTRL-R_CTRL-O| TO BE IMPLEMENTED * |i_CTRL-R_CTRL-P| TO BE IMPLEMENTED * |i_CTRL-T| {@link com.maddyhome.idea.vim.action.change.shift.ShiftRightLinesAction} * |i_CTRL-U| {@link com.maddyhome.idea.vim.action.change.insert.InsertDeleteInsertedTextAction} * |i_CTRL-V| TO BE IMPLEMENTED * |i_CTRL-V_digit| TO BE IMPLEMENTED * |i_CTRL-W| {@link com.maddyhome.idea.vim.action.change.insert.InsertDeletePreviousWordAction} * |i_CTRL-X| TO BE IMPLEMENTED * |i_CTRL-Y| {@link com.maddyhome.idea.vim.action.change.insert.InsertCharacterAboveCursorAction} * |i_CTRL-Z| TO BE IMPLEMENTED * |i_<Esc>| {@link com.maddyhome.idea.vim.action.change.insert.InsertExitModeAction} * |i_CTRL-[| {@link com.maddyhome.idea.vim.action.change.insert.InsertExitModeAction} * |i_CTRL-\_CTRL-N| {@link com.maddyhome.idea.vim.action.change.insert.InsertExitModeAction} * |i_CTRL-\_CTRL-G| TO BE IMPLEMENTED * |i_CTRL-]} TO BE IMPLEMENTED * |i_CTRL-^| TO BE IMPLEMENTED * |i_CTRL-_| TO BE IMPLEMENTED * |i_0_CTRL-D| TO BE IMPLEMENTED * |i_^_CTRL-D| TO BE IMPLEMENTED * |i_<Del>| {@link com.maddyhome.idea.vim.action.editor.VimEditorDelete} * |i_<Left>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionLeftInsertModeAction} * |i_<S-Left>| {@link com.maddyhome.idea.vim.action.motion.text.MotionWordLeftInsertAction} * |i_<C-Left>| {@link com.maddyhome.idea.vim.action.motion.text.MotionWordLeftInsertAction} * |i_<Right>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionRightInsertAction} * |i_<S-Right>| {@link com.maddyhome.idea.vim.action.motion.text.MotionWordRightInsertAction} * |i_<C-Right>| {@link com.maddyhome.idea.vim.action.motion.text.MotionWordRightInsertAction} * |i_<Up>| {@link com.maddyhome.idea.vim.action.editor.VimEditorUp} * |i_<S-Up>| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollPageUpInsertModeAction} * |i_<Down>| {@link com.maddyhome.idea.vim.action.editor.VimEditorDown} * |i_<S-Down>| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollPageDownInsertModeAction} * |i_<Home>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionFirstColumnInsertModeAction} * |i_<C-Home>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionGotoLineFirstInsertAction} * |i_<End>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionLastColumnInsertAction} * |i_<C-End>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionGotoLineLastEndInsertAction} * |i_<Insert>| {@link com.maddyhome.idea.vim.action.change.insert.InsertInsertAction} * |i_<PageUp>| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollPageUpInsertModeAction} * |i_<PageDown>| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollPageDownInsertModeAction} * |i_<F1>| IntelliJ help * |i_<Insert>| IntelliJ editor toggle insert/replace * |i_CTRL-X_index| TO BE IMPLEMENTED * * * 2. Normal mode * * tag action * ------------------------------------------------------------------------------------------------------------------- * * |CTRL-A| {@link com.maddyhome.idea.vim.action.change.change.number.ChangeNumberIncAction} * |CTRL-B| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollPageUpAction} * |CTRL-C| TO BE IMPLEMENTED * |CTRL-D| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollHalfPageDownAction} * |CTRL-E| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollLineDownAction} * |CTRL-F| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollPageDownAction} * |CTRL-G| {@link com.maddyhome.idea.vim.action.file.FileGetFileInfoAction} * |<BS>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionLeftWrapAction} * |CTRL-H| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionLeftWrapAction} * |<Tab>| TO BE IMPLEMENTED * |CTRL-I| {@link com.maddyhome.idea.vim.action.motion.mark.MotionJumpNextAction} * |<NL>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionDownNotLineWiseAction} * |CTRL-J| TO BE IMPLEMENTED * |CTRL-L| not applicable * |<CR>| {@link com.maddyhome.idea.vim.action.motion.updown.EnterNormalAction} * |CTRL-M| {@link com.maddyhome.idea.vim.action.motion.updown.MotionDownFirstNonSpaceAction} * |CTRL-N| {@link com.maddyhome.idea.vim.action.motion.updown.MotionDownCtrlNAction} * |CTRL-O| {@link com.maddyhome.idea.vim.action.motion.mark.MotionJumpPreviousAction} * |CTRL-P| {@link com.maddyhome.idea.vim.action.motion.updown.MotionUpCtrlPAction} * |CTRL-R| {@link com.maddyhome.idea.vim.action.change.RedoAction} * |CTRL-T| TO BE IMPLEMENTED * |CTRL-U| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollHalfPageUpAction} * |CTRL-V| {@link com.maddyhome.idea.vim.action.motion.visual.VisualToggleBlockModeAction} * |CTRL-W| see window commands * |CTRL-X| {@link com.maddyhome.idea.vim.action.change.change.number.ChangeNumberDecAction} * |CTRL-Y| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollLineUpAction} * |CTRL-Z| TO BE IMPLEMENTED * |CTRL-]| {@link com.maddyhome.idea.vim.action.motion.search.GotoDeclarationAction} * |CTRL-6| {@link com.maddyhome.idea.vim.action.file.FilePreviousAction} * |CTRL-\CTRL-N| {@link com.maddyhome.idea.vim.action.ResetModeAction} * |<Space>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionRightWrapAction} * |!| {@link com.maddyhome.idea.vim.action.change.change.FilterMotionAction} * |!!| translated to !_ * |quote| {@link com.maddyhome.idea.vim.action.copy.SelectRegisterAction} * |#| {@link com.maddyhome.idea.vim.action.motion.search.SearchWholeWordBackwardAction} * |$| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionLastColumnAction} * |%| {@link com.maddyhome.idea.vim.action.motion.updown.MotionPercentOrMatchAction} * |&| {@link com.maddyhome.idea.vim.action.change.change.ChangeLastSearchReplaceAction} * |'| {@link com.maddyhome.idea.vim.action.motion.mark.MotionGotoMarkLineAction} * |''| ? * ... * |(| {@link com.maddyhome.idea.vim.action.motion.text.MotionSentencePreviousStartAction} * |)| {@link com.maddyhome.idea.vim.action.motion.text.MotionSentenceNextStartAction} * |star| {@link com.maddyhome.idea.vim.action.motion.search.SearchWholeWordForwardAction} * |+| {@link com.maddyhome.idea.vim.action.motion.updown.MotionDownFirstNonSpaceAction} * |,| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionLastMatchCharReverseAction} * |-| {@link com.maddyhome.idea.vim.action.motion.updown.MotionUpFirstNonSpaceAction} * |.| {@link com.maddyhome.idea.vim.action.change.RepeatChangeAction} * |/| {@link com.maddyhome.idea.vim.action.motion.search.SearchEntryFwdAction} * |:| {@link com.maddyhome.idea.vim.action.ExEntryAction} * |;| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionLastMatchCharAction} * |<| {@link com.maddyhome.idea.vim.action.change.shift.ShiftLeftMotionAction} * |<<| translated to <_ * |=| {@link com.maddyhome.idea.vim.action.change.shift.AutoIndentMotionAction} * |==| translated to =_ * |>| {@link com.maddyhome.idea.vim.action.change.shift.ShiftRightMotionAction} * |>>| translated to >_ * |?| {@link com.maddyhome.idea.vim.action.motion.search.SearchEntryRevAction} * |@| {@link com.maddyhome.idea.vim.action.macro.PlaybackRegisterAction} * |A| {@link com.maddyhome.idea.vim.action.change.insert.InsertAfterLineEndAction} * |B| {@link com.maddyhome.idea.vim.action.motion.text.MotionBigWordLeftAction} * |C| {@link com.maddyhome.idea.vim.action.change.change.ChangeEndOfLineAction} * |D| {@link com.maddyhome.idea.vim.action.change.delete.DeleteEndOfLineAction} * |E| {@link com.maddyhome.idea.vim.action.motion.text.MotionBigWordEndRightAction} * |F| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionLeftMatchCharAction} * |G| {@link com.maddyhome.idea.vim.action.motion.updown.MotionGotoLineLastAction} * |H| {@link com.maddyhome.idea.vim.action.motion.screen.MotionFirstScreenLineAction} * |I| {@link com.maddyhome.idea.vim.action.change.insert.InsertBeforeFirstNonBlankAction} * |J| {@link com.maddyhome.idea.vim.action.change.delete.DeleteJoinLinesSpacesAction} * |K| {@link com.maddyhome.idea.vim.action.editor.VimQuickJavaDoc} * |L| {@link com.maddyhome.idea.vim.action.motion.screen.MotionLastScreenLineAction} * |M| {@link com.maddyhome.idea.vim.action.motion.screen.MotionMiddleScreenLineAction} * |N| {@link com.maddyhome.idea.vim.action.motion.search.SearchAgainPreviousAction} * |O| {@link com.maddyhome.idea.vim.action.change.insert.InsertNewLineAboveAction} * |P| {@link com.maddyhome.idea.vim.action.copy.PutTextBeforeCursorAction} * |Q| TO BE IMPLEMENTED * |R| {@link com.maddyhome.idea.vim.action.change.change.ChangeReplaceAction} * |S| {@link com.maddyhome.idea.vim.action.change.change.ChangeLineAction} * |T| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionLeftTillMatchCharAction} * |U| ? * |V| {@link com.maddyhome.idea.vim.action.motion.visual.VisualToggleLineModeAction} * |W| {@link com.maddyhome.idea.vim.action.motion.text.MotionBigWordRightAction} * |X| {@link com.maddyhome.idea.vim.action.change.delete.DeleteCharacterLeftAction} * |Y| {@link com.maddyhome.idea.vim.action.copy.YankLineAction} * |ZZ| {@link com.maddyhome.idea.vim.action.file.FileSaveCloseAction} * |ZQ| {@link com.maddyhome.idea.vim.action.file.FileSaveCloseAction} * |[| see bracket commands * |]| see bracket commands * |^| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionFirstNonSpaceAction} * |_| {@link com.maddyhome.idea.vim.action.motion.updown.MotionDownLess1FirstNonSpaceAction} * |`| {@link com.maddyhome.idea.vim.action.motion.mark.MotionGotoMarkAction} * |``| ? * ... * |0| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionFirstColumnAction} * |a| {@link com.maddyhome.idea.vim.action.change.insert.InsertAfterCursorAction} * |b| {@link com.maddyhome.idea.vim.action.motion.text.MotionWordLeftAction} * |c| {@link com.maddyhome.idea.vim.action.change.change.ChangeMotionAction} * |cc| translated to c_ * |d| {@link com.maddyhome.idea.vim.action.change.delete.DeleteMotionAction} * |dd| translated to d_ * |do| TO BE IMPLEMENTED * |dp| TO BE IMPLEMENTED * |e| {@link com.maddyhome.idea.vim.action.motion.text.MotionWordEndRightAction} * |f| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionRightMatchCharAction} * |g| see commands starting with 'g' * |h| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionLeftAction} * |i| {@link com.maddyhome.idea.vim.action.change.insert.InsertBeforeCursorAction} * |j| {@link com.maddyhome.idea.vim.action.motion.updown.MotionDownAction} * |k| {@link com.maddyhome.idea.vim.action.motion.updown.MotionUpAction} * |l| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionRightAction} * |m| {@link com.maddyhome.idea.vim.action.motion.mark.MotionMarkAction} * |n| {@link com.maddyhome.idea.vim.action.motion.search.SearchAgainNextAction} * |o| {@link com.maddyhome.idea.vim.action.change.insert.InsertNewLineBelowAction} * |p| {@link com.maddyhome.idea.vim.action.copy.PutTextAfterCursorAction} * |q| {@link com.maddyhome.idea.vim.action.macro.ToggleRecordingAction} * |r| {@link com.maddyhome.idea.vim.action.change.change.ChangeCharacterAction} * |s| {@link com.maddyhome.idea.vim.action.change.change.ChangeCharactersAction} * |t| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionRightTillMatchCharAction} * |u| {@link com.maddyhome.idea.vim.action.change.UndoAction} * |v| {@link com.maddyhome.idea.vim.action.motion.visual.VisualToggleCharacterModeAction} * |w| {@link com.maddyhome.idea.vim.action.motion.text.MotionWordRightAction} * |x| {@link com.maddyhome.idea.vim.action.change.delete.DeleteCharacterRightAction} * |y| {@link com.maddyhome.idea.vim.action.copy.YankMotionAction} * |yy| translated to y_ * |z| see commands starting with 'z' * |{| {@link com.maddyhome.idea.vim.action.motion.text.MotionParagraphPreviousAction} * |bar| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionColumnAction} * |}| {@link com.maddyhome.idea.vim.action.motion.text.MotionParagraphNextAction} * |~| {@link com.maddyhome.idea.vim.action.change.change.ChangeCaseToggleCharacterAction} * |<C-End>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionGotoLineLastEndAction} * |<C-Home>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionGotoLineFirstAction} * |<C-Left>| {@link com.maddyhome.idea.vim.action.motion.text.MotionWordLeftAction} * |<C-Right>| {@link com.maddyhome.idea.vim.action.motion.text.MotionWordRightAction} * |<C-Down>| {@link com.maddyhome.idea.vim.action.motion.scroll.CtrlDownAction} * |<C-Up>| {@link com.maddyhome.idea.vim.action.motion.scroll.CtrlUpAction} * |<Del>| {@link com.maddyhome.idea.vim.action.change.delete.DeleteCharacterAction} * |<Down>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionArrowDownAction} * |<End>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionEndAction} * |<F1>| IntelliJ help * |<Home>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionHomeAction} * |<Insert>| {@link com.maddyhome.idea.vim.action.change.insert.InsertBeforeCursorAction} * |<Left>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionArrowLeftAction} * |<PageDown>| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollPageDownAction} * |<PageUp>| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollPageUpAction} * |<Right>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionArrowRightAction} * |<S-Down>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionShiftDownAction} * |<S-Left>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionShiftLeftAction} * |<S-Right>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionShiftRightAction} * |<S-Up>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionShiftUpAction} * |<S-Home>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionShiftHomeAction} * |<S-End>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionShiftEndAction} * |<Up>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionArrowUpAction} * * * 2.1. Text objects * * Text object commands are listed in the visual mode section. * * * 2.2. Window commands * * tag action * ------------------------------------------------------------------------------------------------------------------- * * |CTRL-W_+| TO BE IMPLEMENTED * |CTRL-W_-| TO BE IMPLEMENTED * |CTRL-W_<| TO BE IMPLEMENTED * |CTRL-W_=| TO BE IMPLEMENTED * |CTRL-W_>| TO BE IMPLEMENTED * |CTRL-W_H| TO BE IMPLEMENTED * |CTRL-W_J| TO BE IMPLEMENTED * |CTRL-W_K| TO BE IMPLEMENTED * |CTRL-W_L| TO BE IMPLEMENTED * |CTRL-W_P| TO BE IMPLEMENTED * |CTRL-W_R| TO BE IMPLEMENTED * |CTRL-W_S| {@link com.maddyhome.idea.vim.action.window.HorizontalSplitAction} * |CTRL-W_T| TO BE IMPLEMENTED * |CTRL-W_W| {@link com.maddyhome.idea.vim.action.window.WindowPrevAction} * |CTRL-W_]| TO BE IMPLEMENTED * |CTRL-W_^| TO BE IMPLEMENTED * |CTRL-W__| TO BE IMPLEMENTED * |CTRL-W_b| TO BE IMPLEMENTED * |CTRL-W_c| {@link com.maddyhome.idea.vim.action.window.CloseWindowAction} * |CTRL-W_d| TO BE IMPLEMENTED * |CTRL-W_f| TO BE IMPLEMENTED * |CTRL-W-F| TO BE IMPLEMENTED * |CTRL-W-g]| TO BE IMPLEMENTED * |CTRL-W-g}| TO BE IMPLEMENTED * |CTRL-W-gf| TO BE IMPLEMENTED * |CTRL-W-gF| TO BE IMPLEMENTED * |CTRL-W_h| {@link com.maddyhome.idea.vim.action.window.WindowLeftAction} * |CTRL-W_i| TO BE IMPLEMENTED * |CTRL-W_j| {@link com.maddyhome.idea.vim.action.window.WindowDownAction} * |CTRL-W_k| {@link com.maddyhome.idea.vim.action.window.WindowUpAction} * |CTRL-W_l| {@link com.maddyhome.idea.vim.action.window.WindowRightAction} * |CTRL-W_n| TO BE IMPLEMENTED * |CTRL-W_o| {@link com.maddyhome.idea.vim.action.window.WindowOnlyAction} * |CTRL-W_p| TO BE IMPLEMENTED * |CTRL-W_q| TO BE IMPLEMENTED * |CTRL-W_r| TO BE IMPLEMENTED * |CTRL-W_s| {@link com.maddyhome.idea.vim.action.window.HorizontalSplitAction} * |CTRL-W_t| TO BE IMPLEMENTED * |CTRL-W_v| {@link com.maddyhome.idea.vim.action.window.VerticalSplitAction} * |CTRL-W_w| {@link com.maddyhome.idea.vim.action.window.WindowNextAction} * |CTRL-W_x| TO BE IMPLEMENTED * |CTRL-W_z| TO BE IMPLEMENTED * |CTRL-W_bar| TO BE IMPLEMENTED * |CTRL-W_}| TO BE IMPLEMENTED * |CTRL-W_<Down>| {@link com.maddyhome.idea.vim.action.window.WindowDownAction} * |CTRL-W_<Up>| {@link com.maddyhome.idea.vim.action.window.WindowUpAction} * |CTRL-W_<Left>| {@link com.maddyhome.idea.vim.action.window.WindowLeftAction} * |CTRL-W_<Right>| {@link com.maddyhome.idea.vim.action.window.WindowRightAction} * |CTRL-W_CTRL-H| {@link com.maddyhome.idea.vim.action.window.WindowLeftAction} * |CTRL-W_CTRL-J| {@link com.maddyhome.idea.vim.action.window.WindowDownAction} * |CTRL-W_CTRL-K| {@link com.maddyhome.idea.vim.action.window.WindowUpAction} * |CTRL-W_CTRL-L| {@link com.maddyhome.idea.vim.action.window.WindowRightAction} * * * 2.3. Square bracket commands * * tag action * ------------------------------------------------------------------------------------------------------------------- * |[_CTRL-D| TO BE IMPLEMENTED * |[_CTRL-I| TO BE IMPLEMENTED * |[#| TO BE IMPLEMENTED * |['| TO BE IMPLEMENTED * |[(| {@link com.maddyhome.idea.vim.action.motion.text.MotionUnmatchedParenOpenAction} * |[star| TO BE IMPLEMENTED * |[`| TO BE IMPLEMENTED * |[/| TO BE IMPLEMENTED * |[D| TO BE IMPLEMENTED * |[I| TO BE IMPLEMENTED * |[M| {@link com.maddyhome.idea.vim.action.motion.text.MotionMethodPreviousEndAction} * |[P| {@link com.maddyhome.idea.vim.action.copy.PutVisualTextNoIndentAction} * |[P| {@link com.maddyhome.idea.vim.action.copy.PutTextBeforeCursorNoIndentAction} * |[[| {@link com.maddyhome.idea.vim.action.motion.text.MotionSectionBackwardStartAction} * |[]| {@link com.maddyhome.idea.vim.action.motion.text.MotionSectionBackwardEndAction} * |[c| TO BE IMPLEMENTED * |[d| TO BE IMPLEMENTED * |[f| TO BE IMPLEMENTED * |[i| TO BE IMPLEMENTED * |[m| {@link com.maddyhome.idea.vim.action.motion.text.MotionMethodPreviousStartAction} * |[p| {@link com.maddyhome.idea.vim.action.copy.PutVisualTextNoIndentAction} * |[p| {@link com.maddyhome.idea.vim.action.copy.PutTextAfterCursorNoIndentAction} * |[s| TO BE IMPLEMENTED * |[z| TO BE IMPLEMENTED * |[{| {@link com.maddyhome.idea.vim.action.motion.text.MotionUnmatchedBraceOpenAction} * |]_CTRL-D| TO BE IMPLEMENTED * |]_CTRL-I| TO BE IMPLEMENTED * |]#| TO BE IMPLEMENTED * |]'| TO BE IMPLEMENTED * |])| {@link com.maddyhome.idea.vim.action.motion.text.MotionUnmatchedParenCloseAction} * |]star| TO BE IMPLEMENTED * |]`| TO BE IMPLEMENTED * |]/| TO BE IMPLEMENTED * |]D| TO BE IMPLEMENTED * |]I| TO BE IMPLEMENTED * |]M| {@link com.maddyhome.idea.vim.action.motion.text.MotionMethodNextEndAction} * |]P| {@link com.maddyhome.idea.vim.action.copy.PutVisualTextNoIndentAction} * |]P| {@link com.maddyhome.idea.vim.action.copy.PutTextBeforeCursorNoIndentAction} * |][| {@link com.maddyhome.idea.vim.action.motion.text.MotionSectionForwardStartAction} * |]]| {@link com.maddyhome.idea.vim.action.motion.text.MotionSectionForwardEndAction} * |]c| TO BE IMPLEMENTED * |]d| TO BE IMPLEMENTED * |]f| TO BE IMPLEMENTED * |]i| TO BE IMPLEMENTED * |]m| {@link com.maddyhome.idea.vim.action.motion.text.MotionMethodNextStartAction} * |]p| {@link com.maddyhome.idea.vim.action.copy.PutVisualTextNoIndentAction} * |]p| {@link com.maddyhome.idea.vim.action.copy.PutTextAfterCursorNoIndentAction} * |]s| TO BE IMPLEMENTED * |]z| TO BE IMPLEMENTED * |]}| {@link com.maddyhome.idea.vim.action.motion.text.MotionUnmatchedBraceCloseAction} * * * 2.4. Commands starting with 'g' * * tag action * ------------------------------------------------------------------------------------------------------------------- * * |g_CTRL-A| not applicable * |g_CTRL-G| {@link com.maddyhome.idea.vim.action.file.FileGetLocationInfoAction} * |g_CTRL-H| {@link com.maddyhome.idea.vim.action.motion.select.SelectEnableBlockModeAction} * |g_CTRL-]| TO BE IMPLEMENTED * |g#| {@link com.maddyhome.idea.vim.action.motion.search.SearchWordBackwardAction} * |g$| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionLastScreenColumnAction} * |g&| {@link com.maddyhome.idea.vim.action.change.change.ChangeLastGlobalSearchReplaceAction} * |v_g'| {@link com.maddyhome.idea.vim.action.motion.mark.MotionGotoFileMarkLineNoSaveJumpAction} * |g'| {@link com.maddyhome.idea.vim.action.motion.mark.MotionGotoMarkLineNoSaveJumpAction} * |g`| {@link com.maddyhome.idea.vim.action.motion.mark.MotionGotoMarkNoSaveJumpAction} * |gstar| {@link com.maddyhome.idea.vim.action.motion.search.SearchWordForwardAction} * |g+| TO BE IMPLEMENTED * |g,| TO BE IMPLEMENTED * |g-| TO BE IMPLEMENTED * |g0| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionFirstScreenColumnAction} * |g8| {@link com.maddyhome.idea.vim.action.file.FileGetHexAction} * |g;| TO BE IMPLEMENTED * |g<| TO BE IMPLEMENTED * |g?| TO BE IMPLEMENTED * |g?g?| TO BE IMPLEMENTED * |gD| {@link com.maddyhome.idea.vim.action.motion.search.GotoDeclarationAction} * |gE| {@link com.maddyhome.idea.vim.action.motion.text.MotionBigWordEndLeftAction} * |gF| TO BE IMPLEMENTED * |gH| {@link com.maddyhome.idea.vim.action.motion.select.SelectEnableLineModeAction} * |gI| {@link com.maddyhome.idea.vim.action.change.insert.InsertLineStartAction} * |gJ| {@link com.maddyhome.idea.vim.action.change.delete.DeleteJoinLinesAction} * |gN| {@link com.maddyhome.idea.vim.action.motion.gn.VisualSelectPreviousSearch} * |gN| {@link com.maddyhome.idea.vim.action.motion.gn.GnPreviousTextObject} * |gP| {@link com.maddyhome.idea.vim.action.copy.PutTextBeforeCursorActionMoveCursor} * |gQ| TO BE IMPLEMENTED * |gR| TO BE IMPLEMENTED * |gT| {@link com.maddyhome.idea.vim.action.motion.tabs.MotionPreviousTabAction} * |gU| {@link com.maddyhome.idea.vim.action.change.change.ChangeCaseUpperMotionAction} * |gV| TO BE IMPLEMENTED * |g]| TO BE IMPLEMENTED * |g^| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionFirstScreenNonSpaceAction} * |g_| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionLastNonSpaceAction} * |ga| {@link com.maddyhome.idea.vim.action.file.FileGetAsciiAction} * |gd| {@link com.maddyhome.idea.vim.action.motion.search.GotoDeclarationAction} * |ge| {@link com.maddyhome.idea.vim.action.motion.text.MotionWordEndLeftAction} * |gf| TO BE IMPLEMENTED * |gg| {@link com.maddyhome.idea.vim.action.motion.updown.MotionGotoLineFirstAction} * |gh| {@link com.maddyhome.idea.vim.action.motion.select.SelectEnableCharacterModeAction} * |gi| {@link com.maddyhome.idea.vim.action.change.insert.InsertAtPreviousInsertAction} * |gj| TO BE IMPLEMENTED * |gk| {@link com.maddyhome.idea.vim.action.motion.updown.MotionUpNotLineWiseAction} * |gn| {@link com.maddyhome.idea.vim.action.motion.gn.VisualSelectNextSearch} * |gn| {@link com.maddyhome.idea.vim.action.motion.gn.GnNextTextObject} * |gm| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionMiddleColumnAction} * |go| {@link com.maddyhome.idea.vim.action.motion.text.MotionNthCharacterAction} * |gp| {@link com.maddyhome.idea.vim.action.copy.PutVisualTextMoveCursorAction} * |gp| {@link com.maddyhome.idea.vim.action.copy.PutTextAfterCursorActionMoveCursor} * |gq| {@link com.maddyhome.idea.vim.action.change.change.ReformatCodeMotionAction} * |gr| TO BE IMPLEMENTED * |gs| TO BE IMPLEMENTED * |gt| {@link com.maddyhome.idea.vim.action.motion.tabs.MotionNextTabAction} * |gu| {@link com.maddyhome.idea.vim.action.change.change.ChangeCaseLowerMotionAction} * |gv| {@link com.maddyhome.idea.vim.action.motion.visual.VisualSelectPreviousAction} * |gw| TO BE IMPLEMENTED * |g@| {@link com.maddyhome.idea.vim.action.change.OperatorAction} * |g~| {@link com.maddyhome.idea.vim.action.change.change.ChangeCaseToggleMotionAction} * |g<Down>| TO BE IMPLEMENTED * |g<End>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionLastScreenColumnAction} * |g<Home>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionFirstScreenColumnAction} * |g<Up>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionUpNotLineWiseAction} * * * 2.5. Commands starting with 'z' * * tag action * ------------------------------------------------------------------------------------------------------------------- * |z<CR>| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollFirstScreenLineStartAction} * |z+| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollFirstScreenLinePageStartAction} * |z-| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollLastScreenLineStartAction} * |z.| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollMiddleScreenLineStartAction} * |z=| TO BE IMPLEMENTED * |zA| TO BE IMPLEMENTED * |zC| {@link com.maddyhome.idea.vim.action.fold.VimCollapseRegionRecursively} * |zD| TO BE IMPLEMENTED * |zE| TO BE IMPLEMENTED * |zF| TO BE IMPLEMENTED * |zG| TO BE IMPLEMENTED * |zH| TO BE IMPLEMENTED * |zL| TO BE IMPLEMENTED * |zM| {@link com.maddyhome.idea.vim.action.fold.VimCollapseAllRegions} * |zN| TO BE IMPLEMENTED * |zO| {@link com.maddyhome.idea.vim.action.fold.VimExpandRegionRecursively} * |zR| {@link com.maddyhome.idea.vim.action.fold.VimExpandAllRegions} * |zW| TO BE IMPLEMENTED * |zX| TO BE IMPLEMENTED * |z^| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollLastScreenLinePageStartAction} * |za| TO BE IMPLEMENTED * |zb| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollLastScreenLineAction} * |zc| {@link com.maddyhome.idea.vim.action.fold.VimCollapseRegion} * |zd| not applicable * |ze| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollLastScreenColumnAction} * |zf| not applicable * |zg| TO BE IMPLEMENTED * |zh| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollColumnRightAction} * |zi| TO BE IMPLEMENTED * |zj| TO BE IMPLEMENTED * |zk| TO BE IMPLEMENTED * |zl| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollColumnLeftAction} * |zm| TO BE IMPLEMENTED * |zn| TO BE IMPLEMENTED * |zo| {@link com.maddyhome.idea.vim.action.fold.VimExpandRegion} * |zr| TO BE IMPLEMENTED * |zs| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollFirstScreenColumnAction} * |zt| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollFirstScreenLineAction} * |zv| TO BE IMPLEMENTED * |zw| TO BE IMPLEMENTED * |zx| TO BE IMPLEMENTED * |zz| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollMiddleScreenLineAction} * |z<Left>| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollColumnRightAction} * |z<Right>| {@link com.maddyhome.idea.vim.action.motion.scroll.MotionScrollColumnLeftAction} * * * 3. Visual mode * * tag action * ------------------------------------------------------------------------------------------------------------------- * * |v_CTRL-\_CTRL-N| {@link com.maddyhome.idea.vim.action.motion.visual.VisualExitModeAction} * |v_CTRL-\_CTRL-G| TO BE IMPLEMENTED * |v_CTRL-A| {@link com.maddyhome.idea.vim.action.change.change.number.ChangeVisualNumberIncAction} * |v_CTRL-C| {@link com.maddyhome.idea.vim.action.motion.visual.VisualExitModeAction} * |v_CTRL-G| {@link com.maddyhome.idea.vim.action.motion.select.SelectToggleVisualMode} * |v_<BS>| NVO mapping * |v_CTRL-H| NVO mapping * |v_CTRL-O| TO BE IMPLEMENTED * |v_CTRL-V| NVO mapping * |v_<Esc>| {@link com.maddyhome.idea.vim.action.motion.visual.VisualExitModeAction} * |v_CTRL-X| {@link com.maddyhome.idea.vim.action.change.change.number.ChangeVisualNumberDecAction} * |v_CTRL-]| TO BE IMPLEMENTED * |v_!| {@link com.maddyhome.idea.vim.action.change.change.FilterVisualLinesAction} * |v_:| NVO mapping * |v_<| {@link com.maddyhome.idea.vim.action.change.shift.ShiftLeftVisualAction} * |v_=| {@link com.maddyhome.idea.vim.action.change.change.AutoIndentLinesVisualAction} * |v_>| {@link com.maddyhome.idea.vim.action.change.shift.ShiftRightVisualAction} * |v_b_A| {@link com.maddyhome.idea.vim.action.change.insert.VisualBlockAppendAction} * |v_C| {@link com.maddyhome.idea.vim.action.change.change.ChangeVisualLinesEndAction} * |v_D| {@link com.maddyhome.idea.vim.action.change.delete.DeleteVisualLinesEndAction} * |v_b_I| {@link com.maddyhome.idea.vim.action.change.insert.VisualBlockInsertAction} * |v_J| {@link com.maddyhome.idea.vim.action.change.delete.DeleteJoinVisualLinesSpacesAction} * |v_K| TO BE IMPLEMENTED * |v_O| {@link com.maddyhome.idea.vim.action.motion.visual.VisualSwapEndsBlockAction} * |v_P| {@link com.maddyhome.idea.vim.action.copy.PutVisualTextAction} * |v_R| {@link com.maddyhome.idea.vim.action.change.change.ChangeVisualLinesAction} * |v_S| {@link com.maddyhome.idea.vim.action.change.change.ChangeVisualLinesAction} * |v_U| {@link com.maddyhome.idea.vim.action.change.change.ChangeCaseUpperVisualAction} * |v_V| NV mapping * |v_X| {@link com.maddyhome.idea.vim.action.change.delete.DeleteVisualLinesAction} * |v_Y| {@link com.maddyhome.idea.vim.action.copy.YankVisualLinesAction} * |v_aquote| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockDoubleQuoteAction} * |v_a'| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockSingleQuoteAction} * |v_a(| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockParenAction} * |v_a)| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockParenAction} * |v_a<| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockAngleAction} * |v_a>| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockAngleAction} * |v_aB| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockBraceAction} * |v_aW| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBigWordAction} * |v_a[| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockBracketAction} * |v_a]| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockBracketAction} * |v_a`| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockBackQuoteAction} * |v_ab| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockParenAction} * |v_ap| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterParagraphAction} * |v_as| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterSentenceAction} * |v_at| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockTagAction} * |v_aw| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterWordAction} * |v_a{| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockBraceAction} * |v_a}| {@link com.maddyhome.idea.vim.action.motion.object.MotionOuterBlockBraceAction} * |v_c| {@link com.maddyhome.idea.vim.action.change.change.ChangeVisualAction} * |v_d| {@link com.maddyhome.idea.vim.action.change.delete.DeleteVisualAction} * |v_gCTRL-A| {@link com.maddyhome.idea.vim.action.change.change.number.ChangeVisualNumberAvalancheIncAction} * |v_gCTRL-X| {@link com.maddyhome.idea.vim.action.change.change.number.ChangeVisualNumberAvalancheDecAction} * |v_gJ| {@link com.maddyhome.idea.vim.action.change.delete.DeleteJoinVisualLinesAction} * |v_gq| {@link com.maddyhome.idea.vim.action.change.change.ReformatCodeVisualAction} * |v_gv| {@link com.maddyhome.idea.vim.action.motion.visual.VisualSwapSelectionsAction} * |v_g`| {@link com.maddyhome.idea.vim.action.motion.mark.MotionGotoFileMarkNoSaveJumpAction} * |v_iquote| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockDoubleQuoteAction} * |v_i'| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockSingleQuoteAction} * |v_i(| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockParenAction} * |v_i)| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockParenAction} * |v_i<| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockAngleAction} * |v_i>| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockAngleAction} * |v_iB| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockBraceAction} * |v_iW| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBigWordAction} * |v_i[| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockBracketAction} * |v_i]| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockBracketAction} * |v_i`| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockBackQuoteAction} * |v_ib| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockParenAction} * |v_ip| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerParagraphAction} * |v_is| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerSentenceAction} * |v_it| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockTagAction} * |v_iw| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerWordAction} * |v_i{| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockBraceAction} * |v_i}| {@link com.maddyhome.idea.vim.action.motion.object.MotionInnerBlockBraceAction} * |v_o| {@link com.maddyhome.idea.vim.action.motion.visual.VisualSwapEndsAction} * |v_p| {@link com.maddyhome.idea.vim.action.copy.PutVisualTextAction} * |v_r| {@link com.maddyhome.idea.vim.action.change.change.ChangeVisualCharacterAction} * |v_s| {@link com.maddyhome.idea.vim.action.change.change.ChangeVisualAction} * |v_u| {@link com.maddyhome.idea.vim.action.change.change.ChangeCaseLowerVisualAction} * |v_v| NV mapping * |v_x| {@link com.maddyhome.idea.vim.action.change.delete.DeleteVisualAction} * |v_y| {@link com.maddyhome.idea.vim.action.copy.YankVisualAction} * |v_~| {@link com.maddyhome.idea.vim.action.change.change.ChangeCaseToggleVisualAction} * |v_`| {@link com.maddyhome.idea.vim.action.motion.mark.MotionGotoFileMarkAction} * |v_'| {@link com.maddyhome.idea.vim.action.motion.mark.MotionGotoFileMarkLineAction} * * * 4. Select mode * * tag action * ------------------------------------------------------------------------------------------------------------------- * |<BS>| {@link com.maddyhome.idea.vim.action.motion.select.SelectDeleteAction} * |<CR>| {@link com.maddyhome.idea.vim.action.motion.select.SelectEnterAction} * |<DEL>| {@link com.maddyhome.idea.vim.action.motion.select.SelectDeleteAction} * |<ESC>| {@link com.maddyhome.idea.vim.action.motion.select.SelectEscapeAction} * |<C-G>| {@link com.maddyhome.idea.vim.action.motion.select.SelectToggleVisualMode} * |<S-Down>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionShiftDownAction} * |<S-Left>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionShiftLeftAction} * |<S-Right>| {@link com.maddyhome.idea.vim.action.motion.leftright.MotionShiftRightAction} * |<S-Up>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionShiftUpAction} * |<Down>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionArrowDownAction} * |<Left>| {@link com.maddyhome.idea.vim.action.motion.select.motion.SelectMotionLeftAction} * |<Right>| {@link com.maddyhome.idea.vim.action.motion.select.motion.SelectMotionRightAction} * |<Up>| {@link com.maddyhome.idea.vim.action.motion.updown.MotionArrowUpAction} * * 5. Command line editing * * tag action * ------------------------------------------------------------------------------------------------------------------- * * |c_CTRL-A| TO BE IMPLEMENTED * |c_CTRL-B| {@link javax.swing.text.DefaultEditorKit#beginLineAction} * |c_CTRL-C| {@link com.maddyhome.idea.vim.ui.ExEditorKit.CancelEntryAction} * |c_CTRL-D| TO BE IMPLEMENTED * |c_CTRL-E| {@link javax.swing.text.DefaultEditorKit#endLineAction} * |c_CTRL-G| TO BE IMPLEMENTED * |c_CTRL-H| {@link com.maddyhome.idea.vim.ui.ExEditorKit.DeletePreviousCharAction} * |c_CTRL-I| TO BE IMPLEMENTED * |c_CTRL-J| {@link com.maddyhome.idea.vim.ui.ExEditorKit.CompleteEntryAction} * |c_CTRL-K| {@link com.maddyhome.idea.vim.ui.ExEditorKit.StartDigraphAction} * |c_CTRL-L| TO BE IMPLEMENTED * |c_CTRL-M| {@link com.maddyhome.idea.vim.action.ex.ProcessExEntryAction} * |c_CTRL-N| TO BE IMPLEMENTED * |c_CTRL-P| TO BE IMPLEMENTED * |c_CTRL-Q| {@link com.maddyhome.idea.vim.ui.ExEditorKit.StartDigraphAction} * |c_CTRL-R| {@link com.maddyhome.idea.vim.ui.ExEditorKit.InsertRegisterAction} * |c_CTRL-R_CTRL-A| TO BE IMPLEMENTED * |c_CTRL-R_CTRL-F| TO BE IMPLEMENTED * |c_CTRL-R_CTRL-L| TO BE IMPLEMENTED * |c_CTRL-R_CTRL-O| TO BE IMPLEMENTED * |c_CTRL-R_CTRL-P| TO BE IMPLEMENTED * |c_CTRL-R_CTRL-R| TO BE IMPLEMENTED * |c_CTRL-R_CTRL-W| TO BE IMPLEMENTED * |c_CTRL-T| TO BE IMPLEMENTED * |c_CTRL-U| {@link com.maddyhome.idea.vim.ui.ExEditorKit.DeleteToCursorAction} * |c_CTRL-V| {@link com.maddyhome.idea.vim.ui.ExEditorKit.StartDigraphAction} * |c_CTRL-W| {@link com.maddyhome.idea.vim.ui.ExEditorKit.DeletePreviousWordAction} * |c_CTRL-Y| TO BE IMPLEMENTED * |c_CTRL-\_e| TO BE IMPLEMENTED * |c_CTRL-\_CTRL-G| TO BE IMPLEMENTED * |c_CTRL-\_CTRL-N| TO BE IMPLEMENTED * |c_CTRL-_| not applicable * |c_CTRL-^| not applicable * |c_CTRL-]| TO BE IMPLEMENTED * |c_CTRL-[| {@link com.maddyhome.idea.vim.ui.ExEditorKit.EscapeCharAction} * |c_<BS>| {@link com.maddyhome.idea.vim.ui.ExEditorKit.DeletePreviousCharAction} * |c_<CR>| {@link com.maddyhome.idea.vim.ui.ExEditorKit.CompleteEntryAction} * |c_<C-Left>| {@link javax.swing.text.DefaultEditorKit#previousWordAction} * |c_<C-Right>| {@link javax.swing.text.DefaultEditorKit#nextWordAction} * |c_<Del>| {@link javax.swing.text.DefaultEditorKit#deleteNextCharAction} * |c_<Down>| {@link com.maddyhome.idea.vim.ui.ExEditorKit.HistoryDownFilterAction} * |c_<End>| {@link javax.swing.text.DefaultEditorKit#endLineAction} * |c_<Esc>| {@link com.maddyhome.idea.vim.ui.ExEditorKit.EscapeCharAction} * |c_<Home>| {@link javax.swing.text.DefaultEditorKit#beginLineAction} * |c_<Insert>| {@link com.maddyhome.idea.vim.ui.ExEditorKit.ToggleInsertReplaceAction} * |c_<Left>| {@link javax.swing.text.DefaultEditorKit#backwardAction} * |c_<LeftMouse>| not applicable * |c_<MiddleMouse>| TO BE IMPLEMENTED * |c_<NL>| {@link com.maddyhome.idea.vim.ui.ExEditorKit.CompleteEntryAction} * |c_<PageUp>| {@link com.maddyhome.idea.vim.ui.ExEditorKit.HistoryUpAction} * |c_<PageDown>| {@link com.maddyhome.idea.vim.ui.ExEditorKit.HistoryDownAction} * |c_<Right>| {@link javax.swing.text.DefaultEditorKit#forwardAction} * |c_<S-Down>| {@link com.maddyhome.idea.vim.ui.ExEditorKit.HistoryDownAction} * |c_<S-Left>| {@link javax.swing.text.DefaultEditorKit#previousWordAction} * |c_<S-Right>| {@link javax.swing.text.DefaultEditorKit#nextWordAction} * |c_<S-Tab>| TO BE IMPLEMENTED * |c_<S-Up>| {@link com.maddyhome.idea.vim.ui.ExEditorKit.HistoryUpAction} * |c_<Tab>| TO BE IMPLEMENTED * |c_<Up>| {@link com.maddyhome.idea.vim.ui.ExEditorKit.HistoryUpFilterAction} * |c_digraph| {char1} <BS> {char2} {@link com.maddyhome.idea.vim.ui.ExEditorKit.StartDigraphAction} * |c_wildchar| TO BE IMPLEMENTED * |'cedit'| TO BE IMPLEMENTED * * * 6. Ex commands * * tag handler * ------------------------------------------------------------------------------------------------------------------- * * |:map| {@link com.maddyhome.idea.vim.ex.handler.MapHandler} * |:nmap| ... * |:vmap| ... * |:omap| ... * |:imap| ... * |:cmap| ... * |:noremap| ... * |:nnoremap| ... * |:vnoremap| ... * |:onoremap| ... * |:inoremap| ... * |:cnoremap| ... * |:shell| {@link com.maddyhome.idea.vim.ex.handler.ShellHandler} * |:sort| {@link com.maddyhome.idea.vim.ex.handler.SortHandler} * |:source| {@link com.maddyhome.idea.vim.ex.handler.SourceHandler} * |:qall| {@link com.maddyhome.idea.vim.ex.handler.ExitHandler} * |:quitall| {@link com.maddyhome.idea.vim.ex.handler.ExitHandler} * |:quitall| {@link com.maddyhome.idea.vim.ex.handler.ExitHandler} * |:wqall| {@link com.maddyhome.idea.vim.ex.handler.ExitHandler} * |:xall| {@link com.maddyhome.idea.vim.ex.handler.ExitHandler} * |:command| {@link com.maddyhome.idea.vim.ex.handler.CmdHandler} * |:delcommand| {@link com.maddyhome.idea.vim.ex.handler.DelCmdHandler} * |:comclear| {@link com.maddyhome.idea.vim.ex.handler.CmdClearHandler} * ... * * The list of supported Ex commands is incomplete. * * * A. Misc commands * * tag handler * ------------------------------------------------------------------------------------------------------------------- * |]b| {@link com.maddyhome.idea.vim.action.motion.text.MotionCamelEndLeftAction} * |]w| {@link com.maddyhome.idea.vim.action.motion.text.MotionCamelEndRightAction} * |[b| {@link com.maddyhome.idea.vim.action.motion.text.MotionCamelLeftAction} * |[w| {@link com.maddyhome.idea.vim.action.motion.text.MotionCamelRightAction} * |g(| {@link com.maddyhome.idea.vim.action.motion.text.MotionSentencePreviousEndAction} * |g)| {@link com.maddyhome.idea.vim.action.motion.text.MotionSentenceNextEndAction} * * * See also :help index. * * @author vlan */ package com.maddyhome.idea.vim;
파일
- ~/.ideavimrc
ideavim용 rc 파일이다.
~/.ideavimrc 파일에서 ~/.vimrc 파일을 다음과 같이 읽을 수 있다.
source ~/.vimrc
ideavim은 간단한 패턴 매칭을 통해 ~/.ideavimrc 파일을 분석한다. VimL 파일의 분석은 VIM-669를 보라.
user.home JVM 옵션을 덮어쓰면 ideavim이 .ideavimrc 파일을 찾는데 영향을 줄 것이다.
예를 들어, -Duser.home=/my/alternate/home인 경우 ideavim은 ~/.ideavimrc 대신 /my/alternate/home/.ideavimrc를 찾을 것이다.
대안으로, XDG를 사용해 초기 명령어를 설정할 수 있다. $XDG_CONFIG_HOME$/ideavim/ideavimrc 파일에 설정정보를 추가하자.
Emulated Vim Plugins
ideavim extension은 오리지널 vim plugin의 일부를 흉내낸다.
ideavim extension을 사용하기 위해서는 ~/.ideavimrc 파일에 다음 명령어를 통해 활성화해야 한다.
set <extension-name>
사용 가능한 extension:
- easymotion
IdeaVim-EasyMotion와 AceJump plugin을 설치한다.
set easymotion 명령어를 추가한다.
vim-easymotion을 흉내낸다.
모든 명령어를 지원한다.
지원되는 명령어 목록은 vim-easymotion에서 확인하자.
- surround
set surround 명령어를 추가한다.
vim-surround가 원조이다.
ys, cs, ds, S 명령어를 지원한다.
- multiple-cursors
set multiple-cursors 명령어를 추가한다.
vim-multiple-cursors가 원조이다.
<A-n>, <A-x>, <A-p>, g<A-n> 명령어를 지원한다.
- commentary
set commentary 명령어를 추가한다.
commentary.vim가 원조이다.
gcc, gc + motion, v_gc 명령어를 지원한다.
IDE에서 변경
- Undo/Redo
Intellij 플랫폼에서 ideavim plugin은 undo/redo 기능을 지원한다.
u와 <C-R> 명령어는 원조 vim과 다르다. undo/redo에 대한 vim 호환성은 향후 릴리즈에서 개선된다.
- Escape
다이얼로그 창에서 <Esc> 사용은 여러운 문제가 남아있다. 최신의 다이얼로그 창에 대해 vim emulator는 <Esc>가 작동하지 않고, insert mode로 만든다. 대신 <C-c> 또는 <C-[> 명령어를 사용해야 한다. 일부 다이얼로그 창에서 normal mode는 기본으로 변환된다. 다이얼로그 창에서 vim emulator 사용은 개선할 부분이다.
IDE 액션 실행
ideavim은 2개의 명령어를 추가했다. 이는 Ex 명령어 또는 :map 명령어로 임의의 IDE 액션을 나열하고 실행한다.
- :actionlist [pattern]
이름 또는 keymap 패턴으로 IDE 액션을 찾는다.(예, :actionlist extract, :actionlist <C-D>)
- :action {name}
name 액션을 실행한다.
예를 들어, 다음은 \r이 Reformat Code 액션과 연결되어 있다.
:map \r :action ReformatCode<CR>
기여
CONTRIBUTING.md를 보라.
참고
- ideavim github: https://github.com/JetBrains/ideavim
- johngrib github: https://github.com/johngrib/simple_vim_guide/blob/master/md/moving.md
- 블로그: http://woowabros.github.io/tools/2016/06/18/ideavim-customize-00.html
'IDE' 카테고리의 다른 글
Code Folding(Collapse) (0) 2020.01.10 jetbrains 제품 (0) 2020.01.10 IDEA - GitHub 로그인 (0) 2019.12.27