标签:定义函数 文件路径 检查 标示 += nes 类型 缓冲区 fread
- zz 保存退出
- () {} 快速移动
g # 数字 跳转到#行
- = 自动缩进
- ctrl+a 找下一个数字并加1
- ctrl+x 找下一个数字并减1
- gu 转换为小写
- gu 转换为大写
- g~ 转换大小写
- c 修改
- d 删除
g 缩进之后的所有行
- 代码折叠
- .命令 不需要:
- 执行之前的操作
- 如果时插入
- 则执行插入模式下的所有操作
- f[char] 查找字符
F[char] 反向查找
- t[char] 下一个字符的前一个字符
T[char] 反向查找
- qx[这里记录一些操作]q
- ctrl+r 恢复
- yt[c] 复制到单词c为止的字符
- R 替换模式
- v 可视模式
- @: 重复上次的ex命令
- q: 查看输入操作的历史
- ctrl+w+s 水平分割窗口
- ctrl+w+v 垂直分割
- ctrl+w
- = 等宽高
- _最大化高度
- | 最大化宽度
- [n]~_ 设置高度为n行 其中的~ 为ctrl+w
- [n]~| 设置宽度为n行
- ctrl+^ 返回上一个编辑的缓冲区
- ctrl+g 显示当前文件名及状态
- gj 向下移动一屏幕行, 显示的行 而不是实际的行
- gk 同理
- 0 移动到行首
- $ 行尾
- $^ 第一个字符
- w 移动到下一个单词开头
- b 移动到上一个单词开头
- e 移动到下一个单词结尾
- ge 移动到上一个单词结尾
- vi} 在{} 内部选中{}内的所有内容
- a" 选中"" 中的内容
- i> 选中<> 中的内容
- vit 选中 标签里的内容
- a) 或 ab 选中一对括号
- i) 或 ib 括号内部
- a} 或 aB
- i} 或 iB
- a]
- i]
- a>
- i>
- a‘
- i‘
- a"
- i"
- a`
- i`
- at xml
- it xml 标签内部
- viw 选择当前单词
- vaw 当前单词加后一个空格
- iW 当前子串
- aW 当前子串及空格
- is 当前句子
- as 当前句子及空格
- ip 当前段落
- ap 当前段落加空格
- m{a-zA-Z} 标记位置
- `` 上次跳转动前的位置
- `. 上次修改的地方
- `^ 上次插入的地方
- `[ 上次修改或复制的开始地方
- `] 上次次改或复制结束的地方
- `< 上次高亮选取的起始位置
- `> 上次高亮选取的结束位置
- % 高亮括号之间跳转 包括(){}[]""‘‘等
- gi 跳转到上次插入模式光标的位置
- gf 跳转到文件
- "ayiw 把当前单词复制到a寄存器
- "ap 粘贴a寄存器的内容
- y{motion} 会将字符剪切到0寄存器
- 可以使用"0p 粘贴出来
- 别的操作不能覆盖 0寄存器
- "_d{motion} 不保存到寄存器的删除
- 一般的删除其实应该叫做剪切
- 会将内容保存到无名寄存器
- "+ 系统剪切板
- "* 专用寄存器
- "% 当前文件名 只读
- "# 轮换文件名
- ". 上次插入的文本
- ": 上次执行的ex命令
- "/ 上次查找的模式
- 可视模式中使用p 会替换剪切板中的内容
- 将原来的内容替换为选中的内容
- 并将原来的内容复制到选中的区域中
- 录制的宏可以在可视区域中运行
- 并行,遇到错误时不会停止,会跳过执行
- 如果没有选择可视区域,则遇到错误会停下来
- 不会等所有行执行完
- 宏追加 如果需要在录制好的宏后面追加指令
- qa {motion} q
- qA {motion} q 字母大小写对应
- :argdo normal @@ 对所有缓冲区的文件执行宏操作
- :put a 将宏放到编辑器中
"ay$ 将宏保存到a
插入模式
- ctrl+h 删除前一个字符
- ctrl+w 删除前一个单词
- ctrl+u 删至行首
- ctrl+[ 同Esc 模式切换
- ctrl+o 切换到普通-插入模式
- ctrl+r = 运算
- ctrl+v 后面加数字
插入字符,可以加特殊字符,需要知道对应的数字
命令行模式
- :w 保存当前修改
- 如果没有权限
- 可以执行以下操作
- :w !sudo tee % > /dev/null
- 最后选择L
- :x 保存并退出
- :r file 读取其他文件的内容(追加)
- 文本替换
- 1,3 s/text1/text2 替换1-3行 text1 为 text2 只会替换一个
- 1,3 s/txt1/txt2/g 替换1-3行 所有 txt1
- 3 s/txt1/txt2 只替换第三行
- % s/txt1/txt2/g 替换所有txt
- % s/txt1/txt2/i 忽略大小写
- 分割符可以不是/ 如 @
- 标志位c 给出确认提示
- n 抑制替换行为
- :vsplit filename 多窗口编辑
- :[range] join 合并成一行
- :[range] delete 删除多行
- :[range] yank 复制多行
- :[range] put 粘贴多行
- :[range] copy {address} 拷贝到行下
- :[range] move {address} 移动到行下
- :[range] normal {commond} 对范围内的行执行命令
- :[range] t {address} 复制当前行到 指定位置
- :[range] move {address} 移动 可以简写成:m
- :[range] global/{pattern}/[cmd] 对匹配行执行命令
- .表示当前行, 默认显示当前行
- % 文件中所有行
- $ 最后一行
- range 可以写正则表达式, 之后可以用数字做偏移
- //+1,/</html>-1 p
- ctrl+r + ctrl+w 可以输入光标所在单词
- :read! {cmd} 将命令的输入写入文件
- :write !sh 在shell 中执行缓冲区中的每一行
- :write ! sh 同上
- :write! sh 保存到sh文件中
- :[range] ! {cmd} 可以执行外部命令,如sort
- :bprevious :bnext :bfirst blast 切换缓冲区
- :buffer filename 同上
- :args filename 增加编辑的文件
- :close 关闭当前活跃窗口
- :only 只显示当前窗口,合并为一个,其他隐藏
- :lcd {path} 设置当前窗口的本地工作目录
- :winlcd {path} 设置所有窗口的本地工作目录
- :tabedit {filename} 打开标签页
- :tabc[lose] 关闭标签页
- :tabo[nly] 关闭其他
- [n]gt 标签页之间跳转 从1开始
- :tabn[ext] {n} 跳到下n页
- :tabp[revious] {n} 跳到上n页
- :tabmove {n} 重拍标签页
- :edit . 打开文件管理器,并显示当前工作目录 (:e .)
- :Explore 打开文件管理器,并显示活动缓冲区所在目录 (:E)
- :jumps 查看跳转的历史
- :reg {regname} 查看寄存器中保存的内容
- 查找时用\C 可以强制区分大小写
- 查找时用\c 可以强制不区分大小写
- \v参数用来表示正则表达式内的所有字符都有特殊含义
- \V 使用原义 不自动转义
- / 里面不加内容,使用上一次的内容
- ? 同上,可以改变查找的方向
- :g/pattern/{motion} 全局操作,匹配行
- :v/pattern/{motion} 全局操作,除匹配行
- :sort 对选中内容进行排序,按ascii 顺序
- :g/pattern/[range][cmd]
插件
- ctags
- ctags filename 生成索引
- :set tags? 查看当前文件的索引位置
- ctrl+] 跳转到声明
- g+ctrl+] 全局找多个声明
- ctrl+t 返回
- ctags -R 递归生成索引
- 有多个声明时, :tselect 选择列表
- :tnext :tprev :tfirst :tlast
- :tag keywork 也可以实现跳转
- :tjump
- :pop 反向遍历
- :tag 正向遍历
- Quickfix
- :make 编译代码
- :cnext :cprev :cfirst :clast
- :cnfile 下一个文件的第一个
- :cpfile 上一个文件的最后一个
- :cc N 调到第N 个
- :copen 打开quickfix窗口
:cclose 关闭
- ctrl+n 普通关键字 (n 和 p 可以正向反向选择)
- ctrl+x+n 当前缓冲区竿见自
- ctrl+x+i 包含文件关键字
- ctrl+x+] 标签文件关键字
- ctrl+x+k 字典查找
- ctrl+x+l 整行补全
- ctrl+x+f 文件名补全
- ctrl+x+o 全能补全
- ctrl+y 确认选择
- ctrl+e 还原最早输入
- ctrl+h 从当前匹配项中删除一个字符 (退格)
- ctrl+l 增加一个
- set spell 打开拼写检查
- [s ]s 可以在错误之间进行跳转
- [s 上一处
- ]s 下一处
- z= 获得建议
- zg 把当前单词添加到拼写文件中
- zw 把当前单词从拼写文件中删除
- zug 取消上面两个操作
- set spelllang=en_us 设置拼写检查的语言
ctrl+x+s 反向检查错误并给出正确提示
vim 进阶
介绍
- ~ 表示没有内容,连空行都没有
- 命令模式又称哔哔模式,因为按下ESC会发出哔的一声
- 恢复上次存储的内容 :e!
- !表示忽略警告
- :w! 如果文件已经存在,则覆盖, :w filename
创建新文件保存
- :pre :preserve 强迫系统保存当前缓冲区
- S 替换整行 ss也行
- R 覆盖模式,替换整行,按enter后进入插入模式
- 在插入模式前也可以加数字,能够一次性写
- 替换操作也可以加数字 2r || 将原来的两位替换成||
- J 将下一行移到这行后面,合并两行
- zz 该行居中
- z+enter 该行到顶部
- z- 到底
- H 移到屏幕顶部那一行
- M 屏幕中央
- L 屏幕底部
- mH 屏幕顶部往下
- nL 底部网上
- n| 移动到第n列 中文算2列
- ( 当前句子开头
- ) 下一句开头
- { 段开头
- } 段结尾
- [[ 节开头
- ]] 节结尾
- ‘‘ 移动到上次的位置的开头
- ctrl+e 向下滚动屏幕
- ctrl+y 向上滚动屏幕
- vim +n file 从n行开始
- vim + file 在最后一行开始
- vim +/pattern file 从匹配行开始
- vim -c commond file 打开文件后执行命令
- vim -R 只读
- vim -r 恢复
- "b commond 用缓冲区b 执行命令
- :.= 显示当前行好
- :/pattern/= 显示第一次出现的行号
- :%d 删除所有行
- 20,.m$ 将20行到当前行移到文件末尾
- :%t$ 全文复制粘贴
- -n,+m 当前行的前n行,到当前行的后m行
- :4;+6 p 显示第四行到第十行
- :g/pattern/p 显示匹配文本
- :1,$w >> file //
当前文件追加到另一文件中
- :1,$w file //
当前文件保存到另一文件中
- ctrl+b 向上移动一屏
- ctrl+f 向下移动一屏
- ctrl+d 向下半屏
- ctrl+u 向上半屏
- :e file 切换当前缓冲区
- :e # 切换回上一个文件
- ctrl+^
- % 表示当前文件名
- :1,$s/old/new/gc c每次给出提示
- < 开头
- > 结尾 abc>
- s/text/& &重复前面的text
- :~ 重复上一次替换 可以修改要替换的内容 /text
- 正则表达式前加:就可以不用转义 :/home/tujiawei
- vim file -O10 打开10个
- $ 表示行尾 .,+5/$/; 当前行和后5行加上;
- \U 字母大写
- 循环操作 1,3g/^/ 6,7t$ 复制6,7行到行尾,执行三次
- :ab text1 text2 设置命令的缩写将text2缩写为text1
输入text1后按非字母就可以触发句号顿号等
- :unab text1 取消缩写
- :ab 列出所有的缩写
- :map v dwelp 命令映射
- :unmap 取消映射
- :map 列出所有映射
- 插入模式ctrl+t 增加缩进
- :set list 显示特殊字符如tab
- vim -m 禁止写入 -z 不能访问外部
- :go n 跳转到第n个字节
- n split 分割窗口并显示n行
- ctrl+ws 水平分割窗口
- ctrl+wS 管标置于新窗口
- ctrl+wn 打开空白
- ctrl+wN 同上
- ctrl+wv 垂直分割
- ctrl+wr 循环右移
- ctrl+wR 循环左移
- ctrl+wx 交换同列或同行的位置
- ctrl+wH 垂直排列
- ctrl+wK 水平排列
- ctrl+wJ 底部水平
- ctrl+wL 右边垂直
- ctrl+wT 到新标签
- ctrl+w- 当前窗口减少一行
- ctrl+w+
- ctrl+> 增加宽度
- ctrl+< 减少宽度
- edit buffername
编辑缓冲区,并隐藏当前缓冲区
- :window do cmd
所有缓冲区执行这个cmd
缩写为windo
只在打开的缓冲区里有用
- :buffer do cmd
对所有缓冲区有效
- ctrl+wgf
在标签栏打开光标下的文件
- 在文件名上 ctrl+wJ 在当前文件上面打开文件
- ctrl+wf 同上
- ctrl+wc 隐藏文件,不关闭也不保存,只是不显示了
配色 沙漠?
colorscheme desert
返回时间信息
内置函数 strftime(‘%H‘, time) 第二个参数可选
if strftime("%H") < 10
colorscheme darkblue
elseif strftime("%H") < 18
colorscheme default
else
colorscheme darkblue
endif
变量
b: 单一缓冲区
w: 单一窗口
t: 单一分页
g: 全局变量
l: 函数内
s: 来源脚本内
a: 函数参数
v: vim变量,也是全局的,由vim控制
如果没有定义范围,则默认全局,函数内默认 l
变量类型
number
string
funcref 函数引用
list 列表
dictionary 字典
. 字符串连接
let str = "World"
echo "Hello " . str
execute 字符串当做命令来执行
let colorscheme = ‘darkblue‘
execute "colorscheme " . colorscheme
函数
自定义函数首字母需要大写
function Funcname(arg1, arg2...)
endfunction
call Funcname(arg1, arg2...) 执行函数
var default 定义一个叫var的全局变量
let g:var = ‘xxx‘ 定义一个var全局变量并赋值
数组定义
[1, 2, 3]
自动命令
BufNewFile 开始新文件
BufReadPre 移到新缓冲区前
BufRead, BufReadPost 读入文件后触发
BufWrite, BufWrite 写入文件前触发
FileType 设置filetype后触发
VimResized 改变大小时触发
WinEnter, WinLeave 进出窗口时触发
CursorMoved, CursorMovedI 进入正常,插入模式时触发
autocmd [group] event pattern [nested] command
exists() 判断变量是否存在
exists(‘b:var‘)
filetype detect 文件类型检测命令
&filetype 可以知道一个文件的类型
:set filetype 查看文件类型
自动命令组
augroup groupname
...cmd
augroup END
新文件检测
augroup newFileDetection
autocmd CursorMovedI * call CheckFileType()
augroup END
autocmd! [group] [event] [pattern]
! 表示删除相关联的命令
augroup! groupname
删除自动命令组
取消新文件检测
autocmd! newFileDetection
zc 创建折叠 indent
zf 创建折叠 manual
zd 删除折叠 去掉折叠,并不删除文本
ze 删除折叠
zr 增加缩进层级 原来2层缩进,现在需要3层
zm 减少缩进层级
改变外观的
colorscheme
highlight
background
highlight identifier guifg=red 重新定义标示符颜色
自定义已有的配置 在 after 目录下写 *.vim
~/.vim/after/syntax
set runtimepath+=~/.vim/after/syntax 加文件路径
syntax case ignore 高亮忽略大小写
VIM
标签:定义函数 文件路径 检查 标示 += nes 类型 缓冲区 fread
原文地址:https://www.cnblogs.com/tujw/p/12004625.html