bash: автодополнение (небольшое улучшение)

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
omiron
Сообщения: 33

Re: bash: автодополнение

Сообщение omiron »

Гы .. конечно незнаю в качестве безопасности при работе с sudo это нормально ... но хех дома я в .bashrc сделал так ... alias sudo='sudo bash'
тем самым при наборе каманды sudo после ответа на вапрос открывается bash под рутом ... и можно спакойно делать то что хотел :)
Debian3.1(Sarge)/FreeBSD5.4........
Спасибо сказали:
Аватара пользователя
alv
Бывший модератор
Сообщения: 7275
Статус: Пенсионер в законе
ОС: Cintu
Контактная информация:

Re: bash: автодополнение

Сообщение alv »

Несколько дополненная версия:
http://www.posix.ru/shell/bash_tab/
Спасибо сказали:
MaGIc laNTern
Сообщения: 537
Статус: 人です
ОС: Gentoo

Re: bash: автодополнение

Сообщение MaGIc laNTern »

А мне вот больше нравится когда выводит команды списком, а ты сам смотришь что тебе надо и дописываешь ещё пару букв. Благо печатаю Я быстро, по мнению многих даже очень, так что с этим проблем нет.
Спасибо сказали:
Аватара пользователя
new bee
Сообщения: 220
ОС: Arch, Ubuntu

Re: bash: автодополнение

Сообщение new bee »

drakon писал(а):
03.10.2005 13:54
Меня всегда напрягало, что после sudo не работает автодополнение при помощи [TAB]
Оказалось решается очень просто: достаточно раскоментировать вот эти строки в /etc/bash.bashrc

Код: Выделить всё

  # enable bash completion in interactive shells
  #if [ -f /etc/bash_completion ]; then
  #    . /etc/bash_completion
  #fi

Только для этого понадобится сам скрипт /etc/bash_completion, который лежит в одноименном пакете (или bash-completion)
Свободного можно покорить, нельзя исправить, ведь невозможно улучшить море или ветер.
Свобода подобна тайному обряду: захочешь улучшить - оскудеет, задумаешь подчинить - исчезнет...
Лао Цзы
Спасибо сказали:
jabx
Сообщения: 402
ОС: OpenSuSE 11.4 / Alt 6.0

Re: bash: автодополнение

Сообщение jabx »

sash-kan писал(а):
22.04.2005 22:11
добавить в /etc/inputrc или ~/.inputrc

set show-all-if-ambiguous On

замечательно

madskull писал(а):
03.10.2005 14:36
Сообщение от deadmoroz2
В /etc/inpurc добавь эти 2 строчки

"\e[A": history-search-backward
"\e[B": history-search-forward

полный RULEZZZ!!!
спс за науку.
Спасибо сказали:
Аватара пользователя
*Sasha*
Сообщения: 2519
Статус: Мимо шёл
ОС: Debian

Re: bash: автодополнение

Сообщение *Sasha* »

А можно сделать что-бы как в zsh и меню и команды по табу полностью?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: bash: автодополнение

Сообщение sash-kan »

*Sasha* писал(а):
14.01.2008 23:25
как в zsh и меню и команды по табу полностью?
видимо, чтобы Вас понять, надо быть специалистом по zsh. или на худой конец, хотя бы им пользоваться. или, уж совсем на худой конец, быть немножко телепатом.
увы, я, например, не первый, не второй и не третий.
нельзя ли расшифровать, чтобы вопрос дошел до подобных мне тормозов? ;)
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
*Sasha*
Сообщения: 2519
Статус: Мимо шёл
ОС: Debian

Re: bash: автодополнение

Сообщение *Sasha* »

sash-kan писал(а):
15.01.2008 23:44
видимо, чтобы Вас понять, надо быть специалистом по zsh. или на худой конец, хотя бы им пользоваться. или, уж совсем на худой конец, быть немножко телепатом

Да уж, сейчас сам прочитал, согласен, сложная фрмулировка :)
Короче нужет эфект как от TAB: menu-complete, но чтоб ещё и списак возможных вариантов был.
На примере выглядит так, допустим ввожу ro, нажимаю таб, получается

Код: Выделить всё

