В настоящее время я использую zsh, и каждый раз, когда я использую табуляцию для каталогов, она добавляет косую черту в конце. Это создает проблему при использовании команд, таких как rsync, которые различают аргументы каталога, которые имеют прямую косую черту. Поэтому каждый раз, когда я использую табуляцию, мне нужно вернуться и удалить косую черту.Заполнение вкладки Zsh добавляет косую черту для каталогов, как этого избежать?
ответ
Не специалист по трюкам и советы ЗШ, но вы можете сделать это в вашем файле .zshrc:
remove-slash() {
if [[ $LBUFFER = */ ]] && [[ $LBUFFER != *' '/ ]]; then
LBUFFER="${LBUFFER[0,-2]} "
else
LBUFFER+=' '
fi
}
no-remove-slash() {
LBUFFER+=' '
}
zle -N remove-slash
zle -N no-remove-slash
bindkey " " remove-slash
bindkey "^x " no-remove-slash
Каждый раз, когда вы нажимаете клавишу пробела, из-за bindkey " " remove-slash
линии, функция удалить-слэш , который управляет строкой символов слева от курсора, LBUFFER
, чтобы удалить конечную косую черту.
Однако следует отметить, что этот вызов функции производится каждый раз при нажатии клавиши пробела в командной строке, так что если вы должны были ввести sed s/ /_/g
, например, вы будете в конечном итоге с sed s /_/g
, потому что remove-slash
будет убить первым слэш. Таким образом, другая строка bindkey позволяет вам справиться с этой ситуацией: вы нажимаете Ctrl-x
, а затем Space
, и косая черта не будет поглощена.
Это решение немного хак-иш, хотя может быть только какой-то параметр zsh для вашей проблемы, но у вас есть это в то же время.
Я предлагаю вам поиграть с этим кодом и посмотреть, что он делает. Откройте терминал и поместите эти строки в подсказку и посмотрите, что они делают. Вы можете испортить свою способность вводить ввод в этом конкретном запросе, но вы можете просто закрыть терминал и начать все: ничего не сохраняется. Также взгляните на zle documentation, плотный, хотя он иногда и есть.
Спасибо, я попробую его – milarepa