如何用更少的时间制作自定义标头?或者,如何在更少的时间内同时打开两个文件?

如何用更少的时间制作自定义标头?或者,如何在更少的时间内同时打开两个文件?

打开文件时如何在前面添加一些自定义文本less?例如,我想看到类似的内容:

My custom title

Content of the opened file goes here...

我想要一个这样的命令:

echo 'My custom title' | less file

less没有这个功能。但必须可以通过一些解决方法来实现。基本上,我们需要按顺序将两个文件合并为一个,然后打开它。如何在 RAM 中创建一个临时虚拟文件,其中将包含要在其中打开的新文件less

类似问题:

答案1

为什么不

( echo 'My custom title'; cat file ) | less

如果您希望交互式地使用它,请将其放入函数中;此版本仅采用一个文件名(加上less您可能想要提供的任何选项):

# bash
myless() {
    local x=("$@")
    local f="${x[-1]}"
    unset x[-1]
    { echo 'My custom title'; cat "$f"; } | less "${x[@]}"
}

对于更具体的场景,您可以适当修改该函数。例如,如果第一个参数是标头,第二个参数始终是文件,则可以像这样大大简化:

myless() {
    { printf '%s\n' "$1"; cat -- "$2"; } | less
}

less如果您希望标头成为文件名,那么使用已有的选项在提示行上提供此选项似乎更明智。但另一方面,

myless() {
    while [ "$#" -gt 0 ]
    do
        printf '\n\n%s\n' "$1"
        cat -- "$1"
        shift
    done |
        less
}

答案2

通常的基于子 shell 的方法:

(echo "custom title"; cat file) | less

作品。

我确实喜欢我的vim(或 neovim),所以我做了类似的事情

#!/bin/ksh
# or /bin/bash or /usr/bin/zsh, really
open_with_title() {
  title="$1"
  shift
  ${EDITOR:-vim} \
       --clean \
       -R \
       --cmd ':set showtablines=2' \
       --cmd ":set tabline='${title}'" \
       -- \
       $@
}

使用vim的“查看器”模式,并设置视图的标题。 (为了防止混淆,如果您从未使用过edorvi或 衍生物:您将键入:q退出。)

答案3

按照此处所述设置 RAM 分区: shell 脚本 - 如何在 RAM 中创建临时文件? - Unix 和 Linux 堆栈交换

添加打开标题为.bashrcor 的less 的功能.bash_funcs.sh

open_less_with_title() { 
    local title="$1"
    local file="$2"
    local tmp_dir=""
    local virtual_tmp_dir="/mnt/tmpfs"
    if [ -d "$virtual_tmp_dir" ]; then
        tmp_dir="$virtual_tmp_dir"
    else
        tmp_dir="/tmp"
    fi
    tmp_less_file=$(mktemp "$tmp_dir/tmp_less_file.XXXXXXXXXX")
    echo -e "$title\n\n" > "$tmp_less_file"
    cat "$file" >> "$tmp_less_file"
    less "$tmp_less_file"
    rm "$tmp_less_file"
}

使用示例:

open_less_with_title "My custom title" /path/to/file

相关内容