1

起動時に実行されるvimrcファイルに入れるものを探しています。開くファイルの2行目を確認する必要があります。

To:

それはtoとスペースであり、基本的にはそれらの単語であり、その後は何もありません。「空」が見つかった場合はTo:、最後の2行目のその行に移動します。To:その後にテキストがある場合は、9行目に移動します。

私はMuttでメールを編集するためにVimを使用していますが、メールに返信するのか(メールアドレスはすでに存在します)、新しいメールを作成するのか(アドレスを入力する必要があります)を判断するためにVimを使用しています。適切な行に私を。

どこから始めればいいのかよくわからないので、vimrcで起動時に関数を実行できるかどうか、X行の最後に移動するように指示する方法がわかりません。私は私が次のラインに行くことができることを知っています:

2gg

しかし、行の終わりと正規表現は私にとって難しい部分です。

4

2 に答える 2

3

この自動コマンドを試してください(を参照:help autocmd

au FileType mail if getline(2) == "To: " | 2 | else | 9 | endif | start!

ステップバイステップ:

  1. au-autocmdを開始します。これはの中にありaugroup、その最初の行はであるaugroup必要がありますau!。これは、をリソースする際のエラーを防ぐため.vimrcです。

  2. FileType-これはイベントトリガーです。見る:help FileType

  3. mail-これは、このコマンドを実行するファイルタイプです。これは、デフォルトでmuttでメールに設定されています。

  4. getline(2) == "To: "-2行目が等しい場合"To: "

  5. 2-次に2行目に移動します。orinvimはパイプではありません|<Bar>代わりに、他の言語のセミコロンのように機能します。ステートメントを分離することができますが、のように機能しないステートメントもあり:normます。

  6. else | 9-それ以外の場合は9行目に移動します

  7. endif-ifステートメントを閉じます

  8. start!-行の終わりから挿入モードを開始します。

于 2012-08-08T19:46:38.373 に答える
1

試す

function MuttEnter()
    let l2=getline(2)
    if l2[:3] is# 'To: '
        if len(l2)==3
            2
        else
            9
        endif
        startinsert!
    endif
endfunction
augroup vimrcMutt
    autocmd!
    autocmd VimEnter * call MuttEnter()
augroup END

。注:muttメッセージを編集しているかどうかをより適切に検出することは理にかなっています(現在To:、2行目に(スペースを入れて)ある場合は編集していると想定しています)。

ちなみに、ここでは正規表現はまったく必要ありません。Vimはperlほど正規表現を最適化するのが得意ではありません。

于 2012-08-08T19:43:24.553 に答える