【问题标题】:Append or prepend selected text to a file in Vim在 Vim 中将选定的文本附加或添加到文件中
【发布时间】:2012-02-27 22:55:15
【问题描述】:

在 Vim 中,有没有办法将选定的文本移动到 <current_file>.bak,追加或前置? 如果可能,不应显示备份文件。

我设想的工作流程是:

  1. 选择一些文字
  2. 输入:sbak
  3. 选择保存到<current_file>.bak

【问题讨论】:

    标签: vim save backup selection


    【解决方案1】:

    您可以分三步完成:

    • 键入 Shift-vj...j 选择一些行
    • 输入 :'<,'>w! >>file.bak 将选定的行保存到file.bak(追加)
    • 键入 gvd 删除原始行

    如果您愿意,可以编写用户定义的命令Sbak

    com! -nargs=1 -range Sbak call MoveSelectedLinesToFile(<f-args>)
    fun! MoveSelectedLinesToFile(filename)
        exec "'<,'>w! >>" . a:filename
        norm gvd
    endfunc
    

    【讨论】:

    • 好,现在进一步的步骤: 1. 自动使用 .bak 作为 bak 文件名 2. 前置而不是附加。谢谢。
    • 使用expand('%:t')获取当前文件名
    • 像往常一样,你忘了fnameescape()a:filename
    • &gt;&gt; 之后省略文件名将追加到当前文件。之后使用e: 刷新缓冲区并查看附加的行。
    【解决方案2】:

    怎么样

    1. v
    2. 一些移动命令/甚至搜索以选择文本
    3. :'&lt;,'&gt; w! &gt;&gt; /YOUR/SELECTIONFILE
    4. :'&lt;,'&gt;d

    这就是你想要的吗?如果是这样,请为它设置一个map,比如

    map <F2> :'<,'> w! >> /YOUR/SELECTIONFILE<cr>:'<,'>d<cr>
    

    注意这附加到SELECTIONFILE不仅是选择,而且是整行。另外,阅读:h :w:h ++opt (在其中您可以了解写入文件的可能选项(例如)您可以附加到具有不同编码的文件,这真的很麻烦,所以不要这样做;-)

    【讨论】:

      【解决方案3】:

      您可以使用以下命令将 vim marks 选择的文本写入文件。

      例如,您转到:20 行,然后将其标记为ma,然后转到第30 行:30 并将其标记为mb,然后将第20 到30 行复制到文件filename.dat @ 987654326@.

      :'a,'b w filename.dat 将标记 a 到标记 b 的行写入文件 filename.dat

      :'a,'b w! filename.dat 将现有文件 filename.dat 替换为从标记 a 到标记 b

      的行

      :'a,'b w &gt;&gt; filename.dat 将从标记 a 到标记 b 的行附加到文件 filename.dat

      【讨论】:

        猜你喜欢
        • 2018-05-05
        • 2015-02-04
        • 1970-01-01
        • 2015-07-14
        • 2021-08-03
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        • 1970-01-01
        相关资源
        最近更新 更多