VIM & Tmux
最近一直在学VIM相关的东西,也看了一些视频,现在记录下
我的使用场景
我一直是在windows上做开发,公司内网也连不上外边,现在做法是上班时使用git bash,拷贝相关vim的插件,IDEA写java代码装上ideavim。
vscode也试过vim插件,设置里边可以指定.vimrc文件,但用起来特别卡顿,特别是代码hjkl移动时还会有延迟,可能的确是公司电脑配置实在太差了。。
回到自己宿舍电脑在WSL2上用vim和tmux。
看油管上vim的一些教学,他们用得实在是丝滑,还是得多练。
VIM & Tmux 安装
- linux上比较容易,apt的执行
# apt get install vim; apt get install tmux
- windows的得在wsl上执行,或者git bash自带了vim,tmux需要先安装,用pacman 安装 tmux后,具体可以搜
windows pacman安装tmux
,然后将相关tmux.exe和msys-event-xxx.dll复制到git的目录下,注意git版本不能太低,否则执行tmux没反应。
学习推荐
-
PegasusWang的教学视频,讲的很不错,入门很推荐看这个:初始vim,想说爱你不容易
-
这个也比较全:vim-galore-zh_cn
-
b站这位个性化定制一些,看看他人怎么配的: 上古神器Vim:进阶使用/配置、必备插件介绍
-
从老外教学看下他们视角里边的vim:Mastering the Vim Language
-
The Missing Semester Lecture3-Editor(vim)
VIM命令记录
d => delete
c => change (delete and enter insert mode)
> => indent
v => visually select
y => yank(copy)
s => substitute
ctrl+o/i :向前/后跳转
书签功能:
:mark :列出所有书签
ma :标志当前位置为标签a
'a 或者 `a :跳转到标签a的位置
S: 删除一行并进入
zz:光标所在行显示到屏幕中间
ZZ:保存并退出
goto功能,g命令具体可以看 :help g
gv:选中上次visual模式选中的地方
gi:跳转到上次修改的地方
gd:跳转到定义
gf:跳转到文件
页面查看移动
ctrl+f/b 前后翻一页
ctrl+u/d 前后翻半页
文本搜索
行内:
f/F{char}
跨行:
# * 查找光标当前所在word,前后匹配
/ ? 向下/上查找
n/N 前后匹配
基于word等的编辑
a(around), i(inner), t
w(word),t(tag),p(paragraph), " / { / ( 等一对的符号
搭配使用:diw, ciw, viw, da(, ca(, da{, dt( 等
宏macro:
q{registry} 开始录制宏
@{registry} 使用宏
文本替换(使用substitute命令替换)
:[range]s/{pattern}/{string}/[flags]
flags有g(global), c(confirm), n(number, 报告匹配次数)
eg.
:1,6 s/old/new/g
:%s/old/new/g
:%s/\<quack\>/jiao/g
复制和粘贴
使用:set paste解决粘贴时autoindent缩进问题 :set nopaste取消,或者使用set pastetoggle=<F2>
本地使用共享系统剪切板则无此问题,使用set +=uname
多文件编辑(buffer)
:ls 显示打开的文件列表
:b n 跳转到其他文件
:bp 切换到下个文件
:bd 只关闭当前文件
编辑窗口分割:
<ctrl+w>s 水平分割, <ctrl+w>v 垂直分割
:sp :vs
窗口切换:
<C-w>w 循环
<C-w>h/j/k/l
<C-w>H/J/K/L 移动窗口
块编辑(visual)
v, ctrl+v, shift+v
批量文本前后加文字方法:
(1) ctrl+v, G, I <文字>, <esc>
(2) V, G, :norm I xxx
(3) 宏
vim结合命令的一些操作:
1. 对选中文本排序
:<选中> !sort
2. 对选中文本去重
:<选中> !sort -u
3. 对选中文本执行某个命令
:<选中> !xxx
4. 读入当前目录的所有文件
:r !ls
在新tab中打开文件
<ctrl+w> gf
5.读取http返回值
:r! http GET <url>
6. 在所有数字后加逗号
:g/\d/norm A,
7. 抽取所有private行,复制到当前位置
:g/private/co$ co指copy
8. 给一段列表添加递增序号
<c-v>}kI0,<tab> <esc>gvg<c-a>
vim自动补全:
ctrl+n/p 单词补全
ctrl+x,ctrl+f 文件路径补全
全能补全(插件实现)
.vimrc配置
:h options-list :查看所有vim设置选项quickref.txt
vim键盘映射
nmap/vmap/imap 分别在normal/visual/insert模式分别有效
nnoremap/vnoremap/inoremap 非递归映射
vim插件管理器
如vim-plug,查看相关插件推荐 http://vimawesome.com
VIM键位图示
Tmux命令记录
- session
tmux new -s $session_name
创建会话
tmux attach/a $session_name
切换到会话
<C-b>s
会话切换
<C-b>d
暂时离开会话
<C-b><C-d>
关闭会话 - window
<C-b>
, 窗口重命名
<C-b>c
新建窗口
<C-b>[number]
切换窗口
<C-b>p/n
, 切换window - pane
<C-b>%
竖直创建pane
<C-b>[方向键]
切换pane