本文参考:
http://ideavim.sourceforge.net/vim/insert.html
http://ideavim.sourceforge.net/vim/motion.html
https://github.com/saaguero/ideavimrc
为什么很多人都选择 OS X + Vim + IntelliJ IDEA
androidstudio拥有华丽的界面提示以及各种强大的插件,比如自动补全。但是原有的快捷键比较难以操作,大多在fn功能键上。对于习惯vim编辑的人而言操作起来非常不方便而且也不想去记这些快捷键。而ideavim拥有方便快捷的快捷键操作以及可以扩展studio的快捷键。所以我们可以在ideavim的基础上修改studio原有的快捷键,让androidstudio基本操作可以vim的对应起来,也可以让vim的快捷键操作androidstudio的插件。
1修改快捷键映射
androidstudio中很多快捷键都在fn上,把大部分的Fn的功能键都映射成空格加对应的数字按键。比如显示错误信息的< c-f1 >映射成< space >1外部文件链接改为< c-1 >。修改方法方法是可以看github中给出的方法
:actionlist [pattern]
Find IDE actions by name pattern
:action {name}
Execute an action named NAME
还是以 < c-f1 >为例,显示错误信息。在编辑窗口输入:actionlist error之后看到提示。
所以ShowErrorDescripttion就是我们要找的动作的名称了
接着把这个动作映射到< space >1 上,执行
:nnoremap <space>1 :action ShowErrorDescripttion<cr>
就可以按下空格键和1显示错误信息了。想要每次启动自动执行可以写到~/.ideavimrc中。
2使用androidstuido中强大的插件
原有的studio操作快捷键改成vim,让studio的强大的界面显示结合vim方便的快捷键。比如标志书签和跳到书签,原有的ideavim是没有提示的。而androidstuido有华丽的界面提示。按下< c-f11 >可以看到标签提示界面
按下< s-f11 >可以看到跳转提示界面
把< c-f11 >映射到m上 ,< s-f11 >映射到`上,以后每一次按下vim的书签快捷键都可以显示这些提示了。
nnoremap m :action ToggleBookmarkWithMnemonic
nnoremap ` :action ShowBookmarks
下面的配置文件来自https://github.com/saaguero/ideavimrc/blob/master/.ideavimrc。可以自己做些修改。
set hlsearch
set scrolloff=3
set ignorecase smartcase
set showmode
set history=1000
" easy system clipboard copy/paste
noremap <space>y "*y
noremap <space>Y "*Y
noremap <space>p "*p
noremap <space>P "*P
" easy window navigation
nnoremap <c-l> <c-w>l
nnoremap <c-j> <c-w>j
nnoremap <c-h> <c-w>h
nnoremap <c-k> <c-w>k
nnoremap <a-h> gT
nnoremap <a-l> gt
" clear the search buffer when hitting return
nnoremap <space><cr> :nohlsearch<cr>
" options
nnoremap cow :action EditorToggleUseSoftWraps<cr>
nnoremap col :action EditorToggleShowWhitespaces<cr>
" actions
nnoremap <space>q :action CloseContent<cr>
nnoremap <space>Q :action ReopenClosedTab<cr>
nnoremap <space>\ :action VimFilePrevious<cr>
nnoremap <space>e :action GotoClass<cr>
nnoremap <space>E :action Switcher<cr>
nnoremap <space>t :action FileStructurePopup<cr>
nnoremap <space>T :action GotoSymbol<cr>
nnoremap <space>a :action GotoAction<cr>
" code navigation
nnoremap <space>] :action GotoImplementation<cr>
nnoremap <space>[ :action GotoSuperMethod<cr>
nnoremap <space>u :action FindUsages<cr>
nnoremap <space>gt :action GotoTest<cr>
nnoremap \r :action RunClass<cr>
nnoremap \d :action Debug<cr>
nnoremap [m :action MethodUp<cr>
nnoremap ]m :action MethodDown<cr>
" code refactoring
nnoremap <space>rr :action RenameElement<cr>
" unimpaired mappings
nnoremap [<space> O<esc>j
nnoremap ]<space> o<esc>k
nnoremap [q :action PreviousOccurence<cr>
nnoremap ]q :action NextOccurence<cr>
" built-in navigation to navigated items works better
nnoremap <c-o> :action Back<cr>
nnoremap <c-i> :action Forward<cr>
" but preserve ideavim defaults
nnoremap g<c-o> <c-o>
nnoremap g<c-i> <c-i>
" built in search looks better
nnoremap / :action Find<cr>
" but preserve ideavim search
nnoremap g/ /