diff --git a/bash-zsh_TerminalShorcuts.md b/bash-zsh_TerminalShorcuts.md new file mode 100644 index 0000000..125aa3a --- /dev/null +++ b/bash-zsh_TerminalShorcuts.md @@ -0,0 +1,104 @@ +# Shortcuts + +*For Ubuntu's default keybinding settings (i.e Emacs keybindings)* + +## Insert previous arguments + - Alt+.: insert last argument from last command. + - Alt+number+.: insert #nth last argument from last command. + - Alt+- , number , Alt+., **zsh:** Alt+-+number+.: insert #nth first argument from last command. + +*In Linux you can repeat commands to go back in history* + +### Example: + +Last command is: + + mv foo bar + + - Alt+0+.: insert first argument of last command = `mv` + - Alt+2+.: insert last 2nd argument of last command = `foo` + - up , Ctrl+w: last command without the last word = `mv foo` + + +## Cut/Paste commands +*(relative to cursor's position)* + - Ctrl+w: cuts last word + - Alt+d: cuts next word + - Ctrl+k: cuts everything after + - Ctrl+u, **zsh:** Alt+w: cuts everything before + - **zsh:** Ctrl+u: cuts the entire command *(In bash you can combine Ctrl+u , Ctrl+k)* + - Ctrl+y: paste characters previously cut with any **Cut command**. *In bash you can chain **cut commands**, and Ctrl+y will paste them all.* + + +## Move cursor + - Ctrl+left: move to last word + - Ctrl+right: move to next word + - home or Ctrl+a: move to start of command + - end or Ctrl+e: move to end of command + + +## Other + - Ctrl+_: undo last edit *(very useful when exceeding Ctrl+w)* + +## To see all shortcuts available + - **bash:** `bind -lp` + - **zsh:** `bindkey -L` + +# Custom shortcuts +## Iterate through arguments +*only works in zsh, and probably only Linux* + +### Description +Insert any argument of a previous command by iterating one by one until selection + +### Setup Instructions +run this: + + autoload -Uz copy-earlier-word + zle -N copy-earlier-word + bindkey "^[:" copy-earlier-word + +*(to make this permanent, add it to your `~/.zshrc` and restart shell)* + +Now use Alt+. to go as back as you want, then use Alt+: to iterate through the arguments + +### Example: +Last command is + + echo 1 2 3 4 5 + +- Alt+.: `5` +- Alt+.+:: `4` +- Alt+.+:+:: `3` +- Alt+.+:+:+:: `2` +- Alt+.+:+:+:+:: `1` +- Alt+.+:+:+:+:+:: `echo` + +source: https://stackoverflow.com/a/34861762/3163120 + + +# Other examples + +## Common usecases +Let's consider the last command to be: + + mv foo bar + +up , Ctrl+w: last command without the last word = `mv foo` + +Alt+0+.: first argument of last command = `mv` + +# Limitations + "words" only includes `a-zA-Z` characters, so any symbol character will stop word-shortcuts. + +So if last argument was a url and you want to erase it with Ctrl+w it will be a pain. + +E.g: `curl -I --header "Connection: Keep-Alive" https://stackoverflow.com/questions/38176514/re-run-previous-command-with-different-arguments` + +To erase that **url** using Ctrl+w, you'd have to repeat it 12 times. + + +--- + + +It would be great to have similar shortcuts that only stops at the **space character** \ No newline at end of file