инструмент для таких движений - очень универсальный, но за счет некоторых дополнительных нажатий клавиш.
Предположим, это связано с CTRL+Y
Затем вы нажимаете CTRL+Y
, отпускаете и нажимаете ;
и отпустить. тогда цель прыжка высвечивает все случаи ;
в командной строке и маркирует их с помощью г:
# this; is; a; nonsense; command; line
становится
Теперь просто нажмите a, b, c, ..., чтобы переместить курсор в соответствующую позицию.
функция оболочки
Однако также легко написать конкретную функцию, которая делает то, что вы хотите. Авторы этого блога собирают кредиты на оригинальную идею, я адаптировал код под ваши требования:
function backward-shell-block() # original code from http://www.longhaired.org/blogg/individuell/2007-04-29-zsh
{ # adapted by mpy at https://superuser.com/a/1407146/195224
local blocks block colons commandline
commandline=${LBUFFER//[\[\]\/|;_]/;} # replace al disired block separators with ;
blocks=("${(s:;:)commandline/\~/_}") # split at ; and replace ~ to prevent FILENAME EXPANSION messing things up
block=$blocks[-1]
colons=-1
while [[ $commandline[$colons] == ";" ]]; do
(( colons-- ))
done
(( CURSOR -= $#block - $colons ))
}
function forward-shell-block()
{
local blocks block colons commandline
commandline=${RBUFFER//[\[\]\/|;_]/;}
blocks=("${(s:;:)commandline/\~/_}")
if [[ $commandline[1] == ";" ]]; then
block=$blocks[2]
else
block=$blocks[1]
fi
colons=1
while [[ $commandline[$colons] == ";" ]]; do
(( colons++ ))
done
(( CURSOR += $#block + $colons -1 ))
}
zle -N backward-shell-block
zle -N forward-shell-block
bindkey '^W' backward-shell-block
bindkey '^E' forward-shell-block
Здесь я связал левую и правую функции перехода с CTRL+W
и CTRL+E
, соответственно.