2013-06-25 6 views
0

В настоящее время я использую zsh, и каждый раз, когда я использую табуляцию для каталогов, она добавляет косую черту в конце. Это создает проблему при использовании команд, таких как rsync, которые различают аргументы каталога, которые имеют прямую косую черту. Поэтому каждый раз, когда я использую табуляцию, мне нужно вернуться и удалить косую черту.Заполнение вкладки Zsh добавляет косую черту для каталогов, как этого избежать?

ответ

-1

Не специалист по трюкам и советы ЗШ, но вы можете сделать это в вашем файле .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, плотный, хотя он иногда и есть.

+1

Спасибо, я попробую его – milarepa