I didn't see Ctrl-r, but I've found that to be the most insanely useful shortcut.
Ctrl-r = reverse history search. Type a partial command after Ctrl-r and it'll find the most recent executed command with that substring in it.
Press Ctrl-r again, jump to the next oldest command containing your substring. Did you accidentally press too many Ctrl-r? Press backspace to move forward in history.
Cool tip, did not know that, though I prefer to put long reusable commands in script files, in part so I can comment them to better remember what everything is doing.
Since I've switched to zshell, I've found that I haven't used Ctrl-r much at all. The intelligent history feature does it for me. For example:
If earlier I had a long command like `mvn clean test && mvn deploy -P release`, I can just type `mvn v` and press up on the arrows. zsh will present only history entries that start with what I've typed. Insanely useful!
IMO the aliases for git should be in ~/.gitconfig instead. I have a bunch of these, like:
[alias]
br = branch
co = checkout
ci = commit -v
sci = svn dcommit --interactive
cp = cherry-pick
l = log --pretty=oneline --abbrev-commit
l3 = log --pretty=oneline --abbrev-commit -n3
lm = log --pretty=oneline --abbrev-commit master..
rc = rebase --continue
st = status -sb
squash = !git rebase -i --autosquash $(git merge-base master HEAD)
Also, I prefer to set aliases in my ~/.functions instead of in ~/.bash_profile or ~/.bashrc. I find that this makes it easier to move the .functions file from one machine to another, especially on a lab/test machine with a shared account where I shouldn't be modifying things in the shared ~/.bashrc. To make this work, you can add this to your ~/.bashrc or ~/.bash_profile:
if [ -f ~/.functions ]; then . ~/.functions; fi
This will source your .functions file if it exists when your .bashrc is run.
A tweak to the "editbash" suggested alias will make it so that you don't have to reopen your terminal. My equivalent alias is "vif", for "vi .functions":
alias vif='vi ~/.functions; . ~/.functions'
Note that the second command (after the semicolon) sources the modified .functions file.
Lastly: brevity is king. I love 'alias psgrep="ps aux | grep"', since I use it several times a day, but to "level up your shell game", keep it short. My alias for this command is "psg". The other alias that I use all the time is "d" -- "alias d='ls -lFh --color --group-directories -v'".
Yes, I have written some of those too. Just make sure the script is in your PATH. I drop them in ~/bin/ -- which reminds me of another thing you should have in your ~/.bash_profile, if it isn't already in the template provided by your system:
Why exactly do you love 'alias psgrep="ps aux | grep"' ? What does it get you that pgrep doesn't (or, if you need more information, 'ps u `pgrep <name>`')?
My favorite shell trick (not in the link) is this: ~-
Tilde-hyphen expands to the previous directory you were in, and of course "cd -" returns you to your previous directory, so I put them together all the time.
Here's an example workflow (with a fake PS1):
mac:/Users/me/Projects/my_new_app$ cd ~/.pow
mac:/Users/me/.pow$ ln -s ~- .
mac:/Users/me/.pow$ cd -
mac:/Users/me/Projects/my_new_app$
Now I can continue working on my app.
<disclaimer>
That's bit of a contrived example above. Here's a more
realistic way to do a symlink for pow:
It's probably worth mentioning that all the delete functions he points out(all of them for that matter, ctrl-k, etc) are actually cut's, so you can paste them back as well.
I find Ctrl-u especially useful when I'm halfway through with a command, then I realize I wanted to do something else before executing said command, so I cut it- then paste it back when I need it.
* Ctrl + y to paste anything back
$ aaa ^U
# now "aaa" is the only thing in the kill ring
$ bbb ^U
# now kill ring is ["aaa", "bbb"]
$ ccc ^U
# now kill ring is ["aaa", "bbb", "ccc"]
$ ^Y
$ ccc
# alt+y cycles through the kill ring
$ bbb Alt+Y
$ aaa Alt+Y
$ ccc Alt+Y
$ bbb
etc. This likely feels completely natural if you're an emacs user. I don't know what the equivalent vi thing is.
Interestingly, relatedly, a lot of the emacs style keybindings (ctrl-a, ctrl-e, ctrl-k, etc) are system-wide in OSX. I prefer vim as my daily editor, but it is often useful. You can also make the bindings even more emacsy if you want.
instead of "ls -1" you could use any other command that returns a list
The "du -hs ." will only return the size of the current directory, but that was also an example. You could use any other command that you wanted to perform over each item in the list returned by the first command.
Not sure if this is clear enough, please let me know.
I prefer to use inputrc instead of aliases. Put the following into your .inputrc
"\C-gs": "git status -sb "
Then, for example, after pressing Ctrl-g, s "git status -sb " will appear in your prompt. Much more readable than lots of two or three letter aliases. You can see the complete list of my shortcuts on my GitHub - https://github.com/grn/dotfiles/blob/master/inputrc
Control-Left and Right switch workspaces for me. A giant pain in the ass, because the normal word-jump shortcut, Option-Left/Right, just drops a [C/[D into the shell on iTerm. The stupid thing is, if I shell into an Ubuntu machine, it works fine.
You can probably set that up in .inputrc. Pressing Ctrl-V in a terminal before pressing your ctrl+left or ctrl+right arrow will type the initial escape character literally so you can see what the key sequence is (e.g. something like \e[1;5D).
Alternatively, you could change your workspace bindings to Control+[some other modifier].
I like the commands, especially the ssh one, which I didn't know before and will certainly use in the future.
I also enjoyed the format of the article. A whole dev team each contributing their own piece to a blog post provides a lot of different voices and styles in a concise way.
Ctrl-r = reverse history search. Type a partial command after Ctrl-r and it'll find the most recent executed command with that substring in it.
Press Ctrl-r again, jump to the next oldest command containing your substring. Did you accidentally press too many Ctrl-r? Press backspace to move forward in history.