gentoo# ro
rootflags    rotatelogs   rotatelogs2  route

нажимаю ещё раз

Код: Выделить всё

gentoo# rootflags
rootflags    rotatelogs   rotatelogs2  route

и ещё раз

Код: Выделить всё

gentoo# rotatelogs2
rootflags    rotatelogs   rotatelogs2  route

и т.д.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: bash: автодополнение

Сообщение sash-kan »

в таком варианте — только одно из двух. или complete, или menu-complete.

вариации:
1. повесить (например) complete на другую кнопку. хотя, в принципе, более логично пользовать не complete + menu-complete, а menu-complete + possible-completions (по умолчанию назначено на M-?, что не очень удобно, можно назначить на какое-нибудь сочетание попроще).
2. подрихтовать readline под требуемую функциональность.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Atashidesu
Сообщения: 45
ОС: gentoo

Re: bash: автодополнение

Сообщение Atashidesu »

oberlicht писал(а):
07.10.2005 22:53
У меня не работает..
Жму Tab - сразу начинает перебирать варианты. Список выводит, только если дважды Esc нажать..
Slackware 10.1 Bash 3.00.15(2)

/etc/inputrc был из двух строк:

set show-all-if-ambiguous On
TAB: menu-complete

Что же делать ?


у меня тоже не работает :(
Спасибо сказали:
Аватара пользователя
MadDog
Бывший модератор
Сообщения: 2298
Статус: Добрый банщик
Контактная информация:

Re: bash: автодополнение

Сообщение MadDog »

*Sasha*
~/.zshrc

Код: Выделить всё

zstyle ':completion:*' menu yes select

перемещение с помощью стрелок, выбор по Enter.
MadDog's Blog
Внимательно читать: Как правильно задавать вопросы
No fate but what we make
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: bash: автодополнение

Сообщение sash-kan »

Atashidesu
вы хотите
*Sasha* писал(а):
16.01.2008 03:26
Короче нужет эфект как от TAB: menu-complete, но чтоб ещё и списак возможных вариантов был.
?
так прочитайте следующий пост. #39.

MadDog, это было год назад.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Atashidesu
Сообщения: 45
ОС: gentoo

Re: bash: автодополнение

Сообщение Atashidesu »

sash-kan , мне нужно, чтобы первое нажатие tab работало как TAB: complete , а последующие, как TAB: menu-complite.
добавил строчки
TAB: menu-complete
set show-all-if-ambiguous On
в .inputrc , результат - по tab сразу идет перебор вариантов.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: bash: автодополнение

Сообщение sash-kan »

Atashidesu
sash-kan писал(а):
16.01.2008 15:41
только одно из двух. или complete, или menu-complete

или назначайте эти действия на разные клавиши.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Flaming
Сообщения: 2579

Re: bash: автодополнение

Сообщение Flaming »

В Gentoo классная штуковина есть, если набираю пол-команды, которая раньше уже набиралась (есть в истории), то при нажатии page up, команда автодополняется. Например, обновлял раньше мир недавно, то есть emerge -uDN world, набираю emerge и page up, дальше команда сама дописывается.
А в arch этого почему-то нет, при нажатии page up я перехожу на самую первую команду в истории - неудобно. Как сделать тоже самое в арче?
Спасибо сказали:
Аватара пользователя
Atashidesu
Сообщения: 45
ОС: gentoo

Re: bash: автодополнение

Сообщение Atashidesu »

Flaming писал(а):
04.01.2009 18:50
В Gentoo классная штуковина есть, если набираю пол-команды, которая раньше уже набиралась (есть в истории), то при нажатии page up, команда автодополняется. Например, обновлял раньше мир недавно, то есть emerge -uDN world, набираю emerge и page up, дальше команда сама дописывается.
А в arch этого почему-то нет, при нажатии page up я перехожу на самую первую команду в истории - неудобно. Как сделать тоже самое в арче?

по

Код: Выделить всё

 !emerge

будет искаться в истории последняя команда на emerge
еще можно листать както

а чтоб по up листалось, в inputrc добавь

Код: Выделить всё

"\e[A": history-search-backward
"\e[B": history-search-forward
Спасибо сказали:
Flaming
Сообщения: 2579

Re: bash: автодополнение

Сообщение Flaming »

Atashidesu, в /etc я такой файл нашёл, /etc/inputrc
А как сделать для отдельного юзверя? Создать ~/.inputrc ?

Atashidesu, сделал так (добавив в ~/.inputrc - работает так) - после этого теперь команды листаются не по page up, down, а стрелками. :) В принципе, так тоже можно, но я другое имел ввиду.
Спасибо сказали:
Аватара пользователя
Atashidesu
Сообщения: 45
ОС: gentoo

