【问题标题】:Vim: how to create key mapping to :edit and jump to last line?Vim:如何创建键映射到 :edit 并跳转到最后一行?
【发布时间】:2011-11-02 03:50:46
【问题描述】:

我将键 F2 映射到刷新 (:edit) 当前打开的文件。当文件在外部更新时(在日志文件末尾添加新行),我在观看日志文件时使用它来更新屏幕。

nnoremap <silent> <F2> :edit<CR>

我想在文件刷新后跳转到文件末尾。

如何创建同时执行:edit 并跳转到文件末尾的键映射(快捷方式G)?

【问题讨论】:

    标签: vim keymapping


    【解决方案1】:

    将光标定位在刚刚打开(或重新打开)的文件中的惯用方式 是使用+-:edit 命令的参数(参见:help +cmd)。 虽然通用语法允许执行任何命令,但也有特殊的 通过该行上的模式匹配文本导航到该行的情况 (+/ 后跟模式)或行号(+ 后跟 数字)。如果在后一种形式中省略了数字,则假定为 文件的最后一行。

    这样,重新加载当前文件,将光标定位在最后一个 行,可以使用命令

    :edit +$
    

    :edit + %
    

    可以通过使用:e 而不是:edit 来缩短这些命令,并且 在+-argument 之前省略一个可选空格。

    :e+$
    

    :e+ %
    

    相应的映射将采用以下形式

    :nnoremap <silent> <F2> :edit +$<CR>
    

    :nnoremap <silent> <F2> :edit + %<CR>
    

    请注意,此+-argument 语法对于从 命令行,所以

    $ vim + filename
    

    同样有效。

    【讨论】:

      【解决方案2】:

      这是我会使用的:

      nnoremap <silent><F2> :edit<bar>$<CR>
      

      【讨论】:

        【解决方案3】:

        您可以使用&lt;bar&gt; 在地图中链接命令。此映射可以满足您的要求:

        :nnoremap <silent> <F2> :edit <bar> :normal! G<enter>
        

        在映射/脚本中使用normal! 而不是normal 很重要,因为先验不会考虑用户定义的映射。即使在这种情况下存在G 的映射,vim 也会将G 视为根本没有映射。

        【讨论】:

          【解决方案4】:

          您可以使用:normal 来使用普通模式G motion

          :nnoremap <silent> <F2> :edit<CR>:norm! G<CR>
          

          也许更好的是使用:$ 命令转到文件末尾:

          :nnoremap <silent> <F2> :edit<CR>:$<CR>
          

          【讨论】:

          • 也许,在+-:edit 命令的参数中使用:$ 可能更好::e+$。 (详情请参阅my answer。)
          【解决方案5】:

          在 Vim 中,'|' 可用于分隔命令,就像许多 Linux/Unix 风格一样。有关酒吧使用的更多信息,请查看:help bar

          例子:

          :edit | normal! G

          如果您希望在键映射中使用它,您可能会发现您的~/.vimrc 不喜欢使用|\| 的映射。为了完成这项工作,请改用等效的 &lt;bar&gt;

          【讨论】:

            猜你喜欢
            • 2021-08-11
            • 1970-01-01
            • 2023-03-29
            • 2017-07-28
            • 1970-01-01
            • 1970-01-01
            • 2023-03-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多