簡體   English   中英

使用引導鍵對vim重新映射折疊導航

[英]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使映射成為非遞歸的,因此,即使您重新定義zjzk ,也始終可以恢復其默認行為。 然后,我們只需將zjzk映射到所需的行為即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM