Загрузитесь с установочного носителя Windows XP и нажмите R на экране приветствия, чтобы войти в консоль восстановления. Затем используйте команду fixmbr
, чтобы перезаписать Grub2 стандартным кодом MBR Windows.
Я понял, что есть более простой (и более настраиваемый )способ сделать это:
zle -N backward-kill-space-word
backward-kill-space-word() {
zle -f kill
WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' zle.backward-kill-word
}
zle -N backward-kill-bash-word
backward-kill-bash-word() {
zle -f kill
WORDCHARS='' zle.backward-kill-word
}
bindkey '^W' backward-kill-space-word
bindkey '^[^H' backward-kill-bash-word
Кроме того, я выпустил подключаемый модуль под названием zsh-edit
, в котором эти привязки встроены в .
Это делает именно то, что вы хотите, независимо от того, что находится в $WORDCHARS
, и делает убитые слова доступными дляyank
:
autoload -Uz backward-kill-word-match
bindkey '^W' backward-kill-space-word
zle -N backward-kill-space-word backward-kill-word-match
zstyle :zle:backward-kill-space-word word-style space
bindkey '^[^H' backward-kill-bash-word
zle -N backward-kill-bash-word backward-kill-word-match
zstyle :zle:backward-kill-bash-word word-style bash
autoload -Uz backward-kill-word-match
загружает функцию backward-kill-word-match
. См.http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Widgetsдля получения дополнительной информации.
zle -N backward-kill-bash-word backward-kill-word-match
создает новый виджет с именем backward-kill-bash-word
, реализация которого будет обеспечиваться функцией backward-kill-word-match
. См.http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Builtinsдля получения дополнительной информации.
zstyle
— это общий механизм хранения предпочтений. Первый аргумент (в данном случае:zle:backward-kill-space-word
)— это «контекст», который сообщает, в каком пространстве имен их хранить. Это позволяет объявлять разные значения для одного и того же параметра в разных контекстах. Второй аргумент(word-style
)— это имя настройки. Третий аргумент — это значение параметра. См.http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fzutil-Moduleдля получения дополнительной информации.
Итак,
учитывая приведенный выше код,
при нажатии CtrlW или AltCtrlH ,
, затем
zle
вызывает backward-kill-word-match
. backward-kill-word-match
извлекает значение настройки word-style
для контекста :zle:<name of the invoked widget>
. backward-kill-word-match
назад удаляет "слово" с определением "слова" на основе значения, полученного из настройки word-style
. С помощью переменной WORDCHARS
можно установить специальные символы, которые считаются частью слова. Это влияет на то, как слова удаляются Ctrl + W
:
WORDCHARS='~!#$%^&*(){}[]<>?.+;-_/\|=@`'
Однако это также оказывает влияние на Ctrl + Alt + H
. Мы хотим, чтобы это поведение применялось только к Ctrl + W
. Но есть трюк, который мы можем сделать. Поясню:
Вы можете переназначить комбинации клавиш для различных функций (см.man zshzle
). И есть две функции, которые на самом деле ведут себя одинаково:
Вы также можете переопределить эти функции с помощью zle -N <func>
. Я не совсем уверен, как это работает, но вы получите представление, если прочитаете код, в любом случае, это помогает.
По умолчанию как Ctrl + W
, так и Ctrl + Alt + H
сопоставляются с backward-kill-word
. Таким образом, мы можем переопределить backward-delete-word
, а затем привязать его к Ctrl + W
:
# Make `Ctrl + W` behave like it does in Bash, deleting words separated by
# spaces. We do this by redefining the `backward-delete-word` function and bind
# that to `Ctrl + W`.
SPACE_WORDCHARS='~!#$%^&*(){}[]<>?.+;-_/\|=@`'
backward-delete-word() WORDCHARS=$SPACE_WORDCHARS zle.$WIDGET
zle -N backward-delete-word
bindkey "^W" backward-delete-word
Да, теперь Ctrl + W
удаляет слова большего размера, чем Ctrl + Alt + H
!
Редактировать:
К сожалению, сейчас я обнаруживаю, что этому подходу не хватает некоторых функций, когда вы удаляете слово, оно не загружается в буфер вставки (Ctrl + Y ). Пока не нашел решения..