1

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
4

2 に答える 2

10

kevの優れた答えをもう少し詳しく説明します。

汎用の「バッファが空でない場合は分割してファイルを開く」関数を引き出すのはどうですか。

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>)
于 2012-06-16T08:34:23.380 に答える
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変化するカウンターを追跡するために呼び出される変数です。

于 2012-06-16T05:31:07.717 に答える