![](/img/trans.png)
[英]Can I remap the “,” command in VIM before using it as the leader key?
[英]vim remap fold navigation using leader key
我選擇了這個方便的功能來跳過vim中的閉合折疊:
let mapleader = ","
nnoremap <silent> <leader>zj :call NextClosedFold('j')<cr>
nnoremap <silent> <leader>zk :call NextClosedFold('k')<cr>
function! NextClosedFold(dir)
let cmd = 'norm!z' . a:dir
let view = winsaveview()
let [l0, l, open] = [0, view.lnum, 1]
while l != l0 && open
exe cmd
let [l0, l] = [l, line('.')]
let open = foldclosed(l) < 0
endwhile
if open
call winrestview(view)
endif
endfunction
正如你所看到的,我的leader
鍵設置為,
。
因此,現在如果我發出命令,zj
我的光標將移至下一個關閉的折疊。 但是,我想要的是讓zj
命令默認移動到下一個折疊,而我想讓,zj
移動到下一個折疊(打開或關閉)。
編寫重新映射以使我的vim表現出我想要的方式的最優雅的方法是什么?
聽起來像您想要這樣。
nnoremap <silent> <leader>zj zj
nnoremap <silent> <leader>zk zk
nnoremap <silent> zj :call NextClosedFold('j')<cr>
nnoremap <silent> zk :call NextClosedFold('k')<cr>
function! NextClosedFold(dir)
let cmd = 'norm!z' . a:dir
let view = winsaveview()
let [l0, l, open] = [0, view.lnum, 1]
while l != l0 && open
exe cmd
let [l0, l] = [l, line('.')]
let open = foldclosed(l) < 0
endwhile
if open
call winrestview(view)
endif
endfunction
nnoremap
使映射成為非遞歸的,因此,即使您重新定義zj
和zk
,也始終可以恢復其默認行為。 然后,我們只需將zj
和zk
映射到所需的行為即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.