Я нахожу, что нажатия клавиш удара понимания приводят к более эффективному окружению, и что многие из них являются прямыми от emacs, разъясняет их использование (т.е. что meta-XXX
версия старшего брата ctrl-XXX
управляйте обычно).
"meta" ключ обычно является ключом "высокого звука", но может также быть "esc" ключом. например. meta-f
может быть получен с также alt-f
или esc f
.
Чтобы отображения клавиши Alt работали, Вам, вероятно, придется сбросить "ключи доступа к меню" или его эквивалент в консольных опциях. В основном, если Вы нажимаете alt-f и получаете подсказку меню файла, выключаете меню доступа клавиши Alt.
ctrl-a / ctrl-e : move to start / end of line
основы Вы не можете обойтись без
ctrl-f, meta-f : forward char/word
нажимающий alt-f переходит, Вы передаете "1 слово", которое на командной строке является в значительной степени командой или аргументом
ctrl-b, meta-b : backwards char/word
то же как alt-f, но назад переходить назад через командную строку
ctrl-d, meta-d : delete char/word
нажимающий alt-d удалит (к концу) текущее слово под курсором. намного быстрее затем содержание удаляет вниз для 30 secs. Полезный, когда Вы - вкладка, завершающаяся посреди чего-то, и хотите передать, удаляют в конец слова.
ctrl-k : kill line
удаляет в конец строки
ctrl-u : undo
например, вводя пароль, и Вы знаете, что имеете его неправильно где-нибудь, вместо того, чтобы поразить клавишу Backspace 20 раз, просто поражаете ctrl-u. также очищает текущую командную строку.
meta-# : insert comment
здорово для хранения Вашей командной строки Вы растете как комментарий прежде, чем выполнить его, если необходимо сделать что-то еще сначала. это войдет в Вашу историю команд, но не работать.
ctrl-r : reverse search
поиск назад через историю оболочки (повторенный ctrl-r для следующего соответствия)
ctrl-g : abort
если Вы находитесь в середине ctrl-r
и хочу просто возвратиться туда, где Вы вводили, просто прерываете свой поиск с ctrl-g
meta-space / ctrl-x ctrl-x : set mark and jump to mark
если необходимо быстро перейти к позиции в командной строке, сначала установите метку, то перейдите назад к ней с ctrl-x ctrl-x
. Обратите внимание, что Вам, вероятно, придется использовать esc-space
установить метку как alt-space
часто связывается с переводом в нерабочее состояние консольного меню.
ctrl-] <char> : quick jump to <char>
переходы передают символу, введенному после ctrl-]
на командной строке. Старший брат Meta-ctrl-] <char>
переходы назад.
Путем я раньше делал, это должно создать каталог, который содержит символьные ссылки на каталоги, Вы хотите ярлыки, делают и добавляют что каталог к Вашему CDPATH. CDPATH управляет где cd
будет искать, когда Вы переключаете каталоги, поэтому если тот каталог символьных ссылок находится в Вашем CDPATH, Вы можете cd
к любому из symlinked каталогов немедленно:
mkdir ~/symlinks
ln -s /usr/bin ~/symlinks/b
export CDPATH=~/symlinks
cd b # Switches to /usr/bin
Оборотная сторона, конечно - это, не будет работать, если будет каталог в Вашем текущем каталоге, названном "b" - который имеет приоритет по CDPATH
Мне обычно не нравятся ответы, в которых говорится "сначала, что необходимо переключить оболочки", но эта точная функция существует в ZSH, если Вы готовы использовать это вместо этого; это назвало названные каталоги. Вы экспортируете переменную foo
, и когда Вы обращаетесь к ~foo
это решает к значению $foo
. Это особенно удобно, потому что это работает в командах, кроме того, cd
:
echo hi > /tmp/test
export t=/tmp
cat ~t/test # Outputs "hi"
Вы могли записать функцию обертки для cd
и назовите это "CD" (в конечном счете, функция будет звонить builtin cd
- использование builtin
ключевое слово). Вы могли использовать символ префикса, что Bash не подробно остановится на командной строке, прежде чем Ваша функция будет видеть его, и это вряд ли появится как начальный символ в Ваших именах каталогов, возможно ":". Вы хотели бы сделать это более устойчивым, но здесь являетесь простой схемой:
# format: [semicolon] shortcut colon destination [semicolon] ...
export CDDATA='foo:/path/to/foo;bar:/path/to/bar;baz:/path/to/baz'
cd () {
local dest=$1
if [[ $dest == :* ]]
then
[[ $CDDATA =~ (^|;)${dest:1}:([^;]*)(;|$) ]]
dest=${BASH_REMATCH[2]}
fi
if [[ -z $dest ]]
then
cd
else
builtin cd "$dest"
fi
}
cd :bar # pwd is now /path/to/bar
с ударом:
~foo
резервируется для корневого каталога пользовательского нечто. Я не рекомендовал бы создать пользователей только для того удобства.
Можно сделать жизнь легче (или тяжелее) при изменении каталогов путем установки CDPATH
переменная среды (ищут его в bash(1)
).
Кроме этого, единственный способ думать состоял бы в том, чтобы установить переменные среды для тех каталогов, которые Вы хотите сократить.
$ FOODIR=/var/lib/misc
$ cp ~/bar.txt $FOODIR
Путь создал бы псевдоним для CD, который заменяет ~c
к требуемому пути. Или просто используйте zsh ;)
Для изменения каталогов Вы могли использовать wcd: Везде, где Каталог Изменения
С этим это будет похоже wcd plugin_root
.
Я имею ниже функции, которая создаст псевдоним на лету,
s () {
if [[ "x$1" != "x" ]]
then
alias $1="cd $PWD;pwd"
echo "alias $1=\"cd $PWD;pwd\""
else
echo "Usage: s[s] <directory bookmark name>"
return 1
fi
}
Когда я хочу отметить каталог, я просто ввожу s dirName
. Это создает псевдоним как alias dirName="cd /my/current/directory/;pwd"
. таким образом, я могу возвратиться к этому каталогу, просто введя dirName
. У меня есть версия, которая сохраняет его в bash_aliases также. Это работает в любой оболочке.
Бэш-переменные могут быть использованы для создания системы закладок. Переменные будут работать с любой командой, а закладка bash будет завершать имя переменной. В более новых версиях bash, если к имени переменной добавляется a /, то путь, который содержит переменная, также может быть заполнен с помощью закладок.
mydir=/home/chris/dir
ls $my # Tab completion works on variable name.
ls $mydir/ # Tab completion is equivalent to that with ls /home/chris/dir/
# (doesn't work in older versions of bash).
Для персистентности объявления переменных могут храниться в файле, источником которого является .bashrc. Так как этот файл является bash-скриптом, он может содержать декларации, которые ссылаются на другие переменные, такие как aur="${HOME}/AUR"
, или которые запускаются только на определенных хостах , если [[ $HOSTNAME == foo ]]; тогда bar=baz; fi
, что полезно, если вы повторно используете конфигурационные файлы на нескольких хостах и у нескольких пользователей.
Следующая функция bash (для добавления в .bashrc, или исходников) позволяет добавлять и удалять закладки из файла закладок. Она достаточно новая и не гарантирует отсутствие ошибок.
bookmark_file=~/.bookmarks
source "$bookmark_file"
bm() {
usage='Usage:
bm add <name> <path> Create a bookmark for path.
bm add <name> Create a bookmark for the current directory.
bm update Source the bookmark file.
bm remove <name> Remove a bookmark'
case $1 in
add)
local path
if [[ $# -eq 2 ]]; then
path=.
elif [[ $# -eq 3 ]]; then
if [[ -e $3 ]]; then
path="$3"
else
echo "bm: ${3}: No such file or directory."
return 1
fi
else
echo "$usage"
return 1
fi
if declare | grep "^${2}=" > /dev/null; then
echo "bm: The name $2 is in use."
return 1
fi
path=$(readlink -f "$path")
echo ${2}=\""$path"\" >> "$bookmark_file"
eval ${2}=\""$path"\"
return 0
;;
update)
if [[ $# -eq 1 ]]; then
source "$bookmark_file"
return 0
fi
;;
remove)
if [[ $# -eq 2 ]]; then
unset $2
local contents=$(grep -v "^${2}=" "$bookmark_file")
echo "$contents" > "${bookmark_file}.tmp"
rm -f "$bookmark_file"
mv "${bookmark_file}.tmp" "$bookmark_file"
return 0
fi
;;
esac
echo "$usage"
return 1
}