tmux教程功能
- 分屏。
- 允许断开Terminal连接后,继续运行进程。
结构
// 一个tmux可以包含多个session,一个session可以包含多个window,一个window可以包含多个pane。tmux:session 0:window 0:pane 0pane 1pane 2...window 1window 2...session 1session 2...
操作创建&分屏操作
tmux
:新建一个session,其中包含一个window,window中包含一个pane,pane里打开了一个shell对话框。按下
ctrl + a
后手指松开,然后按d
:挂起当前session。tmux a
:打开之前挂起的session。按下
Ctrl + a
后手指松开,然后按百分比号%
:将当前pane左右平分成两个pane。按下
Ctrl + a
后手指松开,然后按双引号"
:将当前pane上下平分成两个pane。按下
ctrl + a
后手指松开,然后按z
:将当前pane全屏/取消全屏。按下
Ctrl + a
后手指松开,然后按c
:在当前session中创建一个新的window。Ctrl + d
:关闭当前pane;如果当前window的所有pane均已关闭,则自动关闭window;如果当前session的所有window均已关闭,则自动关闭session。
选择操作
- 按下
ctrl + a
后手指松开,然后按方向键
:选择相邻的pane。- 鼠标点击可以选pane。
- 按住
ctrl + a
的同时按方向键
,可以调整pane之间分割线的位置- 鼠标拖动pane之间的分割线,可以调整分割线的位置。
- 按下
ctrl + a
后手指松开,然后按s
:选择其它session。- 方向键 —— 上:选择上一项 session/window/pane
- 方向键 —— 下:选择下一项 session/window/pane
- 方向键 —— 右:展开当前项 session/window
- 方向键 —— 左:闭合当前项 session/window
- 按下
Ctrl + a
后手指松开,然后按w
:选择其他window。- 方向键 —— 上:选择上一项 session/window/pane
- 方向键 —— 下:选择下一项 session/window/pane
- 方向键 —— 右:展开当前项 session/window
- 方向键 —— 左:闭合当前项 session/window
文本操作
- 按下
Ctrl + a
后手指松开,然后按PageUp
:翻阅当前pane内的内容。- 鼠标滚轮:翻阅当前pane内的内容。
- 在
tmux
中选中文本时,需要按住shift
键。
(仅支持Windows和Linux,不支持Mac,不过该操作并不是必须的,因此影响不大) tmux
中复制/粘贴文本的通用方式:- 按下
Ctrl + a
后松开手指,然后按[
- 用鼠标选中文本,被选中的文本会被自动复制到
tmux
的剪贴板 - 按下
Ctrl + a
后松开手指,然后按]
,会将剪贴板中的内容粘贴到光标处
- 按下
vim教程功能
- 命令行模式下的文本编辑器。
- 根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。
- 使用方式:
vim filename
- 如果已有该文件,则打开它。
- 如果没有该文件,则打开个一个新的文件,并命名为filename。
模式
- 一般命令模式
- 默认模式,一般按下
ESC
来返回到一般命令模式。 - 命令输入方式:类似于打游戏放技能,按不同字符,即可进行不同操作。
- 可以复制、粘贴、删除文本等。
- 默认模式,一般按下
- 编辑模式
- 在一般命令模式里按下
i
,会进入编辑模式。 - 按下
ESC
会退出编辑模式,返回到一般命令模式。
- 在一般命令模式里按下
- 命令行模式
- 在一般命令模式里按下
:/?
三个字母中的任意一个,会进入命令行模式,命令行在最下面。 - 可以查找、替换、保存、退出、配置编辑器等。
- 在一般命令模式里按下
操作移动操作
单字符移动
h 或 左箭头键
:光标向左移动一个字符j 或 向下箭头
:光标向下移动一个字符k 或 向上箭头
:光标向上移动一个字符l 或 向右箭头
:光标向右移动一个字符
多字符移动
n
:n表示数字,按下数字后再按空格,光标会向右移动这一行的n个字符
本行移动
0 或 功能键[Home]
:光标移动到本行开头$ 或 功能键[End]
:光标移动到本行末尾
跨行移动
gg
:光标移动到第一行,相当于1GG
:光标移动到最后一行:n 或 nG
:n为数字,光标移动到第n行n
:n为数字,光标向下移动n行
查找操作
/word
:向光标之下寻找第一个值为word的字符串?word
:向光标之上寻找第一个值为word的字符串n
:重复前一个查找操作N
:反向重复前一个查找操作
替换操作
:n1,n2s/word1/word2/g
:n1与n2为数字,在第n1行与n2行之间寻找word1这个字符串,并将该字符串替换为word2:1,$s/word1/word2/g
:将全文的word1替换为word2:1,$s/word1/word2/gc
:将全文的word1替换为word2,且在替换前要求用户确认
文本常规操作
v
:选中文本d
:删除(剪切)选中的文本dd
: 删除(剪切)当前行y
:复制选中的文本yy
: 复制当前行p
: 将复制的数据在光标的下一行/下一个位置粘贴u
:撤销ctrl + r
:取消撤销,恢复
缩进操作
大于号 >
:将选中的文本整体向右缩进一次小于号 <
:将选中的文本整体向左缩进一次
保存退出
:w
:保存:w!
:强制保存:q
:退出:q!
:强制退出:wq
:保存并退出
设置模式
:set paste
:设置成粘贴模式,取消代码自动缩进- 如果不取消的话,有时候复制过来会多重缩进导致乱行
:set nopaste
:取消粘贴模式,开启代码自动缩进:set nu
:显示行号:set nonu
:隐藏行号:noh
:关闭查找关键词高亮
组合技
gg=G
:将全文代码格式化gg
:光标移动到第一行,相当于1G=
:格式化选中的文本G
:光标移动到最后一行
ggdG
:删除全文gg
:光标移动到第一行,相当于1Gd
:删除(剪切)选中的文本G
:光标移动到最后一行
其他操作
ctrl + q
:当vim卡死时,可以取消当前正在执行的命令
因为有main.cpp.swap存在ctrl + z
:挂起vimfg
:恢复挂起的vim
练习
(0)创建好作业后,先进入文件夹/home/acs/homework/lesson_2/,进入homework_0文件夹,创建文件names.txt,并顺次将下列姓名[AcWing、yxc、Bob、张强、李明、Alice]写入该文件,每个名字占一行。homework 2 createcd /homework/lesson_2/homework_0vim names.txt [`i` AcWing 回车 yxc 回车 Bob 回车 张强 回车 李明 回车 Alice](1) 进入homework_1文件夹,打开problem.txt,并依次删除下列字符:[1] 最后一行第101个字符`ESC` G 101空格 'i' 删除 或者 `ESC` G 101空格 v选中 d[2] 第3行第8个字符`ESC` 3G 8空格 'i' 删除 或者 `ESC` 3G 8空格 v选中 d[3] 第1行第30个字符`ESC` gg 30空格 'i' 删除 或者 `ESC` 3G 30空格 v选中 d[4] 第16行第55个字符`ESC` 16G 55空格 'i' 删除 或者 `ESC` 16G 55空格 v选中 d[5] 第9行第80个字符`ESC` 9G 80空格 'i' 删除 或者 `ESC` 9G 80空格 v选中 d最后保存文件并退出。`ESC` 一般编辑模式下G 101空格 i 删除 一般编辑模式下3G 8空格 i 删除 一般编辑模式下gg/1G 30空格 i 删除 一般编辑模式下16G 55空格 i 删除 一般编辑模式下9G 80空格 i 删除 :wq(2) 进入homework_2文件夹,打开problem.txt,并依次执行如下操作: [1] 在第1个"two"的后面添加"abc"gg /twon i 加abc [2] 在第2个"two"的前面添加"def"n i 加def [3] 将第3个"two"后面的连续12个字符删掉n 12空格 删除 d12空格 [4] 将第4个"two"所在的行删掉n dd 最后保存文件并退出。:wq (3) 进入homework_3文件夹,打开problem.txt,并依次执行如下操作: [1] 将第5行至第15行中所有of替换成OF。:5,15s/of/OF/g [2] 将全文中所有的the替换成THE。:1,$s/the/THE/g [3] 将第偶数个is替换成IS,第奇数个is不变。下标从1开始。:1,$s/is/IS/gc (4) 进入homework_4文件夹,打开problem.txt,并依次执行如下操作: [1] 删除第11行11Gdd [2] 将所删除的行粘贴到文件最后一行的下一行nGp [3] 复制第5行5Gyy [4] 将所复制的行粘贴到文件当前最后一行的下一行nGp (5) 进入homework_5文件夹,打开problem.txt,并依次执行如下操作: [1] 删除第11行第15个字符(包含该字符)至第13行第5个字符(包含该字符)先定位到11行第15个字符【要注意提前一位,因为包含该字符】,然后按v,跳到13行第五个字符,删除11G15空格回退一个/11G14空格 v 13G5空格 d [2] 将所删除的内容粘贴到文件末尾(注意不要另起一行)nG ¥ p【区分复制y,使用粘贴p】【到文件末尾时指示会停留在最后一个字符前面,正常情况!】 [3] 复制第5行第88个个字符(包含该字符)至第7行第6个字符(包含该字符)5G87空格 v 7G6空格 y [4] 将所复制的内容粘贴到当前文件末尾(注意不要另起一行)nG ¥ p (6) 进入homework_6文件夹,并依次执行如下操作: [1] 清空source0.cppvim source0.cppggdG [2] 将source1.cpp中的第1-3行和第12-24行复制到source0.cpp中使用tmux进行分屏不好使进入1中复制,到0里粘贴ggv3G¥yp12Gv24G¥yp什么情况下换行?什么情况下不换行? (7) 进入homework_7文件夹,格式化source.cppgg=G (8) 进入homework_8文件夹,打开source.cpp,并依次执行如下操作: [1] 将第15-21行向右缩进2次。vim卡死使用ctrlq15Gv21G >> [2] 将第22-23行向左缩进1次。22Gv23G < (9) 进入homework_9文件夹,打开链接:https://www.acwing.com/activity/content/code/content/1694465/ 新建文件source.cpp,将链接中的代码抄进source.cpp文件中。vim source.cpp