从vim的命令行调用hjkl键

时间:2015-05-22 16:12:30

标签: vim fold

每当我在vim中浏览折叠代码并按下l键时,我希望它以递归方式打开该折叠。为此我做了以下事情:nmap l lzO。哪个工作正常,除了每当我按E490: No fold found而不是折叠时获得l的事实。我用这个借口来学习Vimscript并为此编写一个函数并避免错误。

现在,我错过了如何从函数内部调用llzO之类的vim命令?

function! OpenFoldOrNot()
    if foldclosed(line(".")) == -1
        echo "just l"
        l # TODO
    else
        echo "open fold"
        lzO # TODO
    endif
endfunction

nmap l :call OpenFoldOrNot()<CR>

3 个答案:

答案 0 :(得分:3)

尝试normal命令。对于这种情况,您将需要normal!以避免递归执行您的函数。

答案 1 :(得分:3)

您可以使用normal命令尝试以下操作(我的vimscript非常生锈):

function! OpenFoldOrNot()
    if foldclosed(line(".")) == -1
        normal! l
    else
        normal! lzO
    endif
endfunction

nmap l :call OpenFoldOrNot()<CR>

答案 2 :(得分:2)

或者,您可以使用map-expression来简化此类工作。

nnoremap <expr> l foldclosed(line(".")) == -1 ? 'l' : 'lzO'

在地图表达式中,映射的右侧{rhs}是VimScript表达式。评估它以获得要执行的内容。在您的情况下,它用于确定映射是否调用llz0

如需更多帮助,请参阅:

:h :map-expression