LINUX.ORG.RU

63
Всего сообщений: 176

ZSH и autocomplete

Всем здравствуйте.

Вопрос к опытным юзерам zsh. 1)Сейчас, при добивании TAB-ом получается так:

 ~$ git add                                                                                                                                                                                     
add                -- add file contents to index
am                 -- apply patches from a mailbox
apply              -- apply patch to files and/or to index
archimport         -- import an Arch repository into git
archive            -- create archive of files from named tree
...

Можно ли поменять такое поведение на что-то около:

 ~$ git add                                                                                                                                                                                     
add  am  apply  archimport  archive ...
...
т.е. без описания?

2)При вводе команды при помощи плагина «zsh-autosuggestions» выводится недостающая часть команды на основе истории. Например, ввожу

«sc»

получаю дополнение вида

«screen -x vpn»

при нажатии стрелки вправо перескакиваю в конец фразы

«screen -x vpn^»

Можно ли изменить поведение работы и при нажатии стрелки перемещаться по строке «пословно», т.е. примерно так:

"screen^ -x vpn"
"screen -x^ vpn"
"screen -x vpn^"

Всем заранее спасибо.

 ,

balzi ()

Zsh

Как вы произносите «zsh»?

 

scanner ()

Дополнение в zsh по Tab

Подскажите, пожалуйста, как получить значение предыдущей опции команды в zsh? Пишу свой файл автокомплита. Например есть команда:

tool -o1 y -o2 ...

Хочу, чтобы в зависимости от того, какой аргумент у опции -o1 выводить разные подсказки для -o2. Документация очень объемная по zsh, поиском не нашел, может кто сталкивался и знает.

 

NordeN ()

ohmyzsh background color

Как сделать нормальный background color в ohmyzsh?

картинка

Возникает, когда табаю команду вроде cd ./ на внешнем диске.

При смене некоторые темы давали другой вариант - красный на сером, тоже нечитаемо.

Перепробовал половину тем.

 , , ,

stratohamster ()

Автодополнение для zsh

Не могу разобраться в их документации, подскажите знающие люди. Пишу файл автодополнения для hashcat, вот отрывок из кода:

#compdef hashcat

_hashcat_arglist=(
    ...
    '-1[User-defined charset ?1]:select charset:->charset'
    ...
)

_charsets=(
	'?l[abcdefghijklmnopqrstuvwxyz]'
	'?u[ABCDEFGHIJKLMNOPQRSTUVWXYZ]'
	'?d[0123456789]'
	'?h[0123456789abcdef]'
	'?H[0123456789ABCDEF]'
	'?s[Punctuation marks]'
	'?a[?l?u?d?s]'
	'?b[0x00 - 0xff]'
)

_hashcat() {
	_arguments $_hashcat_arglist
	case "$state" in
                ...
		charset)
			?????
			;;
		...
	esac
}

case "$service" in
	hashcat)
		_hashcat "$@" && return 0
		;;
esac

Возможно ли использовать аргументы из _charsets несколько раз? Например hashcat -1 ?l?l?u. Если возможно, то что я должен написать вместо ?????. Перепробовал уже всевозможные опции _values, пробовал и _message использовать чтобы просто вывести подсказку. Ничего не работает как нужно.

 ,

NordeN ()

Автодополнене zsh работает не так, как ожидается

Помогите, пожалуйста. Пишу (только начал) свой файл автодополнения для утилиты. Расположение файла: /usr/share/zsh/functions/Completion/Unix/_ffuf Содержимое файла:

#compdef ffuf

_ffuf_arglist=(
	'-u[Target URL]'
	'-w[Wordlist file path and (optional) keyword separated by colon in format wordlist:KEYWORD]:->files'
	'-mode[Multi-wordlist operation mode. Available modes: clusterbomb, pitchfork (default: clusterbomb)]:->modes'
	'-H[HTTP header in format"Name: Value", separated by colon. Multiple -H flags are accepted.]'
        '-c[Colorize output. (default: false)]'
)

_ffuf_multidict=(
	'pitchfork'
	'clusterbomb'
)

_ffuf() {
    _arguments $_ffuf_arglist
    case "$state" in
        files)
            _files
            ;;
        modes)
	    _values 'modes' $_ffuf_multidict
	    ;;
    esac
}

