tmux常用命令
终端中使用 Tmux 命令
- 启动 tmux 使用
-s命令指定会话名称,使用-n命令指定窗口名称
$ tmux new -s sessionName -n window
- 退出会话(tmux会话内命令)
$ tmux detach
- 退出并关闭会话(窗口,窗格)
$ exit
- 结束后台的会话
#通过会话编号
$ tmux kill-session -t 0
#通过会话名称
$ tmux kill-session -t sessionName
- 查看所有会话
$ tmux ls
- 激活会话
$ tmux attach -t sessionName
Tmux 内使用前缀 Ctrl+b 然后对应快捷键执行命令
会话常用快捷操作
| 快捷键 | 说明 |
|---|---|
| ? | 所有快捷键,q退出 |
| :new sessionName | 创建新会话 |
| s | 切换会话 |
| $ | 重命名当前会话 |
| d | 离开会话返回shell(与tmux detach功能相同) |
| Ctrl+z | 挂起会话,返回shell |
窗口常用快捷操作
| 快捷键 | 说明 |
|---|---|
| c | 创建新窗口 |
| w | 显示窗口 |
| 数字键 | 选择对应窗口 |
| p | 前一个窗口 |
| n | 后一个窗口 |
| f | 查找窗口 |
| , | 重命名窗口 |
| & | 关闭窗口(带提示) |
窗格常用快捷键
| 快捷键 | 说明 |
|---|---|
| % | 垂直分割 |
| ” | 水平分割 |
| o | 切换窗格 |
| x | 关闭窗格 |
| space | 切换窗格布局 |
| q | 显示窗格编号,按对应数字选择窗格 |
| { | 与上一个窗格调换位置 |
| } | 与下一个窗格调换位置 |
| z | 当前窗格最大化 |
| ! | 取消所有窗口保留当前窗口 |
| Ctrl+方向键 | 以1个单元格为单位移动边缘以调整当前窗格大小 |
| Alt+方向键 | 以5个单元格为单位移动边缘以调整当前窗格大小 |
vim 使用技巧 [#](https://pengfeixc.com/blogs/developer-handbook/vim-shortcuts#vim 使用技巧)
下面的命令是我常用的一些快捷键操作,我使用的编辑器是 vscode,安装了 vim 插件。
如何在 vscode 中使用 vim?可以看看我的 vscode 配置
光标移动 #
hjkl:左下上右gj和gk:移动至下一个或者上一个物理行,当一行出现 linewrap 时,使用j和k并不能按照视觉看到的一行进行移动{:跳转至向上寻找的第一个段落首部的前一行}:跳转至向下寻找的第一个段落尾部的后一行(:跳转至向上寻找的第一个段落首部的所在行):跳转至向下寻找的第一个段落尾部的所在行w:下一个单词开头b:上一个单词开头e:下一个单词结尾ge:上一个单词结尾gg:跳转到第一行G:跳转到最后一行<number> + gg:跳转到第 number 行:<number>:跳转到第 number 行%:匹配对应括号,并进行跳转*和#:匹配当前光标所在的单词,移动光标到下一个或上一个
f、F、 t 和 T,行内光标跳转 [#](https://pengfeixc.com/blogs/developer-handbook/vim-shortcuts#f、F、 t 和 T,行内光标跳转)
f:当前行跳转到光标后的指定字符,按;跳转到下一个指定字符F:当前行跳转到光标前的指定字符,按;跳转到下一个指定字符t:当前行跳转到光标后的指定字符前的一个字符,按;跳转到下一个指定字符前一个字符T:当前行跳转到光标前的指定字符后的一个字符,按;跳转到下一个指定字符后一个字符
一般,我只用 f 和 F。
模式切换 #
v:normal 模式进入 visual 模式 V: normal 模式进入 visual 模式,并选中当前行 i: normal 模式进入 insert 模式,光标出现在当前选中字符前 I: normal 模式进入 insert 模式,光标出现在行首 a: normal 模式进入 insert 模式,光标出现在当前选中字符后 A: normal 模式进入 insert 模式,光标出现在行尾 esc: 从 visual 和 insert 模式退回到 normal 模式 o:在当前行下方插入一行,并进入 insert 模式 O:在当前行上方插入一行,并进入 insert 模式
插入、删除、复制、粘贴 #
在模式切换中已经包含了插入的相关快捷键。
gi:在上一个做出变化的地方进入插入模式x:删除当前光标所在的字符dd:删除当前行cc:删除当前行,并进入 insert 模式D:删除从当前光标至行尾的内容C:删除从当前贯标至行尾的内容,并进入 insert 模式yy:复制当前行Y:与yy相同yl:复制当前光标下的字符yas:复制一个句子yap:复制一个段落p: 粘贴剪切板至光标后P:粘贴剪切板至光标前gP: 与P相同,只不过将光标置于粘贴内容的后面gp: 与p相同,只不过将光标置于粘贴内容的后面cw:删除从光标所在位置后到一个单词的结尾,并进入 insert 模式(同理可以用dw删除,但是不进入 insert 模式)c$:删除从光标所在位置后到本行结尾,并进入 insert 模式(同理可以用d$删除,但是不进入 insert 模式)r:替换当前光标下的字符,按下r,然后输入一个字符,用来替换当前字符v + <select area> + <action>:可以使用 v 进入 visual 模式,然后选中区域,最后使用y、c、d和r对选中区域进行操作。
<command><pos>模式:<command>可以是y、d、c等,(可以用于光标跳转的一系列字符) 可以是w(一个单词的结尾)、$(行尾)、^(行首第一个非空字符)、b(单词的开头)、0(行首) 等等。
<verbs><adjectives><objects>模式:你可以将 operator(y,d,c)作为 verbs,count、a 和 i 作为 adjectives,移动(hjkl、w、$、^、b、0等)作为 objects,例如:
d3l: 删除光标右侧三个字符dl:adjectives 可以省略,所以dl等价于d1ldiw:删除光标下的单词不包括周围的空格
代码折叠 #
zc:折叠代码zo: 展开代码zM: 全部折叠zR: 全部展开
窗口移动 #
(1)移动当前所在行的位置
zz:将当前光标所在行移动到窗口中间zt: 将当前光标所在行移动到窗口顶部zb: 将当前光标所在行移动到窗口底部
(2)行移动
ctrl + e:一行一行向下移动ctrl + d:向下移动窗口显示行数的一半ctrl + y: 一行一行向上移动ctrl + u: 向上移动窗口显示行数的一半
分屏操作 #
(1)创建分屏
使用命令:
:split [file] 或者 :sp [file]:添加一个横屏 :vsplit [file] 或者 :vsp [file]:添加一个竖屏
使用快捷键:
ctrl + w s:以当前文件添加一个横屏 ctrl + w v:以当前文件添加一个竖屏
(2)分屏切换
ctrl + w <arrow> 或者 ctrl + w <hjkl> :将光标移动到指定方向的分屏
(3)关闭屏幕和分屏
:only:只保留当前分屏,关闭其他分屏 ctrl + w c:关闭当前窗口 ctrl + w q: 关闭当前窗口,若只有一个分屏,则退出 vim ctrl + w o: 关闭其他窗口
(4)增加屏幕高度
crtrl + w +:增加高度 ctrl + w -:减小高度
多光标操作(块操作) #
- 使用
ctrl + v进入块操作 - 可以使用
hkjl、$等来插入多光标和移动光标 - 使用
I和A进入编辑
同样可以使用 v 进入 visual 模式,选中一些行,然后按 A 在每行结尾插入光标进行编辑。
visual 模式下的格式化操作 [#](https://pengfeixc.com/blogs/developer-handbook/vim-shortcuts#visual 模式下的格式化操作)
v 进入 visual 模式,进入 visual 模式后,可以通过 hjkl 选中一些行。可以对选中的行做如下操作。
J:把所有行连接起来变成一行<或>:左右缩进=:自动缩进,格式化代码(非常 nice)
查找和替换 #
替换格式如下,支持正则表达式。
:[range]s/<pattern>/[string]/[flags] [count]
该命令表示在 range 的每一行中搜索pattern,并将其替换为 string。 count是一个乘以命令的正整数。
(1)查找
/<pattern>:高亮查找到的内容/\C<pattern>:大小写敏感/\c<pattern>: 忽略大小写/\<<pattern>\>: 整词匹配,注意这里前面是修饰符\<,后面是修饰符\>,两个组合表示整词匹配(whole word match)*:向下查找当前光标下的 word#:向上查找当前光标下的 wordn:跳转到下一个查找到的内容:nohl:取消高亮
(2)当前行替换
:s/foo/bar/`:替换当前行查到的**第一个** `foo`,并将其替换为 `bar` `:s/foo/bar/g`:替换当前行查到的所有 `foo`,并将其替换为 `bar
(3)全文件替换
:%s/foo/bar/`:替换当前文件中所有行的**第一个** `foo`,将它们替换为 `bar` `:%s/foo/bar/g`:替换当前文件中所有行的 `foo`,将它们替换为 `bar
(4)c flag
:%s/foo/bar/gc使用 c 标记可以依次确认每个替换。会弹出 replace with foo(y/n/a/q/l)? 确认对话框,按 y 替换匹配项,或按 l 替换匹配项并退出。 按 n 跳过当前匹配,按 q 或 Esc 退出替换。 a 选项替换匹配项和所有剩余匹配项。
(5)i flag 开启大小写敏感
:s/foo/bar/gc`: `foo` 不会匹配 `Foo
(6)指定查询范围
:3,10s/foo/bar/g:查询范围为第三行到第十行,将该范围内的 foo 替换为 bar :.,$s/foo/bar/:查询范围为当前行到最后一行,将该范围内的 foo 替换为 bar,. 表示当前行,$ 表示最后一行 :.,+4s/foo/bar/g:查询范围为从当前行开始往下数四行(总共四行),将该范围内的 foo 替换为 bar,. 表示当前行,+4 表示接下来的四行
<start position><command><end position> #
例如 0y$,表示拷贝当前行。
0:先到行首y: 从<start position>开始拷贝,这里是行首$:表示一直拷贝到行尾
" hello "
<command><a | i | s><obj> #
s需要插件支持,vscode-vim 自带这个功能
a 表示 around,i 表示 inner,s 表示 surround,command 可以是 d c y,obj 可以是引号、双引号、w 和 t,t 表示 tag,对 html 这种标记语言比较有用
diw:删除单词,不包括单词周围的符号,例如" word ",光标在w,删除后变成了" "daw:删除当前单词,包括周围的空白字符,例如" word ",光标在w,删除后变成了""da": 删除双引号中间的内容,包括双引号本身,例如" word ",光标在w,删除后变成了 ``di": 删除双引号中间的内容,不包括双引号本身,例如" word ",光标在w,删除后变成了""ds":删除当前单词周围的双引号,例如" word ",光标在w,删除后变成了w
如果把上面的 command d 换成 c,那么删除后会进入到插入模式。
s` 对写 html 这种标记语言非常有用,例如将下面的 `div` 改成 `p`,可以使用 `cstt`,然后输入 `p`,`c` 表示 `change
<div>
这是一个段落
</div>