Merge branch 'dev' into vhs
This commit is contained in:
		
							
								
								
									
										180
									
								
								basics/setup/Quality_of_Life.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										180
									
								
								basics/setup/Quality_of_Life.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,180 @@ | |||||||
|  | --- | ||||||
|  | title: "Quality of Life" | ||||||
|  | tags: [ "basics", "setup" ] | ||||||
|  | dependencies: [ "vi", "basics" ] | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | This & That | ||||||
|  | =========== | ||||||
|  |  | ||||||
|  | Refer to 'that last thing', and 'the first thing': | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | fortune -l > file1 | ||||||
|  | cat !$  | tr -d u | ||||||
|  | diff !^ !$ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | **NB:** this can go wrong: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | ls -l file1 file2 | ||||||
|  | cat !^ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Done | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | `<C-d>` | ||||||
|  |  | ||||||
|  | - If you have a command, Control + d will execute the command. | ||||||
|  | - If you have nothing, `exit`. | ||||||
|  |  | ||||||
|  | Input Run-Commands (`~/.inputrc`) | ||||||
|  | ================================= | ||||||
|  |  | ||||||
|  | Alias Expansion | ||||||
|  | --------------- | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | echo '"\C- ": shell-expand-line' >> ~/.inputrc | ||||||
|  | exec bash | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Now you can expand all aliases with 'Control + Space'. | ||||||
|  | Try just `ls`, then 'Control + Space'. | ||||||
|  |  | ||||||
|  | Glob Expansion (`*`) | ||||||
|  | -------------------- | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | echo '"\C-x": glob-expand-word' >> ~/.inputrc | ||||||
|  | exec bash | ||||||
|  | ls *<C-x> | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | - Are you sure you want to delete that? | ||||||
|  |     * `rm -r *<C-x>` | ||||||
|  | - Clean up the Downloads folder: | ||||||
|  |     * `rm Downloads/*pdf<C-x>` | ||||||
|  |  | ||||||
|  | Arbitrary Commands | ||||||
|  | ------------------ | ||||||
|  |  | ||||||
|  | Use `\n` as a 'newline' character to automatically press `<Return>`. | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | echo 'Control-y: "| lolcat\n"' >> ~/.inputrc | ||||||
|  | exec bash | ||||||
|  | ls<C-y> | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | Control-l: "\C-u clear -x && ls\n" | ||||||
|  | exec bash | ||||||
|  | cd /etc/<C-l> | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Readline as Vi | ||||||
|  | -------------- | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | echo 'set editing-mode vi' >> ~/.inputrc | ||||||
|  | echo 'set keymap vi-insert' >> ~/.inputrc | ||||||
|  | exec bash | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | The prompt now works according to `vi`-motions. | ||||||
|  | This goes much further than the bash-option, `set -o vi` ('set option: `vi`'). | ||||||
|  | It changes the cursor in the terminal, not just bash. | ||||||
|  |  | ||||||
|  | Try: | ||||||
|  |  | ||||||
|  | - `ls <C-n>` | ||||||
|  | - `ls <C-p>` | ||||||
|  | - Type some words. | ||||||
|  | - `<Esc>0dw$p` | ||||||
|  | - <Esc> to normal-mode, and go back with 'b', and forward with 'e'. | ||||||
|  | - `4b` to step back four times. | ||||||
|  | - `cE` | ||||||
|  | - `<Esc>kcw` | ||||||
|  | - ls -a<Esc>xxxx | ||||||
|  |  | ||||||
|  | Works with `python` too: | ||||||
|  |  | ||||||
|  | ```python | ||||||
|  | im<C-n>os<Return> | ||||||
|  | os.li<C-n><Return> | ||||||
|  | <Esc>kfn | ||||||
|  | <C-d> | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Fix Globs! | ||||||
|  | ---------- | ||||||
|  |  | ||||||
|  | If you tried the previous commands then they will not work any more, because the `vi`-commands overwrite the other commands. | ||||||
|  | Remove them. | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | sed '/ vi/d' ~/.inputrc | ||||||
|  | sed -i '/ vi/d' ~/.inputrc | ||||||
|  |  | ||||||
|  | sed '1 i set editing-mode vi' .inputrc  | ||||||
|  | sed -i '1 i set editing-mode vi' ~/.inputrc  | ||||||
|  | sed -i '2 i set keymap vi-insert' ~/.inputrc  | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Vi-sibility | ||||||
|  | ----------- | ||||||
|  |  | ||||||
|  | The `readline` prompt becomes confusing if you don't remember if you're in insert or normal mode. | ||||||
|  | But you can show the  current mode in the prompt: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | echo 'set show-mode-in-prompt on' >> ~/.inputrc | ||||||
|  | exec bash | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Set new symbols for normal and insert mode: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | echo 'set vi-ins-mode-string "  "' >> ~/.inputrc | ||||||
|  | echo 'set vi-cmd-mode-string " "' >> ~/.inputrc | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Fuzzy Sort | ||||||
|  | ========== | ||||||
|  |  | ||||||
|  | Check your repos for `sk-im`, and install. | ||||||
|  | The program is called `sk`. | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | FUZZY=sk | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | If you don't have it, `fzy` or `fzf` should work the same way. | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | FUZZY=fzy | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Find some 'read-config' files to check out: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | find . -maxdepth 2 -name "*rc" | ||||||
|  | find . -maxdepth 2 -name "*rc" | $FUZZY | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | And read some: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | PAGER='less -R' | ||||||
|  | $PAGER "$(find . -maxdepth 2 -name "*rc" | $FUZZY)" | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Make the change long-term: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | alias rrc='$PAGER "$(find . -maxdepth 2 -name "*rc" | sk)"' | ||||||
|  | alias | grep rrc= >> ~/.bash_aliases | ||||||
|  | ``` | ||||||
		Reference in New Issue
	
	Block a user