【问题标题】:Display relative and absolute line numbers simultaneously in Vim在 Vim 中同时显示相对和绝对行号
【发布时间】:2019-12-29 06:18:04
【问题描述】:

有没有办法在 Vim 中同时显示 relativeabsolute 行号?并排或其他一些有趣的演示都可以。

【问题讨论】:

标签: vim


【解决方案1】:

是的,你可以。使用RltvNmbr.vim显示相对数,使用Vim显示绝对数:

【讨论】:

  • @Fire-Dragon-DoL 我已经安装了那个插件,但是需要它显示在vim本身的启动中。我应该在.vimrc 文件中输入什么?
  • 启用这个插件真的会减慢整个 vim 例如当用 j/k 改变线条时..
  • 即使是直接跳线,每跳一次刷新率也是蛮猛的
  • @Fire-Dragon-DoL 已修复!
  • 您可以在.vimrc 中启用此插件:call RltvNmbr#RltvNmbrCtrl(1)
【解决方案2】:

Vim 7.4 (Patch 7.3.787) 将显示绝对行号而不是 "0",当 "relativenumber" 和 "number" 都设置时。

来自:h relativenumber,7.3

设置此选项时,“数字”被重置。

来自:h relativenumber,7.4

光标行前面的数字也取决于 '数字',见 |number_relativenumber|对于两者的所有组合 选项。

【讨论】:

    【解决方案3】:

    按理说,你不能。行号是每个缓冲区一个,仅由 'number' 选项控制。

    我尝试了一个疯狂的想法::vertical diffsplit 加上:setlocal relativenumber。这会得到两个相邻的缓冲区副本,在滚动位置链接,因为它们处于差异模式。但是,它确实无法正常工作。相对数字没有成功更新(在 7.3.154 上,错误可能会在以后修复,但我对此表示怀疑——这几乎不值得),即使他们这样做了,你也会被困在一个非常碍眼和更难的管理和导航中.

    您可以通过将插件写入您将保留在左侧的特殊缓冲区来做到这一点,但是实现会很丑陋,并且仍然会使导航变得困难(因为它是另一个缓冲区)。我当然不会花时间编写这样的插件,但我必须承认我想展示这两种形式的行号。

    【讨论】:

    • 啊,你和我一样拼命想。 :)
    • @mt3 您可能有兴趣返回 thia Q&A 并查看已发布插件解决方案作为答案
    • 好的,我已经取消选择这个作为接受,并选择了实际的插件。
    【解决方案4】:

    多年后,这个功能现在是 Vim 的一部分,被称为混合数字。

    您可以通过输入:

    打开此功能
    :set number relativenumber
    

    也没有速度惩罚。据我所知。

    【讨论】:

      【解决方案5】:

      plnxMacario 答案与 vim 7.4 结合。

      autocmd WinEnter,FocusGained * :setlocal number relativenumber
      autocmd WinLeave,FocusLost   * :setlocal number norelativenumber
      

      这会在焦点窗口中显示相对编号(当前行在绝对值中),在非焦点窗口中显示绝对值。

      【讨论】:

      • 对我来说,这不会在新打开的文件(从命令行或 ctrl-p)上触发,所以我将 autocmd WinEnter,FocusGained 更改为 autocmd BufReadPre,FileReadPre,winenter,focusgained
      • 您使用的是哪个版本的vim?在 Void Linux 上,vimgvim 中的 8.1.1467 都适用于我。 (vim testgvim test,切换到 INSERT 模式,键入几行,切换回 NORMAL 模式,上下导航。)
      • neovim@head。进入和退出插入模式时它对我有用,但在打开新文件时不起作用
      • 必须是 neovim 的 delta。 (我只使用 (g)vim)。也许打开一个错误报告?
      【解决方案6】:

      这是我与相对和绝对行号相关的映射 在相对和绝对之间切换。

      进入窗口会将窗口设置为相对数字,而离开则将其设置为绝对数字。 然后,如果您对窗口进行垂直拆分,您将使用相对和绝对数字设置相同的缓冲区。

      " setglobal relativenumber
      autocmd WinEnter * :setlocal relativenumber
      autocmd WinLeave,FocusLost * :setlocal number
      autocmd InsertEnter * :setlocal number
      autocmd InsertLeave * :setlocal relativenumber
      
      function! g:ToggleNuMode()
        if(&relativenumber == 1)
          set number
        else
          set relativenumber
        endif
      endfunc
      
      map <C-l> :call g:ToggleNuMode()<CR>
      

      【讨论】:

        猜你喜欢
        • 2012-03-23
        • 2020-07-24
        • 1970-01-01
        • 2020-08-24
        • 1970-01-01
        • 1970-01-01
        • 2013-10-18
        • 1970-01-01
        • 2014-04-18
        相关资源
        最近更新 更多