Альтернатива обратному поиску Ctrl-R в bash

Я разобрался с этим (я думаю). Прочитав об использовании gvfs-mount, я обнаружил, что могу монтировать ресурс из командной строки с помощью:

gvfs-mount 'smb://10.0.0.2/nick/'

Теперь нужно было сделать это автоматически. Для этого я использовал "Startup Applications":

Startup Applications


Затем я добавил запись для каждого нужного диска:

Disks to mount


Каждая запись выглядела так:

Mount one disk

Кажется, все работает нормально.

7
20.08.2020, 02:04
4 ответа

Я использую программу нечеткого поиска FZF . Я написал свои собственные привязки клавиш и сценарии оболочки, чтобы использовать FZF в качестве предпочтительного инструмента для обратного -поиска в интерактивной Bash истории оболочки. Не стесняйтесь копировать и вставлять код из моего репозитория Config GitHub.

~Файл конфигурации /.bashrc

# Test if fuzzy finder program _Fzf_ is installed.
#
if type -p fzf &> /dev/null; then

  # Test if _Fzf_ specific _Readline_ file is readable.
  #
  if [[ -f ~/.inputrc.fzf && -r ~/.inputrc.fzf ]]; then

    # Make _Fzf_ available through _Readline_ key bindings.
    #
    bind -f ~/.inputrc.fzf
  fi
fi

~Файл конфигурации /.inputrc.fzf##

$if mode=vi

  # Key bindings for _Vi_ _Insert_ mode
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  set keymap vi-insert

  "\C-x\C-a": vi-movement-mode
  "\C-x\C-e": shell-expand-line
  "\C-x\C-r": redraw-current-line
  "\C-x^": history-expand-line
  "\C-r": "\C-x\C-addi$(HISTTIMEFORMAT= history | fzf-history)\C-x\C-e\C-x\C-r\C-x^\C-x\C-a$a"

  # Key bindings for _Vi_ _Command_ mode
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  set keymap vi-command

  "\C-r": "i\C-r"
  "\ec": "i\ec"

$endif

fzf -История исполняемого сценария Bash

#!/usr/bin/env bash
#
# Retrieve command from history with fuzzy finder
# ===============================================
# Tim Friske <me@tifr.de>
#
# See also:
#   * man:bash[1]
#   * man:fzf[1]
#   * man:cat[1]

shopt -os nounset pipefail errexit errtrace
shopt -s extglob globstar

function print_help {
  1>&2 cat \
<<'HELP'
usage:
  HISTTIMEFORMAT= history | fzf-history
HELP
}

function fzf_history {
  if [[ -t 0 ]]; then
    print_help
    exit
  fi

  local fzf_options=()
  fzf_options+=(${FZF_DEFAULT_OPTS:-})
  fzf_options+=('--tac' '-n2..,..' '--tiebreak=index')
  fzf_options+=(${FZF_HISTORY_FZF_OPTS:-})
  fzf_options+=('--print0')

  local cmd='' cmds=()
  while read -r -d '' cmd; do
    cmds+=("${cmd/#+([[:digit:]])+([[:space:]])/}")
  done < <(fzf "${fzf_options[@]}")
  if [[ "${#cmds[*]}" -gt 0 ]]; then
    (IFS=';'; printf '%s\n' "${cmds[*]}")
  fi
}

fzf_history "$@"

ключ -Bash-скрипт с исходным кодом Bindings.bash

Взято и немного адаптировано из файла FZFBashпривязки клавиш здесь приведены совместимые с режимом Emacs привязки клавиш для обратного просмотра истории Bash -поиск с помощью Ctrl -R(не проверено):

if [[ ! -o vi ]]; then
  # Required to refresh the prompt after fzf
  bind '"\er": redraw-current-line'
  bind '"\e^": history-expand-line'

  # CTRL-R - Paste the selected command from history into the command line
  bind '"\C-r": " \C-e\C-u\C-y\ey\C-u$(HISTTIMEFORMAT= history | fzf-history)\e\C-e\er\e^"'
fi
5
20.08.2021, 10:59
  • Стрелка вверх :подходит только для совсем недавних вещей.
  • grep blablabla ~/.bash_history:вам нужно настроить bash на сохранение истории в файл после каждой команды.

Из моего ~/.bashrcвы можете узнать, что делают команды, и что они настраивают.

# don't put duplicate lines in the history. See bash(1) for more options
HISTCONTROL=ignorespace:ignoredups:erasedups
HISTFILESIZE=99999
HISTSIZE=99999
export PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
# append to the history file, don't overwrite it
shopt -s histappend
#history
shopt -s cmdhist
shopt -s histreedit
shopt -s histverify
shopt -s lithist
3
20.08.2021, 10:59

Как бы то ни было, если вы отключите функцию остановки/запуска вашего tty (, которую вы, вероятно, не так часто используете ), вы можете изменить направление поиска, нажав Control -S.

% stty stop undef

% true str1
% true str2
% true str3
% true str4
Control-R => (reverse-i-search)`str': true str4
Control-R => (reverse-i-search)`str': true str3
Control-S => (i-search)`str': true str3
Control-S => (i-search)`str': true str4

Что касается этих сочетаний клавиш, которые не являются «-удобными для пользователя» или интуитивно понятными, то это сочетания клавиш emacs.emacsне для всех , в этом нет ничего удивительного (хотя я знаю секретарей и других не -столь -претенциозных личностей, которые смогли их освоить в кратчайшие сроки и без особой суеты ). Это больше вопрос культуры.

1
20.08.2021, 10:59

FZF поставляется с поддержкой bash (, а также zsh и fish ).

Ответ @Tim Freske описывает их модификации для связывания клавиш в стиле vi.

Привязки клавиш по умолчанию соответствуют стилю emacs. Что даже переопределяет поведение Ctrl-r для нечеткого поиска без потери позиции. Они могут быть не включены по умолчанию. Чтобы включить их, добавьте это в.bashrc:

source /usr/share/doc/fzf/examples/key-bindings.bash

(Если это не сработает, выполните apt-cache show fzfи найдите файл ...fzf/README..., в нем перечислены команды для bash, zsh, fish и vim)

-1
20.08.2021, 10:59

Теги

Похожие вопросы