1

Ctrl-fでファイルを開こうとしています。コマンドが空のバッファ'None'の存在下で入力された場合、そのバッファでファイルを開く必要がありますが、空のバッファがない場合は、 :tabnewを使用して新しいバッファを開き、次にその中のファイル。この目的のために、呼び出されるOpenFile関数があります。

function! OpenFile()
python << EOF
import vim
import re
buffer = vim.current.buffer
name = str(buffer.name)
if re.match('None', name):
    vim.command(':e ')
else:
    vim.command(':tabnew')
    vim.command(':e ')
EOF
endfunction

"Open file
 :map <C-f> :call OpenFile()<CR> 
:imap <C-f> <Esc>:call OpenFile()<CR>

vim.command はコマンドを実行するので、これは :w!ENTER と同等です。私がやりたいのは、コマンドのセットアップ部分です.. :e FILENAME ENTER

だから私は :e の部分を python-function 経由で Ex モードで送信し、ユーザーにファイル名を入力して ENTER を押してもらいたい

4

1 に答える 1

0

まず、なぜPythonでこれを書くのですか?確かに、Vim スクリプトは少し奇妙です (しかし、Vim 7 は Python に非常に似ているため)、とにかく統合ポイントについて学ぶ必要があり、このタスクには実際のロジックはほとんどありません。

これは、マップ式 ( :help map-expression)を介して最も簡単に解決できます。

:noremap <expr> <C-f> empty(bufname('')) ? ':edit ' : ':tabnew '

必要に応じて、条件を関数に抽出し、Python でコーディングしますが、ロジックが非常に複雑であるか、特定のライブラリを利用できる場合を除き、Vimscript を使用することをお勧めします。

于 2012-12-29T12:13:48.263 に答える