vim 常用命令,会持续更新

================入坑 vim 学习笔记 ============

================ 移动 ===============

jkhl 上下左右

单词之间移动
e 移动到下一个单词尾部
w 移动到下一个单词头部
b/B 移动到上一个单词头部

2e 向后移动两个单词到尾部
2w 向后移动两个单词到头部
0 直接移动到行尾
$ 直接移动到行首
^ 直接移动到行首第一个非空白字符
g_ 直接移动到行尾的非空白字符

G 移动到当前文件尾部
gg 移动到当前文件头部

ctrl + o 返回上次编辑的地方

24gg  跳转到 行号为24 的位置

H 跳转到文件开头
M 跳转到文件中间
L 跳转到文件尾部

:q 退出
:qa 退出所有窗口
:q! 强制退出
:w 保存
:wq 保存并退出


=========== 翻页 ===============

ctrl + u 向下翻页
ctrl + f 向上翻页
zz 将光标位置移动到屏幕中间

=========== 快速跳转到单词字符 ============

fm 跳转到当前行的 第一个以m 开头的单词的字符上
tm 跳转到当前行的 第一个以m 开头的单词的字符前
;, 可以用来切换上一个下一个
Fm 从行尾向前搜索, ;, 用来切换上一个下一个

============= 进入编辑模式 =============

a 当前光标所在位置后边插入
i 当前光标所在位置前插入
o 当前光标所在行下边插入
A 当前行末尾插入
I 当前行开头插入
O 当前行上边插入

============= v 进入可视模式 ==============

v 或者 V 都可以进入可视化模式
切换方向键,可以选中文字。也可以使用 e w 键进行选中然后输入d 进行删除操作,也可以进行其他操作
V 选中光标所在整行,切换方向键,可以选中,然后操作,或者 y 复制,p 粘贴
ctrl + v 然后切换方向键,进行方块选择

====================== 插入模式下技巧==================

编辑模式下不用按esc退出编辑模式,可以直接使用:

ctrl + h 删除上一个字符
ctrl + w 删除上一个单词
ctrl + u 删除一整行

gi 命令可以再编辑完成后,退出到normal模式后,光标移动到其他位置,然后输入gi 快速回到上次编辑的位置

====================== 删除 ====================

dd 删除一整行
dw 删除一个单词
x 删除一个字符
2x 删除两个字符

r 替换当前光标位置的字符
R 以当前光标位置为起始,开始替换字符

s 删除当前字符,并进入 insert 模式
S 删除整行

cw 删除单词,
所有被删除的内容都会暂时存放到寄存器,移动光标后 按 p 可以粘贴到其他地方去 

====================== 复制 ====================

yy 可以复制一行 
yiw 复制一个单词
v + jkhl + y 复制多行
V + jkhl + y 复制多行
ctrl + v + jkhl + y 复制多块
"+ 访问系统剪切板,吧内容复制到 系统剪切板,然后在vim 外部粘贴内容
如果从外部复制的内容粘贴到vim 使用 " + p 粘贴
如果从外部复制的内容粘贴到vim 比较麻烦,可以使用
:set clipboard=unnamed 设置以后,可以直接按 p 就能直接粘贴到vim 操作的文件中
在insert 模式下粘贴的话 ctrl + R + 加号, 可以粘贴进去

====================== 替换 =====================

:s/old/new/g  当前行内的所有old 替换成new
:% s/old/new/g 当前文件内所有 old 替换成new
:1,4 s/old/new/g 1--4 行内所有的old 替换成new(在范围内替换)
:1,4 s/old//n 统计1--4行内old 单词出现的总次数
:% s/\<index\>/home/g 通过正则表达式替换匹配,index 开头的单词
:/old 回车,查找当前文件中的所有old 单词,输入 :set hls 可以设置高亮。

======================= 搜索 ==================

:/world 搜索 world 单词 然后输入n / N 用来匹配寻找上一个下一个
:set hls 设置检索高亮
:noh 取消所有选中高亮的内容

====================== 切换到normal 模式 =================

