У меня когда-то была точно эта проблема: Я хотел присоединиться к некоторым файлам, но имел недостаточно дискового пространства для содержания их вдвойне.
Таким образом, я записал набор программ:
Это позволило мне сделать что-то как
partto sourcefile | mybuffer 128M >>cumufile
и таким образом удаляя исходный файл, в то время как 128M было все еще не записано. Немного опасный, но если данные не настолько драгоценны, или они существуют где-то в другом месте также, это выполнимо.
В случае необходимости я могу обеспечить источник.
Это - зарегистрированное поведение:
down-line-or-search
Спустите строку в буфере, или если уже в нижней строке, ищите вперед в истории для строки, начинающейся с первого слова в буфере.
Кажется, нет существующего виджета, который делает точно, что Вы хотите, таким образом, необходимо будет сделать собственное. Вот то, как определить виджет, который ведет себя как up-line-or-search
, но с помощью начала строки (до курсора), а не первое слово как строка поиска. Едва ли протестированный, особенно не на многострочном входе.
up-line-or-search-prefix () {
local CURSOR_before_search=$CURSOR
zle up-line-or-search "$LBUFFER"
CURSOR=$CURSOR_before_search
}
zle -N up-line-or-search-prefix
Альтернативный подход должен использовать history-beginning-search-backward
, но только назовите его, если курсор находится на первой строке. Непротестированный.
up-line-or-history-beginning-search () {
if [[ -n $PREBUFFER ]]; then
zle up-line-or-history
else
zle history-beginning-search-backward
fi
}
zle -N up-line-or-history-beginning-search
Имейте также взгляд на zsh-history-substring-search проект.
Это предлагает то, что Вы ищете, и это может даже использоваться в качестве oh-my-zsh плагина.
zsh обеспечивают эту функциональность при помощи
history-beginning-search-backward
history-beginning-search-forward
Напр.
bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward
Найдите точный Код клавиши
ctrl+vKEY
Напр.
ctrl+vUP
ctrl+vDOWN
ctrl+vPageUp
ctrl+vPageDown
и т.д.
$terminfo[kcuu1]
, <kbd> Вниз </kbd> $terminfo[kcud1]
.
– Justin C
22.11.2015, 23:02
В этом сообщении в блоге от 2013 г. рекомендуется несколько сочетаний клавиш, которые соответствуют всем словам перед курсором.
# Cycle through history based on characters already typed on the line
autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "$key[Up]" up-line-or-beginning-search
bindkey "$key[Down]" down-line-or-beginning-search
Если $ key [Up]
и $ key [Down]
не работают на вашем компьютере, вы можете попробовать $ terminfo [kcuu1]
и $ terminfo [kcud1]
вместо этого.
Я нашел ответ на вопрос здесь , который я считаю идеальным.
Например, свяжите эти функции с клавишами «Page Up» и «Page Down», затем, когда я нажму «Page Up», он будет искать в истории, используя то, что я начал печатать, а не только первое слово.
т.е. если вы наберете sudo ls /etc
, то sudo ls
вызовет sudo ls /etc
, но не sudo cat...
и т. д.
Ниже приведена выдержка из моего файла zshrc.
## Page UP and Page Down through History
autoload -Uz history-search-end
zle -N history-beginning-search-backward-end \
history-search-end
zle -N history-beginning-search-forward-end \
history-search-end
bindkey "\e[5~" history-beginning-search-backward-end
bindkey "\e[6~" history-beginning-search-forward-end