如果缓冲区不为空,则拆分vim

时间:2012-06-16 05:05:41

标签: vim

我尝试为open~ / .vimrc创建一个地图,但只在缓冲区为空时打开〜/ .vimrc,否则拆分并打开。
我试试这个

fun! BufferIsEmpty() "{{{                                                                
    if line('$') == 1 && getline(1) == ''                                                
        return 1                                                                         
    else                                                                                 
        return 0                                                                         
    endif                                                                                
endf "}}}                                                                                
fun! NotEmptySplit() "{{{                                                                
    if !BufferIsEmpty()                                                                  
        sp                                                                               
    endif                                                                                
    return                                                                               
endf                                                                                     
command! -nargs=0 NotEmptySplit call NotEmptySplit()  
nnoremap <silent><leader>ve :NotEmptySplit <bar> ~/.vimrc<CR>

但我收到此错误

E488: Trailing characters

2 个答案:

答案 0 :(得分:10)

进一步采取kev的优秀答案:

如果在缓冲区不为空的情况下拉出一个通用的'open file in split if。

fu! OpenInSplitIfBufferDirty(file)
    if line('$') == 1 && getline(1) == ''
        exec 'e' a:file
    else
        exec 'sp' a:file
    endif
endfu

nnoremap <silent> <leader>ve :call OpenInSplitIfBufferDirty($MYVIMRC)<cr>
command -nargs=1 -complete=file -bar CleverOpen :call OpenInSplitIfBufferDirty(<q-args>)

答案 1 :(得分:4)

添加-bar选项将解决E488错误。

command! -bar -nargs=0 NotEmptySplit call NotEmptySplit()
nnoremap <silent><leader>ve :NotEmptySplit <BAR> ~/.vimrc<CR>

但它会从E488引发另一个<BAR> ~/.vimrc<CR>错误。


我正在尝试重构您的代码:

fun! OpenVimrc()
    if line('$') == 1 && getline(1) == ''
        e $MYVIMRC
    else
        sp $MYVIMRC
    endif
endf

nnoremap <silent><leader>ve :call OpenVimrc()<CR>

这是一个名为b:changedtick的变量,用于跟踪更改计数器。