Я сожалею, но нет никакой Oracle (исключая: Sun) поддержка Java FreeBSD.
С другой стороны можно использовать порт FreeBSD OpenJDK.
Просто удалите vim
от псевдонима. Сделайте что-то вроде этого:
alias latest='ls -tr | tail -n 1'
Можно затем использовать любую программу для открытия последних файлов:
emacs `latest`
ls `latest`
mv `latest` ../
и т.д.
Однако это повредится, если Ваши имена файлов будут иметь пробелы или странные символы, который является, почему Вы никогда не должны анализировать ls
. Лучший путь был бы чем-то вроде этого (добавьте это к Вашему .bashrc
) :
function latest(){
$1 "$(find . -type f -printf "%C@ %p\n" | sort | tail -n 1 | cut -d " " -f 2-)"
}
Эта функция выполнит любую команду, которую Вы даете ей как аргумент и передаете результат find
звоните (последний файл) к той команде. Так, можно сделать вещи как:
latest emacs
latest less
Если необходимо смочь сделать вещи как mv $(latest) foo/
попробуйте этого вместо этого:
function latest(){
A=(${@})
prog=$1;
lat=$(find . -type f -printf "%C@ %p\n" | sort | tail -n 1 | cut -d " " -f 2-)
if [ ! -z $2 ] ; then
args=${A[@]:1};
$prog "$lat" "${A[@]:1}"
else
$prog "$lat"
fi
}
Затем для копирования последнего файла в bar/
, Вы сделали бы
latest cp bar
И можно все еще сделать latest emacs
таким же образом как прежде.
Измените функцию завершения bash «_filedir», чтобы разрешить завершение с помощью табуляции с последним именем файла. Вот скрипт, который вы можете source
сделать так:
#!/bin/sh
_filedir_newest()
{
local parent="$1"
if [ "${#parent}" -gt "0" ]; then
parent="$(compgen -d -- ${1:0:-1})/"
fi
newest=$(bash -c "ls -tr $parent | tail -n 1")
echo "$parent$newest"
} # _filedir_newest()
_filedir()
{
local IFS=$'\n'
_tilde "$cur" || return
local -a toks
local x reset
local newest=0
reset=$(shopt -po noglob); set -o noglob
toks=( $(compgen -d -- "$cur") )
IFS=' '; $reset; IFS=$'\n'
if [[ "$1" != -d ]]; then
local quoted
if [[ "$cur" = "?" ]] || [[ "${cur: -2}" = "/?" ]]; then
cur="${cur:0:-1}"
newest=1
fi
_quote_readline_by_ref "$cur" quoted
# Munge xspec to contain uppercase version too
# http://thread.gmane.org/gmane.comp.shells.bash.bugs/15294/focus=15306
local xspec=${1:+"!*.@($1|${1^^})"}
reset=$(shopt -po noglob); set -o noglob
toks+=( $(compgen -f -X "$xspec" -- $quoted) )
IFS=' '; $reset; IFS=$'\n'
# Try without filter if it failed to produce anything and configured to
[[ -n ${COMP_FILEDIR_FALLBACK:-} && -n "$1" && ${#toks[@]} -lt 1 ]] && {
reset=$(shopt -po noglob); set -o noglob
toks+=( $(compgen -f -- $quoted) )
IFS=' '; $reset; IFS=$'\n'
}
fi
if [[ ${#toks[@]} -ne 0 ]]; then
# 2>/dev/null for direct invocation, e.g. in the _filedir unit test
compopt -o filenames 2>/dev/null
if [[ $newest -eq 1 ]]; then
COMPREPLY+=( $(_filedir_newest "$cur") )
else
COMPREPLY+=( "${toks[@]}" )
fi
fi
} # _filedir()
_filedir_xspec()
{
local cur prev words cword
_init_completion || return
_tilde "$cur" || return
local IFS=$'\n' xspec=${_xspecs[${1##*/}]} tmp
local -a toks
local newest=0
if [[ "$cur" = "?" ]] || [[ "${cur: -2}" = "/?" ]]; then
cur="${cur:0:-1}"
newest=1
fi
toks=( $(
compgen -d -- "$(quote_readline "$cur")" | {
while read -r tmp; do
printf '%s\n' $tmp
done
}
))
# Munge xspec to contain uppercase version too
# http://thread.gmane.org/gmane.comp.shells.bash.bugs/15294/focus=15306
eval xspec="${xspec}"
local matchop=!
if [[ $xspec == !* ]]; then
xspec=${xspec#!}
matchop=@
fi
xspec="$matchop($xspec|${xspec^^})"
toks+=( $(
eval compgen -f -X "'!$xspec'" -- "\$(quote_readline "\$cur")" | {
while read -r tmp; do
[[ -n $tmp ]] && printf '%s\n' $tmp
done
}
))
if [[ ${#toks[@]} -ne 0 ]]; then
compopt -o filenames
if [[ $newest -eq 1 ]]; then
COMPREPLY=( $(_filedir_newest "$cur") )
else
COMPREPLY=( "${toks[@]}" )
fi
fi
} # _filedir_xspec()
Его можно добавить к вашему ~/.bashrc
вот так (заменить /path/to/the/script
соответствующим образом ), чтобы он применялся ко всем сеансам bash:
source /path/to/the/script/_filedir.sh
После установки '?' используется как специальный индикатор для последнего файла в каталоге, например:
eog ~/Downloads/?<TAB>
становится (в одном случае):
eog ~/Downloads/Sunscreen\ Permission\ -\ ToddlerPrimaryElementary.pdf
Этот метод будет работать с любым каталогом, поскольку он интегрирован с системой завершения bash, а не просто сообщает о самом последнем файле в текущем каталоге. Я часто использую это для перемещения недавно загруженных файлов из моего браузера в папку любого проекта, над которым я активно работаю(mv ~/Downloads/?<TAB>.
).
Обновлено в 2021 г. -10 -27:Теперь также работает с _filedir_xspec
подпрограммами автозаполнения bash. Обновлено 2021 -11 -09:Исправлена ошибка при работе с текущим каталогом из последнего обновления.
Так как новейший файл также отсортирован в последний раз, Вы могли использовать menu-complete-backward
. menu-complete
и menu-complete-backward
цикл посредством завершений или вставляет первое или последнее завершение. Я связал их с вкладкой опции и shift-tab в ~/.inputrc
:
"\e\t": menu-complete
"\e[Z": menu-complete-backward
Ваш эмулятор терминала не мог бы вставить \e[Z
когда Вы нажимаете shift-tab. Использовать C-v
или cat -v
видеть, какой текст вставляется при нажатии сочетания клавиш.
Можно легко настроить это в zsh
, например, с чем-то вроде этого:
zstyle ':completion:*' file-sort date
(можно также изменить строку, таким образом, что этот стиль только используется для определенных шаблонов имени файла),
zsh
очень похоже на удар, Вы могли, вероятно, назвать его надмножеством удара - feature-/usage-wise.
Но возможно удар имеет подобную функцию.
zsh
но если я когда-нибудь делаю, мне отметили это!
– dotancohen
13.09.2013, 10:25
Подоплекой вопроса является скорость использования. Я считаю, что наиболее подходящим является клавиатурный макрос. Добавить в ~/.inputrc
:
# Alt-L --> newest file in directory
"\el": "$(ls -t|head -1)"
Дополнительные идеи: Первоначально я хотел что-то, что дает мне 1-й, 2-й, 3-й самый новый файл. Идея заключается в том, чтобы отметить места маркером, например, "grep x _", затем выполнить макрос клавиатуры "\C-alatest-expansion \C-m" и "latest-expansion" предлагает список выбора в curses, чтобы выбрать из последних файлов для каждого маркера "_" в командной строке.
Я считаю это важным вопросом, потому что одним из оставшихся преимуществ GUI перед SHELL для меня является выбор недавно использованных/созданных файлов и каталогов. autojump
немного помогает для каталогов, решение для файлов отсутствует.
Мой взгляд на это сочетает в себе find
команду отличного -как -обычного -terdon AA и .inputrc
трюк от @weidenrinde, но идет немного дальше:
Я сопоставил .,n
для прозрачной вставки последнего измененного файла в текущую позицию в командной строке:
$ grep.,n ~/.inputrc
".,n": "\C-u`find. -type f -printf \"%C@ %p\\n\" | sort | tail -n 1 | cut -d \" \" -f 2-`\e\C-e\C-a\C-y\C-e"
Хитрость заключается в использовании \C-e\e
в конце для оценки вставленной команды поиска на месте.
Я использую .,
в качестве префикса для многих вещей, так как его легко набирать, и, кроме этого сообщения, он никогда не появляется в моем письменном тексте, но вы можете использовать что угодно.