Самое быстрое решение:
[ -n "$(tail -c1 file)" ] && printf '\n' >>file
Очень быстро.
Для файла среднего размера seq 99999999 >file
это занимает миллисекунды.
Другие решения занимают много времени:
[ -n "$(tail -c1 file)" ] && printf '\n' >>file 0.013 sec
vi -ecwq file 2.544 sec
paste file 1<> file 31.943 sec
ed -s file <<< w 1m 4.422 sec
sed -i -e '$a\' file 3m 20.931 sec
Работает в ash, bash, lksh, mksh, ksh93, attsh и zsh, но не в yash.
Если вам нужно решение, переносимое на yash (и все другие оболочки, перечисленные выше ), это может немного усложниться:
f=file
if [ "$(tail -c1 "$f"; echo x)" != "$(printf '\nx')" ]
then printf '\n' >>"$f"
fi
Хороший вопрос. Вы имеете в виду помеченную панель или у вас есть собственное представление о «помеченной панели»?
В первом случае вы можете пометить панель с помощью C-b m
и использовать цель {marked}
, чтобы перейти к ней
bind Q switch-client -t'{marked}'
Если вам нужна собственная отмеченная панель или вы используете старую версию tmux без отмеченной панели, вы можете использовать параметр пользователя для сохранения отмеченной панели. Например, привяжите клавишу для сохранения идентификатора активной панели, что-то вроде:
bind Q run "tmux set -g @mymarkedpane #{pane_id}"
Затем клавиша переключается на нее с привязкой клавиш, например:
bind W run "tmux switch-client -t#{@mymarkedpane}"
Если вам нужна помеченная панель для каждого сеанса, а не только для одного, удалите -g
из команды set
.