case "$service" in
    ffuf)
        _ffuf "$@" && return 0
        ;;
esac

Zsh выдает подсказки ко всему, кроме опции -c. Почему он ее в упор не видит?

 ,

NordeN ()

История в zsh не разделяется между терминалами

В конфиге прописано

setopt SHARE_HISTORY
setopt EXTENDED_HISTORY
setopt INC_APPEND_HISTORY

Если после открытия второй вкладки терминала в первой было что-то введено, то оно не появляется в истории второго терминала, что я делаю не так?

 

NordeN ()

Возможно ли вынести дополнение опций zsh в отдельный буфер?

Если например написать tmux и прожать два раза Tab, то в терминал выведется дополнение опций, если выбрать опцию, то все норм. Но если стереть то, что введено в приглашении к вводу, то вывод опций останется и засорит буфер терминала. Неудобно если нужно смотреть что-то в начале, так как пролистывать довольно долго. Возможно ли вынести подсказки по опциям в zsh в отдельный буфер как, например, работает вставка команд из истории в hstr или fzf.

 ,

NordeN ()

Поиск по истори команд командного интерпретатора

Может кто-то максимально подробно рассказать как оно работает? Или поделиться ссылкой на соответствующее объяснение. Мой интерпретатор - zsh. Очистил историю, ввел следующее:

echo 111
echo 1
echo 11
echo 1111

Прожимаю CTRL + R, отматываюсь повторными нажатиями до первой команды, вроде норм. Оно, как я понял, еще сохраняет позицию, на которой остановился поиск?

Допустим я дошел до echo 11, нажал CTRL + E, но команду не выполнил, опять нажал CTRL + R, и тут начинаю мотаться либо CTRL + R, либо CTRL + S и мне либо не находит самую первую команду из истории, либо самую последнюю. И еще, backspace как-то криво работает и не удаляет символы, а возвращается на предыдущий match.

UPD Если прожать Enter, а потом повторить поиск, то ошибка пропадает.

 ,

NordeN ()

zsh зависает при открытии (arch)

Доброго времени суток.

Сегодня обновил arch, ничто не предвещало.

У моего юзера оболочка по-умолчанию установена zsh. От момента открытия любого эмулятора терминала или tty и до появления PS1 и возможности работы в оболочке проходит очень длительное время, причем не константное. С bash такой проблемы не возникает.

.zshrc очень давно не трогал, никаких дополнительных плагинов на него не ставил - по сути пользуюсь дефолтом.

Вопрос: какие логи почитать?

 , ,

bytecode ()

manjaro + zsh + mc = prompt порой пропадает

Я нашел баг по этому поводу и даже с фиксом:

Но это все старое.

C пустым .zshrc все работает.

cocaine% set | grep precmd
precmd_functions=( _mc_precmd )

C тем, что в манжаре:

~ >>> echo $precmd_functions 
_zsh_highlight_main__precmd_hook _zsh_autosuggest_start _mc_precmd

Я попробовал:

# mc fucks up prompt sometimes for some reason
if ps $PPID | grep mc; then
    #preexec_function="" # does not work
    #precmd_functions="" # does not work
    #PS1=$PROMPT # does not work
    #PS1=$RPROMPT # does not work
    #PS1="%{$fg[red]%}" # does not work
    #PS1="zhopa" # does not work
fi

Не помогает.

Меня больше всего удивляет, что PS1="zhopa" не помогает (zhopa тоже периодически пропадает стоит раз 10 написать ls->enter). Какой бы костыль тут вставить?

 , , ,

dissident ()

ZSH + кэширование скриптов (у меня белая горячка?)

Я совсем уже допился или ZSH кэширует содержимое скриптов? Дебажа быдлоскрипт на баше (какой дьявол дернул меня снова взять эту мерзость в рот, на каком-нибудь питоне или прочей гадюке уже давно бы набыдлокодил и спал), меняя этот скрипт (например добавляя «set -x» и убирая его) я заметил, что мне приходится открывать новый терминал, чтобы изменения возымели действия.

У меня галлюцинации от недосыпа или в каждой галлюцинации есть доля правдивого маразма?

 

