ракушка рыбы: невозможно стереть функцию - PullRequest
0 голосов
/ 14 июня 2019

При попытке временно отключить функцию fish_mode_prompt:

function get_input -a prompt var_name -d 'get user input and place it in var_name'
  functions -c fish_mode_prompt fish_mode_prompt_tmp
  functions -e fish_mode_prompt
  read --global --prompt-str="$prompt" $var_name
  functions -c fish_mode_prompt_tmp fish_mode_prompt
  functions -e fish_mode_prompt_tmp
end

Я получаю следующую ошибку:

functions: Function “fish_mode_prompt” already exists. Cannot create copy “fish_mode_prompt_tmp”
~/.config/fishdots/plugins/fishdots_crm/init/rc1.d/01.functions.fish (line 114):
  functions -c fish_mode_prompt_tmp fish_mode_prompt
  ^
in function “get_input”
        called on standard input
        with parameter list “hello world:  charlie”


       functionsfunctions - print or erase functions
        -

   Synopsis
       functions [ -a | --all ] [ -n | --names ]
       functions [ -D | --details ] [ -v ] FUNCTION
       functions -c OLDNAME NEWNAME
       functions -d DESCRIPTION FUNCTION
       functions [ -e | -q ] FUNCTIONS...

functions: Type “help functions” for related documentation

Я не совсем уверен, что здесь происходит. Должно ли это работать?

1 Ответ

2 голосов
/ 14 июня 2019

См. https://github.com/fish-shell/fish-shell/issues/741. functions --erase фактически не удаляет файл, содержащий определение функции автозагрузки.

Вместо того, чтобы пытаться переименовать функцию таким способом, просто замените ее фиктивной реализацией:

function fish_mode_prompt; end
read --global --prompt-str="$prompt" $var_name
function -e fish_mode_prompt

Но я не понимаю, почему вы хотели бы сделать это. Если вы используете режим vi, вам действительно следует постоянно отображать индикатор состояния. Даже при выполнении команды read. Если вам не нравится индикатор состояния, я бы просто определил ваш собственный ~ / .config / fish / functions / fish_mode_prompt.fish автозагрузочный скрипт с пустой функцией fish_mode_prompt.

...