Esc
ctrl + c (有可能会中断一些其他插件,或者进程,不建议使用)
ctrl + [ 

====================== Buffer window Tab ===============

Buffer 就是vim 打开文件后,文件会保存到内存中的一个缓冲区,我们改动的内容不会真正的保存,是暂时保存在缓冲区内,等输入 :w 后才会真正保存
vim a.txt 打开 a.txt 文件,在a.txt 内输入 :e b.txt 就会同时打开ab.txt 两个文件, :ls 可以查看当前窗口中打开了几个文件,也就是打开了几个缓冲区。
:b 1 就是切换到第一个缓冲区,也就是a.txt 文件 :b 2 就是切换到第二个缓冲区 b.txt 文件 
:e filename 就是打开一个新的缓冲区 
:b Buffername 就是切换缓冲区

window 就是窗口的可视化区域
:vs 垂直分割
:sp 水平分割
ctrl + w + w 循环切换窗口
ctrl + w + j 向下切换窗口
ctrl + w + k 向上切换窗口
ctrl + w + h 向左切换窗口
ctrl + w + l 向右切换窗口

在当前窗口中输入 :e b.txt 打开b.txt 文件
ctrl + w + L 切换窗口内容

Tab 的不常用,没有记

====================== object text 文本对象操作 ==========

vaw 选中文本对象(单词)以及后边的空格
viw 选中文本对象(单词)不包含空格 

cd 从光标位置 删除单词
daw 删除单词和后边的空格
vi" 选中双引号中的单词 选中后 x 可以删除
ci" 直接删除双引号中的单词,不管光标在双引号中的哪里

v 是指的可视化模式,选中状态,
i 表示 insert 插入模式," 表示要选中的位置
c 指的是 change 修改,

====================== 宏命令 ==================

宏的概念: 宏可以看成是一系列命令的集合,
我们可以通过宏 录制 一系列的操作,然后回放。
宏可以非常方便的把一系列命令用在多行文本上。
使用: 我们使用 q 来开始录制,使用 q 结束录制
q{
     register} 选择要保存的寄存器,把录制的命令保存其中,比如 qa 把命令保存到名称a 的寄存器中。
使用 @{
     register} 来回放寄存器冲保存的一系列命令。 比如 @a 开始回放

使用V选中一行,然后上下移动选中多行或者G选中剩下的所有文件然后 :normal @a 回车,自动批量执行。

如果要批量在一个文件中插入 100 行相同的代码,也可以使用宏:
先在normal 模式下 按下 qa 开始录制,并且把录制的操作存到a寄存器中,
然后 i insert 模式 开始写代码<a>我是a标签</a> 然后回车
然后esc 退出insert模式,q 结束录制,

按下 100@a 会自动插入.
按下 @a 是使用一次录制的操作,
前边输入100 表示执行100次

===================== 自动补全 ==================

ctrl + n 出现过的代码补全,比如输入 w 按下 ctrl + n 就会出现当前文件中出现的 w 开头的单词
ctrl + f 引入文件名的补全, 比如输入 ./w 按下 ctrl + f 就会出现当前目录下 w 开头的文件列表

===================== 批量开头结尾操作 ===========

比如开头结尾都加 " 引号

V选中一行,然后G 移动到文件底部并且选中,然后 :normal I"  I"是开头插入"
V选中一行,然后gg 移动到文件头部并选中, 然后 :normal A"  A"是结尾插入"

====================== 分屏打开多个文件 =========

vim a.js b.js -O 就会分屏打开两个文件。

====================== 设置命令==================

:set number 设置行号
:syntax on 设置代码高亮

====================== 设置vim 主题 =================

当前文件中 :colorscheme 显示当前使用的主题颜色,默认是default。
输入 :colorscheme <ctrl + d> 显示所有主题
输入 :colorscheme blue (主题名) 使用主题。

从网上下载别人的主题:

google 搜索 vim colorschemes 会找到很多vim 的主题配置文件,随意点击一个进去

然后iTerm 终端切换到 ~ 目录下, git clone 下来主题库, 比如主题库名称是 vim-hybrid 
然后查看 ls ~/.vim/ 下是否有colors 文件,如果没有 mkdir ~/.vim/colors 创建一个colors 文件夹。这个文件就是用来存放vim主题的。
然后通过 cp ./vim-hybrid/colors/hybrid.vim ~/.vim/colors 然后回车 把文件拷贝到~/.vim/colors 文件中
然后vim 打开一个文件夹 输入:colorscheme <ctrl + d> 查看所有主题中是否有 hybrid 主题,有的话说明主题已经被读取到,
使用 :colorscheme hybrid 回车可以使用hybrid 主题了。
上边的是使用colorscheme 命令临时使用,关闭文件后主题会自动回到default 主题。后边会写使用 .vimrc 文件持久配置。

===================== 基本映射 ====================

使用map 可以实现映射,比如:map - x 然后按 - 就可以实现删除字符
:map <space> viw 使用空格就可以选中一个单词 ,viw 是选中单词的命令
:map <c-d> dd 使用ctrl + d 就可以实现 dd 删除一行的操作。

===================== 模式映射 ===================

vim 常用模式 normal/visual/insert 都可以实现映射
用 nmap/vmap/imap 定义映射只在normal/visual/insert 分别有效
使用 vmap \ U 定义visual 模式下选中单词后按下 \ 可以吧小写转换成大写。
u 可以转换会小写。 

但是 nmap/vmap/imap 这种系列的映射有递归的风险,也就是有可能会冲突
比如 :nmap - dd :nmap \ - 这样设置以后,我们按下 \ 以后,映射会追溯到最底层的映射 dd 命令上,执行删除一行操作。- 按下也会执行 dd 操作,这样:nmap \ - 映射就失效了。

为了避免递归映射风险,发生映射冲突,建议使用非递归映射:
*map 改成 nnoremap/vnoremap/inoremap   nore代表的是非递归。
任何时候都应该使用非递归映射,无论是对自己,还是对插件都会更友好,避免冲突。

这里推荐一本书,笨方法歇息vim https://www.kancloud.cn/kancloud/learn-vimscript-the-hard-way/49321 
书中的配置特别全。可以用来查询

====================== 更改.vimrc 文件后更新文件 ============

:source ~/.vimrc
或者重新进入vim

这些命令都是通过学习下边的课程做记录学习到的,
课程连接
感兴趣的同学可以学习下。
此博客以后还会继续更新vim 常用命令。
如果其他同学有更好的命令,可以再下边留言我,写的不对的地方也欢迎拍砖。

你可能感兴趣的:(vim,vim)