dissident ()

Глобальные переменные

Возможно ли как-то определить где в последний раз была переопределена глобальная переменная? Стоит zsh, никак не могу заставить систему использовать по умолчанию PAGER most вместо less, в .zshrc явно прописан most.

Просмотрел все возможные места в /etc, /root и /home, ничего не нашел. Ну, кроме банального grepa может есть какие варианты?

 ,

NordeN ()

Скрипт для скачивания случайной обоины с reddit

Наваял такой скрипт. Интересно мнение о том, что я сделал не так и как бы можно было отрефакторить код.

 , ,

tz4678 ()

zsh, хочется странного

Вот какую ни будь команду или опцию, которая при включении проверяла бы код возврата каждой введённой команды, и выполняла заданный скрипт в случае если он отличен от нуля, например, подавала звуковое оповещение. Но не так что бы прописывать это вручную в каждом скрипте, а где-то прямо в опциях шелла. Что то вроде:

set beep on
/* запускаем какой ни будь длинный скрипт, идём пить чай */
set beep off
/* работаем дальше без звуков */
Например, для операций копирования/архивирования больших объёмов, обработки данных и пр.

 , ,

thunar ()

Как убрать крестик в zsh?

Решил попробовать zsh, и всем понравился кроме крестика, который появляется во всех строках после неудачной или отмененной команды, вплоть до успешной. Можно ли как то убрать этот крестик или, что предпочтительнее, чтобы он отображался только в первой строке? Побегал по форумам, но не нашел похожих сообщений.

 

mamol27 ()

Дополнение ZSH

Подскажите, кто пользуется zsh и может знает, как можно убрать директории ./ и ../ из меню автодополнения zsh, не убирая из меню файлы и директории, начинающиеся с .

 

NordeN ()

Алиасы в ZSH

Кто пользуется ZSH, подскажите почему может не работать алиас, прописанный в .zshrc в хомяке? Конкретно не работает следующий алиас, alias la='ls -a', он выводит листовый вид, как команда ls -la, у меня стоит oh-my-zsh если что. Может в каком-то плагине оно переопределяется? Grepом ничего не нашел

 , ,

NordeN ()

автозамена(?) в sed

Пытаюсь удалить всё, кроме $var, по счёту, строки:

dumbuser@pleasehelpme$ var=4; echo -e "s1\ns2\ns3\ns4\ns5\ns6\ns7" | sed "${var}!d"
var=4; echo -e "1\n2\n3\n4\n5\n6\n7" | sed "${var}du -h"
sed: -e выражение #1, символ 3: лишние символы после команды
Экранировать '${var}!d' не могу - не будет читать переменную.

В zsh ненастроенном тоже не пашет:

dumbuser@pleasehelpme$ var=4; echo -e "s1\ns2\ns3\ns4\ns5\ns6\ns7" | sed "${var}!d"
zsh: event not found: d

ЧЯДНТ?

Дополнено: Хм. в sh всё работает:

sh-5.0$ var=4; echo -e "s1\ns2\ns3\ns4\ns5\ns6\ns7" | sed "${var}!d"
s4

 , , ,

basarga ()

strip zsh

Как, наверное, многим уже известно со следующей версией macos по умолчанию будет zsh вместо bash.

Но… оно мне не нравится. Одновременно я предпочитаю умолчальные решения вместо тяжёлой кустомизации, т.ч. придётся смириться с изменением.

Посему мну в поиске .zshrc который уберёт все эти свистелки и перделки и вернёт новый умолчальный шел в более-менее вменяемое состояние.

Мне не нужен автокомплит, всякие подсказки, раскраски в PS1 и другие погремушки. (Подсказка git пожалуюй единственное исключение)

Может кто уже заморачивался этим и может поделиться? Самостоятельный поиск пока ничего особого не дал, а резбераться с этим монстриком кустомизатии и плагино-дрочества желания особого тоже нет.

Надо просто выключить всё.

Вот, что у меня пока есть:

#!/bin/zsh
unsetopt ALWAYS_LAST_PROMPT
source ~/bin/git-prompt.sh
precmd () { __git_ps1 "%1~" " %# " " (%s)" }

 , ,

beastie ()