IdeaVim
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