set -o vi
ESC k /command
or just grep history…
Ctrl r
I thought command line users like typing things. I avoid typing where possible, and dont use the command line on Linux.
In my first professional programming job writing custom software for clients in 1995, one of our standard sales pitches to clients was the idea that a GUI-based application would do away with the need for command prompts. This was always met with applause and great rejoicing. It’s kind of remarkable that command prompts are still going strong thirty years later. I’m sure nobody would appreciate have this phenomenon compared to the Amish so I won’t do it.
history | grep then !cmd_number
Everyone sharing their Ctrl+R tips, here’s my Control+R question:
How does scope work? Some command history only seems to exist in certain tabs.
Also sometimes I Ctrl+R in a tab then the command is there but I forget I need a different one first, so I ctrl+c but the next time I search for that original command somehow it doesn’t exist anymore.
I’m using the default terminal on Nobara (fedora based).
This actually doesn’t depend on your terminal but on the shell running inside it. Bash is the default on most distros. I have also frequently had this issue. There might be config to fix it.
I switched to fish instead of bash, and now I use fzf and the https://github.com/PatrickF1/fzf.fish plugin and it works GREAT. There might be a similar thing for bash, I don’t know.
As far as I remember, there is a bash setting that controls whether the command history is written immediately after execution (in which case it is immediately available on all tabs/windows of the console) or after closing the session (in which case it will be available next time/potentially lost if the window is forcibly closed etc).
The default is the second one as far as I remember.
That said, I had changed to a more powerful one in zsh years ago, so it’s been a while…
I used to be like this but people seriously. CTRL+R
Do it. Don’t make this one of those things you’ve heard about and just never got around to trying. Open your terminal right now and CTRL+R and type any part of the command you did before. If the command you want is not showing first just hit CTRL+R again to go to the next one back.
DO IT.
Edit: I did learn from this thread today though that ZSH has it set to where you can just type part of what you’re looking for then hit up to do the same thing. Neat!
If you want to level up ctrl-r, upgrade to Atuin: https://atuin.sh/
Holy shit. I just tried it.
ctrl+r
is a revelation! How the fuck did I not know about this?You can empower Ctrl+r event more by using fzf. After I started using it, I can’t imagine going back to without it.
WHAT THE FUCJ IS THIS SORCERY BRO I’VE BEEN USING LINUX FOR AGES AND NEVER KNEW THIS BROOOOOOOOOO
Edit: I did learn from this thread today though that ZSH has it set to where you can just type part of what you’re looking for then hit up to do the same thing. Neat!
Fish too, it’s fantastic.
Me, playing indie games on Apple and doing the same with xattr -d com.apple.quarantine ~filepath
- yes
history | grep [the thing]
CTRL+R [the thing]
please i beg you
with grep I see all the alternatives, Ctl+R just shows me one
Combine ctrl+R with fzf and get the best of both worlds
For me
ctrl-r
is faster most of the time,history | grep [command]
is better if I can’t easily pattern match (don’t remember it exactly, using several flag variations, etc.). they’re both good tools.You can press up
seeing multiple at the same time is more helpful though
Ppsshh. Not lazy enough. Create that in a script and call it “hgrep” and drop it into path.
Why not just use an alias?
Brilliant
i was doing
cat ~/.bash_history | grep thing
which is stupid so i started doinggrep "thing" ~/.bash_history
now you’re telling me i should do
history | grep thing
i can’t win
Some would call the former command cat abuse.
In short, unless you want the contents of a file printed to stdout (or multiple files concatenated), the command can probably be written without
cat
, instead using the filename as an argument (grep pattern file
) or IO redirection (cmd < file
).Stylistics and readability are another thing though.
Exactly! Now copy paste it into Joplin where you’ll never see it ever again.
Ctrl+R
https://atuin.sh/ Does all that and a lot more, like showing if the command succeeded and which directory it was run in
I’m shocked how far I had to scroll down before it was mentioned, I was getting scared I would have to say it lol
What the fuck!? How am I only learning this now, after years of linux as daily driver?!
Just checking, because I learnt to type before I worked this out, and because surely someone reading doesn’t know: press tab. Bash will fill in file names from your current directory.
E.g. say you have files fred1file, fred2file, jim.
Type f then press tab, it will fill to “fred”. Then press 2 and press tab again and it will fill the full “fred2file”.
Have a play, it works in heaps of situations.
Shit is usually a pain in the ass. The challenge is divining how much of a pain in the ass something has to be that someone else might have made a solution for it.
I didn’t know you could ctrl+shift+c to copy in the terminal until a month ago when my linux n00b wife said "there has to be a better way to do this. I’ve been right clicking to copy for 10 years.
most DE’s have a thing where you can paste highlighted text using the middle mouse button
It’s also independent from the Clipboard so you can do it while keeping your clipboard
Middle mouse button?!
Most mouse wheels can be clicked in place of the middle button, which has been removed from most modern computer mouses.
It’s also known as mouse 3 if you need to find it on your mouse or want to bind it to something else.
And ctrl + shift + v to paste, just in case
If that doesn’t work, Shift + Insert.
you can also just use ctrl + insert for copy and shift + insert for paste.
I used to have shift insert in my muscle memory from Windows, but since my job has used a Mac since 2020 it’s fallen out. I never knew Ctrl insert was copy, that’s nifty! Another tool in the arsenal. It will be useful when copy in select isn’t set and I don’t know how to set it up lol.
I have always used ctrl/shift insert, I never got used to ctrl c/v. Glad you have new tools!
MinGW can do that, too. Useful for Git.
Ctrl+c to copy, Ctrl+v to paste, Ctrl+z to undo last change (chain it multiple times to reverse time) hopes this helps, ctrl+tab also changes applications on macos and Linux to my knowledge. If you know anymore let’s put them together
Congratulations! I remember where I was when I first learned it (in a noisy server room at the back of a machine shop).
Now pair it with FZF for fuzzy finding – it’s surprisingly easy to set up, just following any guide. It’s insanely useful. I find myself even doing things like typing:
$ xinput --disable $(xinput --list | grep -i touchpad | grep 'id=[0-9]\+' -o | cut -d= -f2) # Disable synaptic touchpad trackpad pointer
commands with these like comments on the ends as sort of “tags” so I can ctrl+r search for them later. Yes, I know I could just use a named function, but this is like the step just before that–before I know if I’ll be issuing the same command all the time, or just for the next couple weeks. (This one was from when I was resting my notebook on my laptop.)
I like this; I have a lot of commands that I don’t use often enough to justify an alias, but still need to rerun all the time. thanks!
As usual, that’s documented (we can RTFM).
Before trying ctrl-s, you may want to disable software flow control: run
stty -ixon
& add it to your initialization files. Otherwise, you’ll pause terminal output. ctrl-q resumes terminal output.stty
reveals terminal special characters$ stty -a ⁝ intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; … ⁝
These special characters/keys often perform special functions. To illustrate
- ctrl-d on empty input typically exits/logs out of interactive terminal applications (including shells)
- ctrl-u discards input (useful for inputs like password prompts that don’t echo input back)
- ctrl-v inputs next character literally (such as tab)
Use mcfly and it will be even better.
This but with FZF and
ag
This is what I love about Linux - always learning new things!
I’m not going to say how long I used linux before learning this. It isn’t “this many days old”, but it may as well be.
I have 7 headless linux boxes running.
Wait till you learn about
!?
.^r is superior, though.
Even quicker with zsh or atuin: write the first few letters then arrow up to cycle through all matches
Even quicker with fish: Write the first few letters then it auto-suggests the last-run command matching that prefix (and then you can still arrow up to cycle through all matches).
(There is also a zsh plugin for that, called zsh-autosuggestions.)
A lot of stuff assumes Bash, so occasionally when the syntax differs its slightly annoying; sometimes you have to modify a few lines of a file or something (or run it as in Bash manually). Fish is so nice though. It really should replace Bash for almost everyone. If you really need Bash you can still use it.
With script files, you can (and should regardless of Fish usage) put a shebang at the top, like
or
. Then it will run with Bash as you’d expect.
I also recommend not setting Fish as your system-wide default shell (since then a missing shebang will cause it to run in Fish), but rather just have your terminal emulator start
fish
by default.And yeah, outside of scripting, if I notice a command requires Bash syntax (which you can often tell from Fish’s syntax highlighting turning red), then I just run
bash
, execute the Bash command in there and thenexit
back out of there.Having said all that, I’m not trying to take away from your point. If I wasn’t just joking around, I would caveat a Fish recommendation just as much.
Yeah, it’s just some scripts that come with programs sometimes not including that is the issue. Like I said, it isn’t a big issue, just occasionally requires small edits if you try to run the script in Fish, or, like you said, running them with Bash.
I main ZSH and I’ve been CTRL+R’ing for years damn here I am a fool
I like to imagine someone added it in for their own personal use and told nobody because surely they are the only one.
It was publicized as part of
readline
, I think.…in like 1989.
I love this one but is the gif moving at 0.5 frames a second or is it just me
Normal for me. Thanks for pointing out it was a gif. I never realize they’re gifs because I have to “open in external” for them to actually move.
For me, it looks normal (about 8 frames a second, probably).
It works fine for me if I click on it but the embedded one is stuttering.
If only you had a little picture to click on…
What, and type ‘ls’ again?
Basado
No es común ver hispanohablantes en Lemmy, ¿de qué país eres?
Pretty much, yeah.
Rather than jot down in a text file the various
ffmpeg
commands I use frequently…Raktajino@laptop:~/Downloads$ history | grep ffmpeg 12 sudo apt install audacity gimp ffmpeg mplayer 184 history | grep ffmpeg 215 ffmpeg -i source.mkv -ss 629 -t 7 out.mkv 217 ffmpeg -i out.mkv -s 0.5 -vf scale=1280:720 out.mp4 218 ffmpeg -i out.mkv -ss 0.5 -vf scale=1280:720 out.mp4 231 ffmpeg -i out.mp4 -vf "subtitles=out.srt" final.mp4 503 ffmpeg -i toofat.wav toofat.mp3 ... 682 history | grep ffmpeg 684 ffmpeg -i 1.gif -i 2.gif -filter_complex "[1:0] [2:0] concat=n=2" out.gif 685 ffmpeg -i 1.gif -i 2.gif -filter_complex "[1:0] [2:0] concat=n=2:v=1" out.gif 686 ffmpeg -i 1.gif -i 2.gif -filter_complex "[1:0] [2:0] concat=n=2:v=1" -map '[v]' out.gif 687 history | grep ffmpeg 688 ffmpeg -i 1.gif -i 2.gif -filter_complex "[0:0] 12:0] concat=n=2:v=1" -map '[v]' out.gif 689 ffmpeg -i 1.gif -i 2.gif -filter_complex "[0:0] 1:0] concat=n=2:v=1" -map '[v]' out.gif 690 ffmpeg -i 1.gif -i 2.gif -filter_complex "[0:0] [1:0] concat=n=2:v=1" -map '[v]' out.gif 691 ffmpeg -i 1.gif -i 2.gif -filter_complex "[0:0] [1:0] concat=n=2" out.gif 694 history | grep ffmpeg
I’m begging you to use CTRL+R
I like how ‘history | grep ffmpeg’ shows up twice
I like how I was courageous enough to not fix the actual typos/failed commands in the actual history lol.
4 times
wao
You can also create aliases for frequently used commands. You can even put a function in an alias so it can accept arguments, but it would probably be better to just write a shell script at that point.
You’re gonna love once you start
-
tagging your ffmpeg commands like
do a thing # dothingname
-
Just
!?dothingname
later to recall it and run it.
Its a little easier to NOT accidentally
!?alt
and discoverhalt
is matched first.-
I just mapped page-up to search (and you can too)