#《快乐的 Linux 命令行》

#恢复 alt 键功能

MacOSTerminal里,用alt组合键总是不好使,这次查了一下,问题解决。

Terminal -> Preferences(快捷键cmd + ,) -> Profiles -> Keyboard -> Use Option as Meta key

Use Option as Meta key

#参考链接

#移动光标

按键 效果
Ctrl-a 移动光标到行首。
Ctrl-e 移动光标到行尾。
Ctrl-f 光标后移一个字符
Ctrl-b 光标前移一个字符
Alt-f 光标后移一个字。
Alt-b 光标前移一个字。
Ctrl-l 清空屏幕,移动光标到左上角。

#修改文本

按键 效果
Ctrl-d 删除光标位置的字符。
Ctrl-t 光标位置的字符和光标前面的字符互换位置。
Alt-t 光标位置的字和其前面的字互换位置。
Alt-l 把从光标位置到字尾的字符转换成小写字母。
Alt-u 把从光标位置到字尾的字符转换成大写字母。

ctrl + t这个很有用,因为其实经常都是打反两个字母,比如我,经常把conda activate打成conda acitvate。但是我在macOS上测试的时候,确实是光标位置的字符和光标前面的字符互换位置,但是换位完之后,光标往后挪了一个位置(如果后面还有文本的话)。

#剪切粘贴

Readline的文档使用术语 killingyanking 来指我们平常所说的剪切和粘贴。剪切下来的本文被存储在一个叫做剪切环(kill-ring)的缓冲区中。

按键 效果
Ctrl-k 剪切从光标位置到行尾的文本。
Ctrl-u 剪切从光标位置到行首的文本。
Alt-d 剪切从光标位置到词尾的文本。
Alt-Backspace 剪切从光标位置到词头的文本。如果光标在一个单词的开头,剪切前一个单词。
Ctrl-y 把剪切环中的文本粘贴到光标位置。

Alt-Backspace如果光标在一个单词的开头,剪切前一个单词,同时会把两个词之间的空格也一起剪切掉并且存在剪切环里。

#自动补全

按键 效果
Alt-? 显示可能的自动补全列表。
Alt-* 插入所有可能的自动补全。

alt + ?等效于tab两次。

这俩命令我试不出来。。好在目前也没什么用= =!

#历史命令

bash维护着一个已经执行过的命令的历史列表。这个命令列表被保存在你家目录下,一个叫做.bash_history的文件里。

在默认情况下,bash 会存储你所输入的最后 500 个命令。

每个历史记录都有行号,我们可以使用一种叫做历史命令展开的方式,来调用行号所代表的这一行命令:

1
!line-number
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ history
995 uniq --help
996 uniq
997 ls /bin /usr/bin | sort | uniq -d | less
998 ssh root@xiaoxia.onns.xyz
999 blog
1000 cpblog
1001 ssh root@xiaoxia.onns.xyz
1002 clear
1003 ashdasda adad
1004 askdhakdjah akjsdhakjdhakjd akdjhakjdhajdk
1005 hkasdhakjsdha ahdsaksjdhktttttt[
1006 abcd123456abcd123456abcd12abcd123456abcd123456abcd123456 3456 ahskdasdjha
1007 which-command ls
1008 ls D
1009 history
1010 ls /bin /usr/bin | sort | uniq -d | less
$ !995
uniq --help
uniq: illegal option -- -
usage: uniq [-c | -d | -u] [-i] [-f fields] [-s chars] [input [output]]

bash也具有增量搜索历史列表的能力。
输入 Ctrl-r 来启动增量搜索,接着输入你要寻找的字。当你找到它以后,你可以敲入 Enter 来执行命令,或者输入 Ctrl-j,从历史列表中复制这一行到当前命令行。再次输入 Ctrl-r,来找到下一个匹配项(历史列表中向上移动)。输入 Ctrl-g 或者 Ctrl-c,退出搜索。

1
2
$
bck-i-search: _
1
2
$ uniq --help
bck-i-search: un_

说实话,好麻烦,我还是喜欢用grep + 管道

按键 效果
Ctrl-p 移动到上一个历史条目。类似于上箭头按键。
Ctrl-n 移动到下一个历史条目。类似于下箭头按键。
Alt-< 移动到历史列表开头。
Alt-> 移动到历史列表结尾,即当前命令行。
Ctrl-r 反向增量搜索。从当前命令行开始,向上增量搜索。
Alt-p 反向搜索,非增量搜索。(输入要查找的字符串,按下 Enter 来执行搜索)。
Alt-n 向前搜索,非增量。
Ctrl-o 执行历史列表中的当前项,并移到下一个。如果你想要执行 历史列表中一系列的命令,这很方便。

历史命令展开:

按键 效果
!! 重复最后一次执行的命令。可能按下上箭头按键和 enter 键 更容易些。
!number 重复历史列表中第 number 行的命令。
!string 重复最近历史列表中,以这个字符串开头的命令。
!?string 重复最近历史列表中,包含这个字符串的命令。

应该小心谨慎地使用 !string!?string 格式,除非你完全确信历史列表条目的内容。