Re: bash: автодополнение

Сообщение Atashidesu »

Flaming, ты тему то читал?
да, ~/.inputrc для отдельного юзера.
толькочто проверил, работает именно по стрелочкам

вот еще список команд для работы с историей:
  • !! - ссылается на предыдущую команду;
  • !n - ссылается на команду под номером n;
  • !-n - ссылается на команду по номером „текущая минус n”;
  • !string - ссылается на команду, начинающуюся с string;
  • !?string[?] - ссылается на команду, содержащую строку string;
  • ^string1^string2[^] - „быстрая замена”, заменяет первое вхождение строки string1 в предыдущей команде, на
    string2, после чего выполняет полученную команду.
  • !!:p, !string:p , etc. - ссылается без выполнения (печатает команду);


основные операторы обращения к различным частям предыдущей команды:
  • $ - последний аргумент командной строки;
  • ^ - первый аргумент командной строки;
  • 0 - нулевое слово, другими словами имя команды;
  • N - N-ый аргумент командной строки;
  • x-y - аргументы с x по у командной строки;
  • -y - сокращенное обращение к 0-y;
  • * - все аргументы, синоним 1-$;
  • x* - синоним x-$, другими словами аргументы с номера x до конца строки;
  • x- - синоним x*, но не включает последний аргумент.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: bash: автодополнение

Сообщение sash-kan »

Atashidesu
"\e[A" — это стрелка вверх, "\e[B" — стрелка вниз.
а pageup/pagedown — это (скорее всего): "\e[5~" и "\e[6~",
определить точнее для своей системы можно, нажав ctrl-v и искомую клавишу.
например, нажимаю ctrl-v, затем pageup. получаю:
^[[5~
грубо говоря, заменяю «^[» на «\e» — и получаю искомый код.
Flaming
в некоторых дистрибутивах уже есть нужные описания в /etc/inputrc, закомментированные. надо раскомментировать нужные, и закомментировать ненужные.
если таких строк нет — можно смело дописать.
или создать файла ~/.inputrc. написанное в нём будет иметь более высокий приоритет перед общесистемным /etc/inputrc.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Flaming
Сообщения: 2579

Re: bash: автодополнение

Сообщение Flaming »

sash-kan писал(а):
04.01.2009 21:27
определить точнее для своей системы можно, нажав ctrl-v и искомую клавишу.

Спасибо, классная штука, а я и не знал. :) Буду знать теперь.
Спасибо сказали:
Аватара пользователя
Bluetooth
Сообщения: 4395
Статус: Блюзовый
ОС: Debian Squeeze amd64

Re: bash: автодополнение

Сообщение Bluetooth »

Добавил в файл ~/.inputrc следующие строки:

Код: Выделить всё

set show-all-if-ambiguous on

TAB: menu-complete
ESC: possible-completions


"\e[A": history-search-backward
"\e[B": history-search-forward


Вот только по варианты дополнения появляются по двойному нажанию ESC, а мне хотлеось бы сразу. никто не знает, как это сделать?

и еще, когда я добавляю эти строки:

Код: Выделить всё

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ]; then
 . /etc/bash_completion
fi

у меня совершенно перестает вводиться точка(символ "."). я что-то неправильно делаю?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: bash: автодополнение

Сообщение sash-kan »

Bluetooth писал(а):
04.01.2009 23:12
я что-то неправильно делаю?
из описанного — ничего.
для начала определите, где «затык». переименуйте ~/.inputrc (а для уверенности, и /etc/inputrc) и посмотрите, как влияет вызов /etc/bash_completion на возможность ввода точки.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Ответить