【问题标题】:Why my multiple-command vim command-mode abbreviation will be executed automatically when opening a new file?为什么打开新文件时会自动执行我的多命令 vim 命令模式缩写?
【发布时间】:2015-07-15 19:21:54
【问题描述】:

今天,我意识到我需要经常将普通文本文件转换为 python 列表数据结构。

因此我为我做了一个 vim 命令行缩写。

看起来像这样:

" wrap all current file datas with python list formats
ca ml %s/^/"/g | %s/$/",/g | 1s/^/[/ | $s/$/]/

我已经测试了命令正文部分:%s/^/"/g | %s/$/",/g | 1s/^/[/ | $s/$/]/
当我将它们粘贴到 vim 命令行时,这符合我的预期。

但是当我将上面的 vim 配置添加到我的.vimrc

每次我用vim打开一个新文件都会自动执行。

vim empty_file会在新文件中添加以下内容:

[",]

为什么会这样?
以及如何修复它,以便仅当我在 vim 命令行中键入 ml 时才执行命令体?

【问题讨论】:

    标签: vim


    【解决方案1】:

    我认为您应该将| 字符替换为<bar>

    ca ml %s/^/"/g <bar> %s/$/",/g <bar> 1s/^/[/ <bar> $s/$/]/
    

    :h map_bar
    

    【讨论】:

    • 它们有什么区别?
    • | 分隔命令。所以第一个| 将结束缩写的定义,然后执行替换命令。但是,如果您使用 &lt;bar&gt;,则只有在缩写展开时,它才会被 | 替换。
    • @Zen 如果使用| 代替&lt;bar&gt;,vim 将理解缩写结束,随后是另一个命令,如:h map_bar 中所述。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多