Need help?
<- Back

Comments (79)

  • alberto-m
    One thing I find life-changing is to remap the up arrow so that it does not iterates through all commands, but only those starting with the characters I have already written. So e.g. I can type `tar -`, then the up arrow, and get the tar parameters that worked last time.In zsh this is configured with bindkey "^[OA" up-line-or-beginning-search # Up bindkey "^[OB" down-line-or-beginning-search # Down
  • tkocmathla
    I love this, from a comment on the article: He had in his path a script called `\#` that he used to comment out pipe elements like `mycmd1 | \# mycmd2 | mycmd3`. This was how the script was written: ``` #!/bin/sh cat ```
  • ahmedfromtunis
    Using the terminal becomes much more cozy and comfortable after I activate vim-mode.A mistake 3 words earlier? No problem: <esc>3bcw and I'm good to go.Want to delete the whole thing? Even easier: <esc>ccI can even use <esc>v to open the command inside a fully-fledged (neo)vim instance for more complex rework.If you use (neo)vim already, this is the best way to go as there are no new shortcuts to learn and memorize.
  • zahlman
    Not a fan of the LLM-flavoured headings, and the tips seem like a real mixed bag (and it'd be nice to give credit specifically to the readline library where appropriate as opposed to the shell), but there are definitely a few things in here I'll have to play around with.One thing I dislike about brace expansions is that they don't play nicely with tab completion. I'd rather have easy ways to e.g. duplicate the last token (including escaped/quoted spaces), and delete a filename suffix. And, while I'm on that topic, expand variables and `~` immediately (instead of after pressing enter).
  • fellerts
    CTRL + W usually deletes everything until the previous whitespace, so it would delete the whole '/var/log/nginx/' string in OP's example. Alt + backspace usually deletes until it encounters a non-alphanumeric character.Be careful working CTRL + W into muscle memory though, I've lost count of how many browser tabs I've closed by accident...
  • 0xcb0
    I've been using a lot of key combinations and I wasn't aware of these two, and I really think these are awesome additions to handling the console. Thank you for showing me. I've only been using it for 22 years, but I haven't come across these :D`CTRL + U and CTRL + K CTRL + W`What I like about these key combinations is that they are kind of universal. A lot of programs on Linux and Mac support all these key combinations out of the box. And that's like a game changer in productivity, especially jumping to the start or the end of the line or jumping forward and backward per word is making working only with the keyboard so much more nice. And in editors together so AVY, you can even get a faster flow of jumping around.
  • elric
    Regarding history: I have a function in my ZSH config which excludes certain things from the history. Especially things that can break stuff when my sausage fingers CTRL-R the wrong thingSomething like this: # Prevent certain strings from appearing in the history # Anything starting with a leading space is ignored # Anything containing "--force" or "whatever" is ignored function zshaddhistory() { emulate -L zsh if ! [[ "$1" =~ "(^ |--force|whatever)" ]] ; then print -sr -- "${1%%$'\n'}" fc -p else return 1 fi }
  • hikarudo
    One trick I use all the time:You're typing a long command, then before running it you remember you have to do some stuff first. Instead of Ctrl-C to cancel it, you push it to history in a disabled form.Prepend the line with # to comment it, run the commented line so it gets added to history, do whatever it is you remembered, then up arrow to retrieve the first command.$ long_command<Home, #>$ #long_command<Enter>$ stuff_1 $ stuff_2<Up arrow a few times>$ #long_command<home, del>$ long_command
  • talkin
    > cd -: The classic channel-flipper. Perfect for toggling back and forth.And not only cd. Gotta love 'git checkout -'
  • voidUpdate
    With ctrl+r, if you press it twice, it will autofill the search with whatever you last searched for. pressing it more will go back through the history. Been using that a lot recently when doing docker stuff. ctrl+r, type the container name, keep going until I get the compose build command. ctrl+r, ctrl+r, repeat until the log command. Then I can just mash ctrl+r to get the build and log commands. Ctrl+r is your friend. ctrl+r
  • amelius
    What confuses me is that Ctrl+Y "yank" means the opposite of what it means in Vim. Certainly does not help with keeping my sanity.
  • fzeindl
    My header on top of every script #!/usr/bin/env bash set -eEuo pipefail # shellcheck disable=SC2034 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #######################################################
  • anon
    undefined
  • egorfine
    I'm using bash for over 30 years and I still find new things. Nice.
  • chasil
    A much larger base for ksh (as a pdksh descendent) is Android. OpenBSD is a tiny community in comparison, although Android has acquired code directly from OpenBSD, notably the C library.The vi editing mode is always present in ksh, but is optional in dash. If present, the POSIX standard requires that "set -o vi" enable this mode, although other methods to enable it are not prohibited (such as inputrc for bash/readline), and as such is a "universal trick."The article is relying on some Emacs mode, which is not POSIX.$_ is not POSIX if I remember correctly.History in vi mode is easier, just escape, then forward slash (or question mark) and the search term (regex?), then either "n" or "N" to search the direction or its reverse.I've seen a lot of people who don't like vi mode, but its presence is the most deeply standardized.
  • williamcotton
    Undo: Ctrl + _ (Ctrl + underscore)
  • nasretdinov
    I'd advise against using sudo !! though since it adds the command to history and then it's very easy to accidentally trigger, running some undesired command as root without any prior confirmation. IMO pressing up, Ctrl-A and typing "sudo " isn't much longer but saves you from running unknown commands as root by accident
  • exceptione
    I didn't know the `ALT + .` trick to repeat the last argument, but what is even more neat (and not mentioned in the article) is that it cycles through your history. At least it does in my shell.
  • prodigycorp
    There's one thing you need to only think about once, and has the potential to save you a ton of time: profile your ZSH startup time!Stuff like NVM or Oh My ZSH will add a few seconds to your shell startup time.
  • commandersaki
    My favourite trick is either commenting out a whole command or placing a comment at the end of a command to make it easier to find in my persistent history (thanks eliben) [0], using the # character.I tried this in zsh and it wasn't the default behaviour which immediately made me nope from the shell altogether, among all the other quirks. I've just been using bash for far too long to switch to something different.[0] https://eli.thegreenplace.net/2013/06/11/keeping-persistent-...
  • Joker_vD
    > The “Works (Almost) Everywhere” Club> The Backspace ReplacementsAlso known as "emacs editing mode". Funnily enough, what POSIX mandates is the support for "vi editing mode" which, to my knowledge, almost nobody ever uses. But it's there in most shells, and you can enable it with "set -o vi" in e.g. bash.
  • vdm
    Ctrl-r works well at searching character trigrams, which can include space. Trigrams without space work well with auto_resume=substring .`| sudo tee file` when current user does not have permission to >file
  • ta8903
    Something that should be mentioned is starting a command with a space doesn't add it to your history in most shells, really useful for one-off commands that you don't want cluttering your history.Also, increase your `$HISTSIZE` to more than you think you would need, there have been cases where it helped me find some obscure command I ran like 3 years before.
  • anon
    undefined
  • teh
    Another useful "Emergency exit" is CTRL+Z which stops the process and cannot be intercepted.It's often faster than hitting CTRL+C and waiting for process cleanup, especially when many resources are used. Then you can do e.g. `kill -9 $(jobs -p)` to kill the stopped tasks.
  • tetris11
    Never heard of instant truncate, nor `fc`, nor `Esc .`Quite a few useful ones
  • piekvorst
    Is it just me, or is it an LLM language? The article tries very hard to be correct but somehow lacks experience.I've never used the majority of these tricks for decades, except for brace expansion, process substitutions, and complex redirections.
  • keybored
    > We’ve all been there.Close tab.I ought to migrate away from shell scripting and just keep the shell for interactive use. Unfortunately I have cursed myself by getting competent-ish with P. shell and Bash scripting. Meaning I end up creating maintenance headaches for my future self.(Echoes of future self: ... so I asked an LLM to migrate my shell scripts to Rust and)Anyway with the interactive shell stuff. Yeah the I guess Readline features are great. And beyond that I can use the shortcut to open the current line in an editor and get that last mile of interactivity when I want it. I don’t really think I need more than that?I tried Vim mode in Bash but there didn’t seem to be a mode indicator anywhere. So dropped that.Edit: I just tested in my Starship.rs terminal: `set -o vi`. Then I got mode indicators. Just with a little lag.
  • quijoteuniv
    Guilty as charged
  • aa-jv
    My favourite shell trick is to comment my code: $ some_long_command -with -args -easily -forgotten # thatspecialthing ... Some weeks later .. $ CTRL-R<specialthing> .. finds: $ some_long_command -with -args -easily -forgotten # thatspecialthing Need to see all the special things you've done this week/whenever? $ history | grep "\#" ...Makes for a definite return of sanity ..
  • amelius
    What I hate is that if you start a command with a space it is not recorded in the history. This happens often when copy+pasting commands. I know you can turn it off but still ... this drives me mad.
  • faangguyindia
    I just open, agent in tui, and ask it to do what I want and make a plan, i read the plan edit it and run it.Simple, no need to learn any commandline these days.I used to use arch and all, and managed many big projects. I find little value in learning new tools anymore, just feed it docs and it generated working plan most of the timeNow I've moved to coding in Haskell, which i find suits me better than wasting my time with cli and exploring what options all these cli tools have.