vim 笔记


Vim 学习笔记

1. 常用命令

1.1 编辑模式

1.1.1 进入编辑模式

i : 在当前光标下开始插入
a : 在当前光标后面一个位置插入
o : 在当前行下一行开头(新开一行)插入
I : 在当前行开头插入
A : 在当前行行尾插入
O : 在当前行的上一行(新开一行)开头插入

1.1.2 删除

ctrl + h : 删除一个字符
ctrl + w : 删除一个单词
ctrl + u : 删除当前行

1.2. 普通模式

1.2.1 linux快捷键

ctrl + a 移动光标到本行开头
ctrl + b 向前移动一个位置
ctrl + f 向后移动一个位置
ctrl + e 移动光标到本行末尾
ctrl + u 删除本行
ctrl + w 删除一个单词
ctrl + h 删除一个字符

1.2.2 技巧

ctrl + [ 代替 esc 来退出编辑模式
gi 可快速进入上次编辑位置并且进入插入模式

1.2.3 移动

h 左移
j 下移
k 上移
l 右移
w/W 移动到下一个单词的开头
e/E 移动到下一个单词的结尾
b/B 回到上一个单词的开头	// 其中w/e/b的都是代表以非空白符分割的单词,W/E/B 是以空白分割的单词
f + char 可快速跳转到第一要查找的字符位置,使用;来找下一个符合的位置,使用,来找前一个符合的位置
F + char 功能和 f + char 一样,只不过是顺序反过来搜索
t + char 可快速跳转到需要查找的字符前一个位置,也可以使用;和, 
0 数字0 可快速移动光标到行首
$ 移动到行尾
gg 移动到文件的开头
G 移动到文件的结尾
ctrl + o 返回上一个位置
H 快速移动到当前屏幕的开头
M 快速移动到当前屏幕的中间
L 快速移动到当前屏幕的结尾
ctrl + u 上翻页
ctrl + f 下翻页
zz 把当前行置于屏幕中间

1.2.4 删除

x 删除一个字符, 可一次删除多个字符 如: 4x 删除4个
dw/daw 删除一个单词包括单词后面的多个
diw 删除一个单词但是不删除单词后面的多个空格
dd 删除整行 可删除多行 如: 3dd
dt + 操作符(比如",),...任意字符) 删除本行内所有字符直到到达第一个指定字符
d + 0(数字0) 从当前位置删除到行头
d + $ 从当前位置删除到行尾
v 使用v进入单字符选择模式,然后使用左右移动来选择多个字符,然后使用x来删除多个字符
V 使用V进入多行选择模式,使用d来删除多行
u 回退上一步

1.2.5 修改

r + char 替换字符(单次)
R + cahr 从当前位置输入每一个字符将被输入的字符替换
s 删除当前字符,并进入插入模式
S 删除整行并进入插入模式
c + 表达式 执行表达式并进行插入(caw=daw + 插入,ct= dt+ 插入...)
C 删除当前行光标后的所有字符

1.2.6 查询

使用/或者?进行前向或者反向搜索
使用n/N跳转到下一个或者上一个匹配
使用*或者#进行当前单词的前向和后向的匹配

1.3 命令模式(😃

1.3.1 常用命令

:set nu // 设置行号
:set autoindent // 开启自动缩进
:q 退出
:w 保存
:q! 强制退出
:wq 保存退出
:ctrl + p 可查看执行的上一条命令
:r! echo % 当前位置插入本文件文件名
:r! echo %:p 当前位置插入文件全路劲

1.3.2 搜索替换

表达式: 行范围 s/srcStr/totalStr/tag 如: 1,6 s/print/fmt/g
	 : 行范围如果是% 则表示是全文替换 tag: g表示全局范围,c表示确认,可以确认或者拒绝修改,n报告匹配次数但是不会进行替换
也可以用正则表达式进行替换
/Str 搜索结果但是不执行任何操作

1.4 可视模式

1. 在普通模式下按v即可进入可视模式
2. 可视模式下可以进行多选行和多选字符操作
3. 可视模式下可以使用gg和G 等命令
4. 在可视模式下多选后可进入命令模式执行普通模式下的命令如:'<,'> normal I"

1.5 多文件操作

1.5.1 buffer 缓冲区

1. 一个文件对应一个缓冲区
2. 命令模式下打开一个新的缓冲区 e + 文件名
3. ls : 列出当前所有缓冲区
4. 缓冲区切换:
    b + n(数字) 跳转到第几个缓冲区
    bprevious 前一个缓冲区
    bnext 后一个缓冲区
    bfirst 第一个缓冲区
    blast 最后一个缓冲区
    b buffer_name 切换到指定缓冲区(可tab补全)

1.5.2 window 窗口

一个缓冲区可以分割成多个窗口,每个窗口可以打开不同的缓冲区,每个窗口可以被无线分割

窗口分割

ctrl + w + s 水平分割
ctrl + w + v 垂直分割
或者命令模式下
:sp 水平分割 // sp a.py  打开a.py 并 水平分割
: vs 垂直分割 // vs b.py 打开b.py 并垂直分割

窗口切换

ctrl + w + w 窗口到下一个窗口
ctrl + w + h 切换到左窗口
ctrl + w + j 切换到垂直下窗口
ctrl + w + k 切换到垂直上窗口
ctrl + w + l 切换到右窗口

不同窗口不同buffer

切换到指定窗口使用e + buffer 即可

窗口移动

ctrl + w + H 移动到左边
ctrl + w + J 移动到下面
ctrl + w + K 移动到上面
ctrl + w + L 移动到右边

1.6 Vim常用技巧

1. vim a.py b.py -o // 同时打开两个窗口打开两个文件(横向) -O (纵向)
2. ZZ // 普通模式下的保存退出,相当于命令模式下的:wq
3. :source ~/.vimrc // 不退出的情况下修改vimrc使之生效
4. 在可视化模式中选中字符或者单词等后可以使用 U来把选中的字符改成大写,u改成小写
5. :qa 可退出所有窗口

2. vim 的 Text Object

2.1 文本对象操作方式

[number] <commond> [text object]
number 代表此命令操作次数 commond 是命令 d(delete), c(change), y(yank)
text object 文本对象 单词w, 句子s, 段落p

c + i + 标识符  可以快速删除以标识符开始以对应标识符结束的内容,并进行插入操作
v + aw 可视化选择单词 包括空格
v + iw 不包括单词

3. 复制和粘贴

3.1 普通模式下的复制和粘贴

1. y(yank)复制,p(put)粘贴,d和p则实现了剪切复制
2. 也可以在可视模式下选择多个自己想要的字符,按y复制,然后按p粘贴
3. 配合文本对象 使用yiw复制一个单词,使用yy复制一行

3.2 插入模式下的复制和粘贴

1. 当vim 设置成autoindent 时,如果在别处复制的代码粘贴到vim会造成代码缩进错误这是需要设置set paste
2. 当继续编辑时则需要再设置为set nopaste 这样autoindent就会重新起作用

3.3 寄存器

当使用vim进行d,删除或者y复制时,默认把这些数据保存到来无名寄存器中

使用自定义寄存器:

1. "" + 寄存器名字 + d/y 把数据复制到寄存器 // eg: "" + a + yy
2. 查看寄存器 reg a
3. 使用寄存器 "" + a + p

其他寄存器:

1. 复制专用寄存器"0

4. 宏

4.1 宏的使用

1. Vim 使用q 来录制,同时使用q来结束录制 // 录制时需要跟上寄存器名称 如: qa
2. 使用q{register}选择要保存的寄存器 // qa
3. 使用@{register}回放寄存器中保存的命令 // @a

在复杂的操作中使用宏可以大大缩减工作量

5. Vim 补全

1. 使用ctrl + n 和 ctrl + p补全单词 // 如果提示单词多的话再次使用ctrl + n 或者 ctrl +p 选择上一个或者下一个结果
2. 使用ctrl + x ctrl + f补全文件名 // 也可以使用ctrl + n 和 ctrl +p 来进行上下选择
3. 使用ctrl + x ctrl + o补全代码,需要插件 

6. Vim 更换配色

:colorscheme 显示当前配色方案
:colorscheme ctrl + d 来显示所有可用配色方案
:colorscheme + 方案名 来使用配色方案
可以下载网上配色方案如:https://github.com/flazz/vim-colorschemes/tree/master/colors 到
.vim/colors 下这样Vim 就可以识别到该配色方案

7. 使用.vimrc 配置文件

1. vim ~/.vimrc // 编辑或者创建配置文件,所有持久的配置选项都放在这里
2. 常用配置:
 	备注: " 常用设置 
	set number: 设置行号
	set hlsearch: 高亮搜索
	set foldmethod=indent : 设置折叠方式
	let mapleader=',' : 设置"," 为leader
  	inoremap <leader>w <Esc>:w<cr> : 设置按键映射


8. 使用映射

8.1 可递归映射

基本模式映射(也是默认的模式 normal 下的映射)

:map - x : 以-代替x来进行删除字符操作 // 注意这里是在普通模式下修改的映射 非持久化
如果想持久话映射那么:
map - x  // 在.vimrc文件中 

使用其他模式下的映射

:vmap / U // 用/ 代替U 转换大写 同样如果需要持久化需要把命令写入.vimrc
:imap <c-d> <Esc>ddi  //插入模式下的映射,这条命令代表ctrl + d 删除一行并进入插入模式
:nmap 相当于map(vim 默认为normal模式)

8.2 非递归映射

任何时候都应该使用非递归映射

定义:
nnoremap/vnoremap/inoremap :定义非递归映射
inoremap jj <Esc>`^  // 定义非递归映射jj 代替esc ,同时回到编辑位置

9. Vim 插件

常见的插件管理器有: vim-plug, Vundle, Pathogen, Dein.Vim, volt

9.1 使用vim-plug 管理插件

1. vimrc 中添加以下脚手架代码
    call plug#begin('~/.vim/plugged')
    需要安装的插件// 示例: Plug 'mhinz/vim-startify'
    call plug#end()
2. 安装
	命令模式下: PlugInstall vim-startify

9.2 目录管理插件nerdtree

git地址: https://github.com/scrooloose/nerdtree
设置快捷键映射:
	nnoremap <leader>v : NERDTreeFind<cr> 定位文件位置并切换到目录树中所在位置 如:,v
	nnoremap <leader>g : NERDTreeFind<cr> 打开目录树 如:,g
ctrl + w + p 快速切换上一个window
注:所有对window的操作,这个同样适用

9.3 文件模糊搜索工具ctrlp

git 地址: https://github.com/ctrlpvim/ctrlp.vim
快捷键映射:
let g:ctrlp_map = '<c-p>'// 进入vim 直接ctrl + p 就可以搜索文件
配合nerdtree 工具可以实现工作目录快速定位 //,v
使用: ctrl + j 向下移动
使用: ctrl + k 向上移动

9.4 使用easymotion 快速定位字符位置

git 地址: https://github.com/easymotion/vim-easymotion
配置: nmap ss <Plug>(easymotion-s2)
使用:
	1. 在normal 模式下 使用绑定的ss 快捷键激活插件
	2. 然后搜索至多两个字符 这时会出现高亮提示
	3. 选择字母提示的高亮位置输入该字母

9.5 使用vim-surround 来改变成对出现的字符

git 地址: https://github.com/tpope/vim-surround
ds (iw) + keyword // 删除字符 比如: 删除字符双引号 ds + iw + "
cs (iw) + keyword // 改变字符 比如 改变()为[] cs + iw + ]  之所以用]不用[ 避免出现空格
ys (iw) + keyword // 增加字符 比如: 增加双引号 ys + iw + "

9.6 使用fzf.vim 来进行模糊查找

git 地址: https://github.com/junegunn/fzf.vim
Ag[pattern] : 模糊搜索字符串
Files[PATh] : 模糊搜索目录

示例:
搜索文件: :Files . // 列出当前目录所有文件 
		 :Files ./test.py  直接定位到文件 按Esc退出命令模式
搜索字符串: :Ag char
移动: 使用ctrl + j 和 ctrl + k

9.7 使用far.vim 快速搜索替换字符串

git 地址: https://github.com/brooth/far.vim
使用方法:
	:Far char1 char2 **/*.py  // char1 是要被替换的字符串,char2 替换的字符串 **代表上层目录,*.py 该目录下所有的py文件,也可以指定具体的文件名如: cut.py,或者使用*表示所有的文件
	:Fardo  如果检车没有问题直接Fardo 执行命令就替换完成

9.8 使用 go-vim插件

git 地址: https://github.com/fatih/vim-go
1. ctrl + x + o // 全能补全
2. ctrl + n / p //选择下一个或者上一个
3. ctrl + ] // 跳转到引用函数/方法/结构体..定义
4. ctrl + o // 跳转回来
5. ctrl + i // 向前跳
6. :GoFmt // 格式化代码
7. :ReName  // 代码重构,Enter后光标指向的单词即可重命名
8. :GoImports // 自动导包
9. :w //保存后代码自动格式化
10.:GoRun // 运行代码

9.9 使用python-mode

git 地址: https://github.com/python-mode/python-mode

9.10 使用tarbar 快速查看代码大纲

git 地址: https://github.com/majutsushi/tagbar
使用:
	TagbarToggle // 调出代码大纲,再次操作则关闭  定义快捷键<leader>t来代替TagbarToggle

9.11 vim-commentary 快速注释

git 地址: https://github.com/tpope/vim-commentary
命令:
	普通模式:
		gcc : 注释
		gcgc: 	取消注释
	可视模式:
		gc: 注释和取消

10. tmux 使用

10.1 基本开启退出命令

1. 开启会话: tmux new -s test
2. 结束所有会话: tmux kill-server
3. 关闭指定会话: tmux kill-session -t test
4. 重新恢复会话(挂起状态): tmux attach

10.2 常用命令

系统操作:

d 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话
D 选择要脱离的会话;在同时开启了多个会话时使用
? 列出所有快捷键, 按q退出
ctrl + z 挂起当前会话
r 强制重绘未脱离的会话(reload)
s 选择并切换会话在多会话时使用
: 进入命令模式
[ 进入复制模式
] 粘贴
~ 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息

窗口操作:

c 创建新的窗口
p 切换到上一窗口
切换到下一窗口
l 在前后两个窗口切换
w 通过窗口列表切换
, 重命名窗口
. 修改当前窗口编号,相当于对窗口排序
f 在窗口中查找指定文本,匹配的窗口将会出现在列表中,便于窗口切换
& 关闭当前窗口
数字键 切换到指定窗口

面板操作:

" 上下分屏
左右分屏
关闭当前面板
将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板
Ctrl+方向键 以1个单元格为单位移动边缘以调整当前面板大小
Alt+方向键 以5个单元格为单位移动边缘以调整当前面板大小
Space 在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled
q 显示面板编号
O 在当前窗口中选择下一面板
方向键 移动光标以选择面板
{ 向前置换当前面板
} 向后置换当前面板
Alt+o 逆时针旋转当前窗口的面板
Ctrl+o 顺时针旋转当前窗口的面板

10.3 复制模式常用命令:

vi             emacs        功能
^              M-m          反缩进
Escape         C-g          清除选定内容
Enter          M-w          复制选定内容
j              Down         光标下移
h              Left         光标左移
l              Right        光标右移
L                           光标移到尾行
M              M-r          光标移到中间行
H              M-R          光标移到首行
k              Up           光标上移
d              C-u          删除整行
D              C-k          删除到行末
$              C-e          移到行尾
:              g            前往指定行
C-d            M-Down       向下滚动半屏
C-u            M-Up         向上滚动半屏
C-f            Page down    下一页
w              M-f          下一个词
p              C-y          粘贴
C-b            Page up      上一页
b              M-b          上一个词
q              Escape       退出
C-Down or J    C-Down       向下翻
C-Up or K      C-Up         向下翻
n              n            继续搜索
?              C-r          向前搜索
/              C-s          向后搜索
0              C-a          移到行首
Space          C-Space      开始选中
               C-t          字符调序

10.4 常用配置:

# 设置ctrl + x 为命令前缀
  2 set -g prefix C-x
  3 set -g default-terminal "screen-256color"
  4 set -g display-time 3000
  5 set -g history-limit 65535
  6 # 取消 ctrl + c 命令前缀
  7 unbind C-b
  8 # 增加r 为重加载按键 
  9 bind r source-file ~/.tmux.conf \; display "Reloaded!"
 10 # 结束当前会话z相当于 kill session
 11 bind-key z kill-session
 12 # 按键映射
 13 #up
 14 bind-key k select-pane -U
 15 #down
 16 bind-key j select-pane -D
 17 #left
 18 bind-key h select-pane -L
 19 #right
 20 bind-key l select-pane -R
 21 # 分割窗口快捷键
 22 unbind '"'
 23 bind - splitw -v #分割成上下两个窗口
 24 unbind %
 25 bind | splitw -h #分割成左右两个窗口
 26 set-window-option -g mode-keys vi


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM