tmux教程
功能
- 分屏:可以在一个开发框里分屏
- 允许terminal在连接断开之后可以继续运行,让进程不会因为断开连接而中断
结构
// 一个tmux可以包含多个session,一个session可以包含多个window,一个window可以包含多个pane。
tmux:
session 0:
window 0:
pane 0
pane 1
pane 2
...
window 1
window 2
...
session 1
session 2
...
操作
创建&分屏操作
-
tmux
:新建一个session,其中包含一个window,window中包含一个pane,pane里打开了一个shell对话框。 -
按下
Ctrl + a
后手指松开,然后按c
:在当前session中创建一个新的window。 -
Ctrl + d
:关闭当前pane;如果当前window的所有pane均已关闭,则自动关闭window;如果当前session的所有window均已关闭,则自动关闭session。 -
按下
ctrl + a
后手指松开,然后按d
:挂起当前session。 -
tmux a/attach
:打开之前挂起的session。 -
按下
Ctrl + a
后手指松开,然后按百分比号%
:将当前pane左右平分成两个pane。 -
按下
Ctrl + a
后手指松开,然后按双引号"
:将当前pane上下平分成两个pane。 -
按下
ctrl + a
后手指松开,然后按z
:将当前pane全屏/取消全屏。
选择操作
- 按下
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 或 →
:光标向右移动一个字符 - 在命令模式下:vim会卡在最后一个字符前面,编辑模式会卡在最后一个字符,不像win,移动到最后会直接换行
-
-
多字符移动
-
n<Space>
:n表示数字,按下数字后再按空格,光标会向右移动这一行的n个字符
-
-
本行移动
-
0 或 功能键[Home]
:光标移动到本行开头 -
$ 或 功能键[End]
:光标移动到本行末尾
-
-
跨行移动
-
gg
:光标移动到第一行,相当于1G -
G
:光标移动到最后一行 -
:n 或 nG
:n为数字,光标移动到第n行 -
n<Enter>
: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
:撤销
在windows里,ctrl+z
撤销 -
ctrl + r
:取消撤销,恢复
在windows里,ctrl+shift+z
取消撤销
缩进操作
-
大于号 >
:将选中的文本整体向右缩进一次 -
小于号 <
:将选中的文本整体向左缩进一次
保存退出
-
:w
:保存 -
:w!
:强制保存 -
:q
:退出 -
:q!
:强制退出 -
:wq
:保存并退出
设置模式
-
:set paste
:设置成粘贴模式,取消代码自动缩进- 如果不设置的话,有时候复制过来会多重缩进导致乱行
-
:set nopaste
:取消粘贴模式,开启代码自动缩进 -
:set nu
:显示行号- 如果不隐藏的话,在复制代码的时候会将前面的行号也复制过去
-
:set nonu
:隐藏行号 -
:noh
:关闭查找关键词高亮- 可以防止在查找后出现的'碍眼'高亮信息
组合技
-
gg=G
:将全文代码格式化-
gg
:光标移动到第一行,相当于1G -
=
:格式化选中的文本 -
G
:光标移动到最后一行
-
-
ggdG
:删除全文-
gg
:光标移动到第一行,相当于1G -
d
:删除(剪切)选中的文本 -
G
:光标移动到最后一行
-
其他操作
-
ctrl + q
:当vim卡死时,可以取消当前正在执行的命令 -
ctrl + z
:挂起vim -
fg
:恢复挂起的vim文章来源:https://www.toymoban.com/news/detail-749352.html -
异常处理:文章来源地址https://www.toymoban.com/news/detail-749352.html
- 每次用vim编辑文件时,会自动创建一个.filename.swp的临时文件。
- 如果打开某个文件时,该文件的swp文件已存在,则会报错。此时解决办法有两种:
- 找到正在打开该文件的程序,并退出
- 直接删掉该swp文件即可
练习
(0)创建好作业后,先进入文件夹/home/acs/homework/lesson_2/,进入homework_0文件夹,创建文件names.txt,并顺次将下列姓名[AcWing、yxc、Bob、张强、李明、Alice]写入该文件,每个名字占一行。
homework 2 create
cd /homework/lesson_2/homework_0
vim names.txt
`i` AcWing 回车 yxc 回车 Bob 回车 张强 回车 李明 回车 Alice 'ESC' :wq
(1) 进入homework_1文件夹,打开problem.txt,并依次删除下列字符:
cd ../homework_1
ls
vim problem.txt
[1] 最后一行第101个字符
`ESC` G 101空格 'i' 删除 或者 `ESC` G 101空格 v选中 d
跳到101字符的后面
[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` :wq
(2) 进入homework_2文件夹,打开problem.txt,并依次执行如下操作:
cd ../homework_2
ls
vim problem.txt
[1] 在第1个"two"的后面添加"abc"
`ESC` gg /two n 'i' 添加abc
[2] 在第2个"two"的前面添加"def"
`ESC` gg /two n n 'i' 添加def
[3] 将第3个"two"后面的连续12个字符删掉
`ESC` gg /two n n n v 12空格 d 或者 d12?
[4] 将第4个"two"所在的行删掉
`ESC` gg /two n n n n dd
最后保存文件并退出。
`ESC` :wq
(3) 进入homework_3文件夹,打开problem.txt,并依次执行如下操作:
cd ../homework_3
ls
vim problem.txt
[1] 将第5行至第15行中所有of替换成OF。
`ESC` :5,15s/of/OF/g
[2] 将全文中所有的the替换成THE。
`ESC` :1,$s/the/THE/g
[3] 将第偶数个is替换成IS,第奇数个is不变。下标从1开始。
`ESC` :1,$s/is/IS/gc nynyny...
(4) 进入homework_4文件夹,打开problem.txt,并依次执行如下操作:
cd ../homework_4
ls
vim problem.txt
[1] 删除第11行
`ESC` 11G dd
[2] 将所删除的行粘贴到文件最后一行的下一行
`ESC` G p 此时自动换行,因为剪切的是一整行(`dd`)
[3] 复制第5行
`ESC` 5G yy
[4] 将所复制的行粘贴到文件当前最后一行的下一行
`ESC` G p 此时自动换行,因为复制的是一整行(`yy`)
(5) 进入homework_5文件夹,打开problem.txt,并依次执行如下操作:
cd ../homework_5
ls
vim problem.txt
[1] 删除第11行第15个字符(包含该字符)至第13行第5个字符(包含该字符)
注意题干为包含该字符,11G15空在选中的时候不包括前面的字符
`ESC` 11G 14空格(15空格回退一位) v 13G 15空格 d
[2] 将所删除的内容粘贴到文件末尾(注意不要另起一行)
`ESC` G $ p
到行末尾时指示会停留在最后一个字符前面,属于正常情况
[3] 复制第5行第88个字符(包含该字符)至第7行第6个字符(包含该字符)
`ESC` 5G 87空格 v 7G 6空格 y
[4] 将所复制的内容粘贴到当前文件末尾(注意不要另起一行)
`ESC` G $ p
(6) 进入homework_6文件夹,并依次执行如下操作:
cd ../homework_6
ls
[1] 清空source0.cpp
vim source0.cpp
gg d G
[2] 将source1.cpp中的第1-3行和第12-24行复制到source0.cpp中
方法1:使用tmux分屏进行操作,使用全局复制粘贴操作
屏幕1:
vim source1.cpp
:set nonu //隐藏行号
按住shift 选中1-3行or12-24行
ctrl+insert进行复制
屏幕2:
vim source0.cpp
:set paste //进入粘贴模式
shift+insert进行粘贴
粘贴的时候可能多复制出来空格,要删除
方法2:不分屏,直接使用vim自带的方法进行
vim source1.cpp
gg v 3G$ y 12G v 24G$ y
vim source0.cpp
p 'i' 回车换行 'ESC' p
讨论:什么情况下换行?什么情况下不换行?
换行:使用yy或者dd时
不换行:使用v选中后y或d
(7) 进入homework_7文件夹,格式化source.cpp
cd ../homework_7
ls
vim source.cpp
gg = G
(8) 进入homework_8文件夹,打开source.cpp,并依次执行如下操作:
cd ../homework_8
ls
vim source.cpp
[1] 将第15-21行向右缩进2次。
vim卡死使用`ctrl+q`退出
15G v 21G >
15G v 21G >
[2] 将第22-23行向左缩进1次。
22G v 23G <
(9) 进入homework_9文件夹,打开链接https://www.acwing.com/activity/content/code/content/1694465/,新建文件source.cpp,将链接中的代码抄进source.cpp文件中。
cd ../homework_9
ls
// 链接内容如下,直接ctrl+c复制
#include<iostream>
using namespace std;
int main(){
int a, b;
cin >> a >> b;
cout << a + b < <endl;
return 0;
}
vim source.cpp
ctrl + insert(fn+end)
:wq
acs@07e1e01d2ed1:~$ homework 2 test
homework_0 is Right!
homework_1 is Right!
homework_2 is Right!
homework_3 is Right!
homework_4 is Right!
homework_5 is Right!
homework_6 is Right!
homework_7 is Right!
homework_8 is Right!
homework_9 is Right!
score: 100/100
到了这里,关于Linux-02tmux和vim的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!