使用“less?”时从磁盘重新加载文件以显示更改的命令

使用“less?”时从磁盘重新加载文件以显示更改的命令

是否less有一个命令可以从磁盘重新加载文件,以便 less 可以显示自 less 启动以来对文件所做的任何更改?less如果我想查看正在查看的文件的更改,这将节省我终止并重新启动的时间。

答案1

手册中详细介绍了两个可能相关的命令less(1)

   R      Repaint the screen, discarding any buffered  input.   Useful  if
          the file is changing while it is being viewed.

   F      Scroll  forward, and keep trying to read when the end of file is
          reached.  Normally this command would be used  when  already  at
          the  end of the file.  It is a way to monitor the tail of a file
          which is growing while it is being  viewed.   (The  behavior  is
          similar to the "tail -f" command.)

答案2

R因为 repaint 并不总是重新加载文件。[1]

一个总是重新加载文件的解决方法是按hq,这将打开帮助页面,然后退出。它有强制重新加载文件的副作用。


R[1] 以下是一些可以重新加载和不可以重新加载的情况:

  • >>>变化:请重新加载
  • sed -i、gEdit、TextEdit:不要重新加载
  • 在 Linux 上,vi更改:重新加载
  • 在 Mac 上,vi更改:不会重新加载

我认为差异在于 inode 是否发生变化(您可以使用 进行检查ls -i foo.txt)。如果 inode 发生变化,则将R不起作用。

答案3

less我使用退出时自动重新加载的 shell 脚本解决了这个问题:

while true; do less -K file.txt || exit; done

使用此脚本,我可以点击q重新加载文件,并CTRL+C退出并返回 bash shell。此CTRL+C行为通过-K选项。您的上一个搜索词将被保留。

可以通过使用冒号 ( :) 创建空表达式来进一步重构,通过do :...

while less -K file.txt; do : ; done

缺点

当前观看位置将始终停留在第 0 行。

实际使用示例mintty

在我的 Windows(GitBash)环境中,我设置了一个脚本,用于打开一个新的终端窗口(mintty)以查看文件:

lesswin() { mintty bash -c "while less -K \"$@\"; do : ; done;" & }

相关内容