码迷,mamicode.com
首页 > 系统相关 > 详细

VIM

时间:2019-12-08 10:52:46      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:定义函数   文件路径   检查   标示   +=   nes   类型   缓冲区   fread   

  • zz 保存退出
  • () {} 快速移动
  • g # 数字 跳转到#行

  • = 自动缩进
  • ctrl+a 找下一个数字并加1
  • ctrl+x 找下一个数字并减1
  • gu 转换为小写
  • gu 转换为大写
  • g~ 转换大小写
  • c 修改
  • d 删除
    • d/pattern 删除到匹配的字符前
  • g 缩进之后的所有行

  • 代码折叠
    • zfn n折叠的行数
    • zo 取消折叠
  • .命令 不需要:
    • 执行之前的操作
    • 如果时插入
    • 则执行插入模式下的所有操作
  • f[char] 查找字符
    • 按; 继续查找下一个
    • 按, 返回上一个
  • F[char] 反向查找

  • t[char] 下一个字符的前一个字符
  • T[char] 反向查找

  • qx[这里记录一些操作]q
    • @x 重复执行记录的操作
  • ctrl+r 恢复
  • yt[c] 复制到单词c为止的字符
  • R 替换模式
  • v 可视模式
    • o 切换活动端
  • @: 重复上次的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} 标记位置
    • `{a-zA-Z} 跳回到标记的位置
  • `` 上次跳转动前的位置
  • `. 上次修改的地方
  • `^ 上次插入的地方
  • `[ 上次修改或复制的开始地方
  • `] 上次次改或复制结束的地方
  • `< 上次高亮选取的起始位置
  • `> 上次高亮选取的结束位置
  • % 高亮括号之间跳转 包括(){}[]""‘‘等
  • gi 跳转到上次插入模式光标的位置
  • gf 跳转到文件
    • 如果不是路径引入的可能需要配置
    • 并且需要后缀名
  • "ayiw 把当前单词复制到a寄存器
  • "ap 粘贴a寄存器的内容
  • y{motion} 会将字符剪切到0寄存器
    • 可以使用"0p 粘贴出来
    • 别的操作不能覆盖 0寄存器
  • "_d{motion} 不保存到寄存器的删除
    • 一般的删除其实应该叫做剪切
    • 会将内容保存到无名寄存器
  • "+ 系统剪切板
  • "* 专用寄存器
    • 专用寄存器只在linux中有
  • "% 当前文件名 只读
    • "# 轮换文件名
    • ". 上次插入的文本
    • ": 上次执行的ex命令
    • "/ 上次查找的模式
  • 可视模式中使用p 会替换剪切板中的内容
    • 将原来的内容替换为选中的内容
    • 并将原来的内容复制到选中的区域中
  • 录制的宏可以在可视区域中运行
    • 并行,遇到错误时不会停止,会跳过执行
    • 如果没有选择可视区域,则遇到错误会停下来
    • 不会等所有行执行完
  • 宏追加 如果需要在录制好的宏后面追加指令
    • qa {motion} q
    • qA {motion} q 字母大小写对应
  • :argdo normal @@ 对所有缓冲区的文件执行宏操作
    • :edit! 放弃第一个缓冲区的操作
  • :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 多窗口编辑
    • 可以简写 vs
    • 查找光标所在单词,并移动到单词头部高亮
  • :[range] join 合并成一行
  • :[range] delete 删除多行
  • :[range] yank 复制多行
  • :[range] put 粘贴多行
  • :[range] copy {address} 拷贝到行下
  • :[range] move {address} 移动到行下
  • :[range] normal {commond} 对范围内的行执行命令
    • 可以直接插入字符
    • 可以用i // 注释大批文件
  • :[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 增加编辑的文件
    • 不加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#[0-9]+/ []不需要转义
  • \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 进阶

介绍

  1. ~ 表示没有内容,连空行都没有
  2. 命令模式又称哔哔模式,因为按下ESC会发出哔的一声
  3. 恢复上次存储的内容 :e!
  4. !表示忽略警告
  5. :w! 如果文件已经存在,则覆盖, :w filename
    创建新文件保存
  6. :pre :preserve 强迫系统保存当前缓冲区
  7. S 替换整行 ss也行
  8. R 覆盖模式,替换整行,按enter后进入插入模式
  9. 在插入模式前也可以加数字,能够一次性写
  10. 替换操作也可以加数字 2r || 将原来的两位替换成||
  11. J 将下一行移到这行后面,合并两行
    • 下一行的第一个字符
    • 上一行的第一个字符
  12. zz 该行居中
  13. z+enter 该行到顶部
  14. z- 到底
  15. H 移到屏幕顶部那一行
  16. M 屏幕中央
  17. L 屏幕底部
  18. mH 屏幕顶部往下
  19. nL 底部网上
  20. n| 移动到第n列 中文算2列
  21. ( 当前句子开头
  22. ) 下一句开头
  23. { 段开头
  24. } 段结尾
  25. [[ 节开头
  26. ]] 节结尾
  27. ‘‘ 移动到上次的位置的开头
  28. ctrl+e 向下滚动屏幕
  29. ctrl+y 向上滚动屏幕
  30. vim +n file 从n行开始
  31. vim + file 在最后一行开始
  32. vim +/pattern file 从匹配行开始
  33. vim -c commond file 打开文件后执行命令
  34. vim -R 只读
  35. vim -r 恢复
  36. "b commond 用缓冲区b 执行命令
  37. :.= 显示当前行好
  38. :/pattern/= 显示第一次出现的行号
  39. :%d 删除所有行
  40. 20,.m$ 将20行到当前行移到文件末尾
  41. :%t$ 全文复制粘贴
  42. -n,+m 当前行的前n行,到当前行的后m行
  43. :4;+6 p 显示第四行到第十行
  44. :g/pattern/p 显示匹配文本
  45. :1,$w >> file //
    当前文件追加到另一文件中
  46. :1,$w file //
    当前文件保存到另一文件中
  47. ctrl+b 向上移动一屏
  48. ctrl+f 向下移动一屏
  49. ctrl+d 向下半屏
  50. ctrl+u 向上半屏
  51. :e file 切换当前缓冲区
  52. :e # 切换回上一个文件
  53. ctrl+^
  54. % 表示当前文件名
  55. :1,$s/old/new/gc c每次给出提示
  56. < 开头
  57. > 结尾 abc>
  58. s/text/& &重复前面的text
  59. :~ 重复上一次替换 可以修改要替换的内容 /text
  60. 正则表达式前加:就可以不用转义 :/home/tujiawei
  61. vim file -O10 打开10个
  62. $ 表示行尾 .,+5/$/; 当前行和后5行加上;
  63. \U 字母大写
  64. 循环操作 1,3g/^/ 6,7t$ 复制6,7行到行尾,执行三次
  65. :ab text1 text2 设置命令的缩写将text2缩写为text1
    输入text1后按非字母就可以触发句号顿号等
  66. :unab text1 取消缩写
  67. :ab 列出所有的缩写
  68. :map v dwelp 命令映射
  69. :unmap 取消映射
  70. :map 列出所有映射
  71. 插入模式ctrl+t 增加缩进
  72. :set list 显示特殊字符如tab
  73. vim -m 禁止写入 -z 不能访问外部
  74. :go n 跳转到第n个字节
  75. n split 分割窗口并显示n行
  76. ctrl+ws 水平分割窗口
  77. ctrl+wS 管标置于新窗口
  78. ctrl+wn 打开空白
  79. ctrl+wN 同上
  80. ctrl+wv 垂直分割
  81. ctrl+wr 循环右移
  82. ctrl+wR 循环左移
  83. ctrl+wx 交换同列或同行的位置
  84. ctrl+wH 垂直排列
  85. ctrl+wK 水平排列
  86. ctrl+wJ 底部水平
  87. ctrl+wL 右边垂直
  88. ctrl+wT 到新标签
  89. ctrl+w- 当前窗口减少一行
  90. ctrl+w+
  91. ctrl+> 增加宽度
  92. ctrl+< 减少宽度
  93. edit buffername
    编辑缓冲区,并隐藏当前缓冲区
  94. :window do cmd
    所有缓冲区执行这个cmd
    缩写为windo
    只在打开的缓冲区里有用
  95. :buffer do cmd
    对所有缓冲区有效
  96. ctrl+wgf
    在标签栏打开光标下的文件
  97. 在文件名上 ctrl+wJ 在当前文件上面打开文件
  98. ctrl+wf 同上
  99. 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!