打开文件时如何在前面添加一些自定义文本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的“查看器”模式,并设置视图的标题。 (为了防止混淆,如果您从未使用过ed
orvi
或 衍生物:您将键入:q↵退出。)
答案3
按照此处所述设置 RAM 分区: shell 脚本 - 如何在 RAM 中创建临时文件? - Unix 和 Linux 堆栈交换
添加打开标题为.bashrc
or 的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