Less

在 less 中刪除行號的左填充

  • December 14, 2020

如果在-N內切換開關less,它會顯示行號。但是,即使總行數很小,似乎也添加了不必要的大量填充。例如man less啟用行號的輸出是:

     1 LESS(1)
     2
     3 NAME
     4        less - opposite of more
     5 
     6 SYNOPSIS
     7        less -?
     8        less --help
     9        less -V
    10        less --version
    11        less [-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]
...
   940       Version 487: 25 Oct 2016 

有沒有辦法控製或減少填充到總行數所需的最少數量?

我知道我可以尋求一個程序化的解決方案(例如管道cut等),但我想知道是否有某種我不知道的開關或配置參數控制這種行為。

更新

此功能已以額外命令行選項的形式迅速添加到 Less 中--line-num-width=N. 根據送出歷史,下面的原始答案在 Less 版本 570 之前有效。


原始答案

不,沒有減少填充的選項。填充是在原始碼文件中完成line.c

/*
* Display the line number at the start of each line
* if the -N option is set.
*/
if (linenums == OPT_ONPLUS)
{
   char buf[INT_STRLEN_BOUND(pos) + 2];
   int n;

   linenumtoa(linenum, buf);
   n = (int) strlen(buf);
   if (n < MIN_LINENUM_WIDTH)
       n = MIN_LINENUM_WIDTH;
   sprintf(linebuf+curr, "%*s ", n, buf);
   n++;  /* One space after the line number. */
   for (i = 0; i < n; i++)
       attr[curr+i] = AT_BOLD;
   curr += n;
   column += n;
   lmargin += n;
}

填充量是MIN_LINENUM_WIDTH,在標頭檔中定義less.h為 7,足以為少於一千萬行的文件保留數字對齊。如果您發現過多,您可以隨時更改並重新編譯。

引用自:https://unix.stackexchange.com/questions/624296