1

我正在寻找一些东西放入启动时运行的 vimrc 文件中。我需要检查它打开的文件的第二行:

To:

那是 to 和一个空格,基本上是那些单词,然后什么都没有。如果它找到一个“空” To:,它将带我到最后的那一行,第 2 行。如果To:后面有文本,那么它带我到第 9 行。

我使用 Vim 在 Mutt 中编辑电子邮件,我试图让它决定我是在回复电子邮件(电子邮件地址已经存在)还是创建新电子邮件(我需要输入一个地址)并采取我到相应的行。

甚至不知道从哪里开始,我不知道我是否可以在 vimrc 中启动时运行函数以及如何告诉它到 X 行的末尾。我知道我可以去一行:

2gg

但行尾和正则表达式对我来说是困难的部分。

4

2 回答 2

3

试试这个自动命令(见:help autocmd

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

一步步:

  1. au- 开始一个自动命令。这应该在一个里面augroup,第一行augroup应该是au!。这是为了防止在为您的.vimrc.

  2. FileType- 这是一个事件触发器。看:help FileType

  3. mail- 这是运行此命令的文件类型。这在 mutt 中默认设置为邮件。

  4. getline(2) == "To: "- 如果第 2 行等于"To: "

  5. 2- 然后去第二行。vim 中的|or<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:在第二行有(带有空格)时这样做)。

顺便说一句,你在这里完全不需要正则表达式,Vim 在优化它们方面不如 perl。

于 2012-08-08T19:43:24.553 回答