如何将gvim的窗口宽度设置为80列文本,以及显示行号所需的宽度


9

我用gvim与

set number

在我的代码中.vimrc,它显示了每行之前的行号以及一个空格。

如果文档少于10行,则占用2列;如果文档超过10行,则占用3列,依此类推。

如果我放

set lines=40 columns=80

在中.gvimrc,它将显示78列代码,行号和步速分别为2列或77 + 3,依此类推。

我希望将窗口宽度设置为80列+显示行号所需的任何列数。

它不需要是动态的,但是我希望能够读取给定文件的行数并columns根据其进行设置。(当然,动态解决方案确实很不错,但不是必需的)

Answers:


9

在您的〜/ .vimrc中尝试以下操作:

au BufRead * let &numberwidth = float2nr(log10(line("$"))) + 2
          \| let &columns = &numberwidth + 80

每次加载缓冲区(即打开文件)时,缓冲区将确定显示最大行号所需的列数,相应地设置'numberwidth'选项,并将'columns'设置为该数字加上80作为文本。


谢谢!打开文件时效果很好。知道如何在切换标签时如何做到这一点吗?提前致谢。
Elton Carvalho

1
Vim的自动命令事件在列出:help autocommand-events。其中是TabEnter,因此您可以尝试在上面的示例BufRead中用替换,BufRead,TabEnter以查看是否提供您想要的行为。我自己尚未对该示例进行过测试。
garyjohn

谢谢@ garyjohn,TabEnter正常工作。也许以后我会玩那些自动命令事件。它们非常有用!
Elton Carvalho

1
@david_nash:'numberwidth'仅与文件中的行数成对数增长,因此,如果您完全有能力'number'启用水平空间,则不必担心会限制它。
garyjohn

1
@JonathanHartley:使用三元运算符(:help expr1)或if / endif(例如:help options-in-terminal)来控制它很容易。问题在于更改&'number'更改时的列。我曾考虑过使用OptionSet自动命令事件,但是:help OptionSet说在处理此事件时重置选项是个坏主意。
garyjohn '18

2

我用

set lines=24 columns=84

在我的$ HOME / .gvimrc中,这给了我您想要的东西。我很少(如果有的话)的文件长于999行,因此对我有用。


那就是我正在做的事情,但是准确地保留80列文本是很好的,因为我可以防止在一行中以81个字符结尾,这没什么大不了,但是可以避免。
艾尔顿·卡瓦略

2

我将numberwidth设置为5,然后将列设置为85(80 + 5),这对于从0行到一百万行的文件应该是不错的选择。

这是您可能要放入的(默认)〜/ .vimrc文件

set numberwidth=5  "Good for files upto a million lines
set columns=85
set nu

您将看到行号使用'%5d'格式化(上面的数字宽度为5),而不是默认的'%d'格式,在行号之前浪费了一些房地产,但保持了一致性。


欢迎来到超级用户。请注意,您发布的问题答案很老。尽管这样做没有错,但是请注意您可能不会得到回应。
CharlieRB
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.