vim操作备忘录

vim
备忘录

vim的书籍虽然看不不少,可是老是容易忘记,主要是自己操作总结过少,这个博客就主要用来记录一些比较常见的术语和操作,以防止自己再次忘记。

<leader>的含义

  • <leader> 在vim中默认表示" \ "
  • :let mapleader = “-” 可以通过以下命令修改成自己喜欢的键。

<c-p>

  • 以<c-…开头的表示:ctrl + …按键一起按,例如<c-p> 就是ctrl + p 一起键入。

不加载任何vim插件,使用最原始的vim

vim -u NONE -N XXXX.CC

-u NONE 表示不加载.vimrc

-N vim nocompatible vi

windows下的插件均安装在xxxx\xxxx\vim80(版本号)\colors(以颜色主题为例)下

ubuntu下均在~/.vim/colors(以颜色为例),颜色主题启动均以colorscheme monokai 来启动。

ubuntu通过vundle进行管理,主体步骤.vimrc---->通过命令if filereadable(expand(xxx))找到vundle的配置文件,并source启动-------->.vim.bundles------------>set rtp+=xxxx\Vundle.vim 以及call vundle#begin(默认 .vim\bundle)寻找到各类插件

source xxx.vim 用于启动xxx.vim插件

vim中常用配置

  • 退格

  • shiftwidth reindent 操作(<<和>>)时缩进的列数(这里的一列相当于一个空格)

  • tabstop 一个tab键所占的列数,linux 内核代码建议每个tab占用8列

  • softtabstop 敲入tab键时实际占有的列数。

  • expandtab 输入tab时自动将其转化为空格

  • 一般用法 :set shfitwidth = 4 softtabstop = 4 expandtab 换行自动缩进4格,softtabstop表示键入tab按钮实际所占行数,本例所占4列,expandtab使得tab实际不满足所定义列数,则以空格来凑。

  • filetype 根据文件后缀名来确定文件所属类型,可以通过set filetype=cpp来强制制定文件所属类型。

    :filetype on 打开 未改变 未改变

    :filetype off 关闭 未改变 未改变

    :filetype plugin on 打开 打开 未改变

    :filetype plugin off 未改变 关闭 未改变

    :filetype indent on 打开 未改变 打开

    :filetype indent off 未改变 未改变 关闭

    :filetype plugin indent on 打开 打开 打开

    :filetype plugin indent off 未改变 关闭 关闭

    要查看当前的状态,只需输入: >

    :filetype

  • 查看不可见字符

    :set invlist

    :set nolist

  • windows 下的vim设置字体

    c:\Program Files(x86)\Vim下的_vimrc 添加 set guifont=Consolas:h11

    配置文件_vimrc与安装的插件文件夹colors不在一个文件中,其他均在Vim\vim80\ 之下

映射

  • inoremap就只在插入(insert)模式下生效
  • vnoremap只在visual模式下生效
  • nnoremap就在normal模式下(狂按esc后的模式)生效
  • 在vim打开文件norm6al模式下键入 :help nnoremap,得出以下提示
  • :nn[oremap] {lhs} {rhs} |mapmode-n| :nn *:nnorem
  • 在映射命令作用的模式中把键序列 {lhs} 映射为 {rhs}
  • 以YouCompleteMe的映射跳转定义的使用用例如下:
  1. nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳转到定义处 

高效修改符号内的字符

ci’、ci"、ci(、ci[、ci{、ci< - 分别更改这些配对标点符号中的文本内容

di’、di"、di(或dib、di[、di{或diB、di< - 分别删除这些配对标点符号中的文本内容

yi’、yi"、yi(、yi[、yi{、yi< - 分别复制这些配对标点符号中的文本内容

vi’、vi"、vi(、vi[、vi{、vi< - 分别选中这些配对标点符号中的文本内容

it : 选择xml标签内部内容,例如,高亮tags

at:选择一对xml标签,例如,高亮所有内容

将工作区分割成窗口

  • 分割窗口操作
命令 用途
<C-w>s 水平切分当前窗口,新窗口仍显示当前缓冲区
<C-w>v 垂直切分当前窗口,新窗口仍显示当前缓冲器
:sp[lit] {file} 水平切分当前窗口,新窗口中载入{file}
:vsp[lit] {file} 垂直切分当前窗口,新窗口中载入{file}
  • 在窗口间切换
命令 用途
<C-w>w 在窗口间切换
<C-w>h 切换到左边的窗口
<C-w>j 切换到下面的窗口
<C-w>k 切换到上面的窗口
<C-w>l 切换到右边的窗口
  • 关闭窗口
Ex命令 普通模式命令 用途
:clo[se] <C-w>c 关闭活动窗口|
:on[ly] <C-w>o 只保留活动窗口
  • 改变窗口大小
命令 用途
<C-w>= 使所有窗口等高等宽(常用于恢复)
<C-w> - 减少窗口中的一行
<C-w> + 增加窗口中的一行
<C-w>_ 最大化窗口中的行(高度)
<C-w>| 最大化窗口的列
[N]<C-w>_ 窗口中的行(高度)设置为N
[N]<C-w>| 最大化窗口的列设置为N

在标签中切换

浏览Quickfix列表

 命令  用途
:cnext 跳转到下一项
:cprev 跳转到上一项
:cfirst 跳转到第一项
:clast 跳转到最后一项
:cc N 跳转到第N项
:copen 打开quickfix窗口
:cclose 关闭quickfix窗口
:cnfile 下一个文件的第一项
:cpfile 上一个文件的最后一项

ctrl+i:进入定义或声明之处

ctrl+o:跳出定义或声明之处

YCM中采用vim的jumplist

单词,字符串之间跳跃

b:反向跳跃到单词首字符

B:反向跳跃到字符串首字符

w:正向跳跃到单词首字符

W:正向跳跃到字符串首字符

e:正向跳跃到字符末尾字符

E:正向跳跃到字符串末尾字符

ge:跳跃到上一个字符末尾

gE:跳跃到上一个字符串末尾

显示

zt:当前行显示到顶部

zz:当前行显示到屏幕中间

3H:跳到顶部第三行

5L:调到底部第五行

面向字符,行,列操作

  • v:面向字符,配合b,w,e,ge可以快速选择并且匹配
  • caw,yaw,daw:面向单词级别的处理
  • V:面向行处理,Vr|,将一行全部转换成|
  • ctrl+v:面向列处理,c-v3j,连续选择下面三列同位置,包含最初一行
    • shift+i 在所选高亮区域前插入,shift+a 在所选高亮区域后以为插入
  • gv:重复选择上次的高亮区域
  • gU{motion},motion比如:it,V等,大写所选内容,gUgU大写所在行
  • gu{motion},motion比如:it,V等,小写所选内容,gugu小写所在行
  • i:当前光标前插入,I行首插入
  • a:当前光标后插入,A行末插入
  • o:切换高亮选区的活动端

vim比较文件方法

  1. #最简单的方法 

  2. vimdiff FILE_LEFT FILE_RIGHT #方法1 

  3. vim -d FILE_LEFT FILE_RIGHT #方法2 


  4. vim FILE_LEFT 

  5. :vertical diffsplit FILE_RIGHT #方法3 


  6. [c #反向跳转 

  7. ]c #正向跳转 下一个不同点 

  8. :set noscrollbind #不需要同步移动 

  9. :diffupdate 更新之后,需要手动同步 

  10. #如果已经用split方式打开了两个文件file1,file2,又想比较两文件的不同。分别在两个窗口里面输入命令: 

  11. :diffthis 


  12. 合并文档: 

  13. dp 将差异点的当前文档内容应用到另一文档(diff put) 

  14. do 将差异点的另一文档的内容拷贝到当前文档(diff get) 

  15. 上下文的展开和查看 

  16. 比较和合并文件的时候经常需要结合上下文来确定最终要采取的操作。Vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数为3行,可以这样设置: 

  17. :set diffopt=context:3 

  18. 可以用简单的折叠命令来临时展开被折叠的相同的文本行: 

  19. zo (folding open, z这个字母看上去比较像折叠的纸) 

  20. 然后可以用下列命令来重新折叠: 

  21. zc (folding close) 


常见需要掌握的vim操作

  • 不按Esc而是按[或者c,速度快很多
  • 学会几个定位键的区别:0, $, {, }, g, G, w, e, b…
  • o, O分别是当前位置下面/上面插入一个新行并进入插入状态
  • Shift+V选定几行,然后用 一起移动
  • Ctrl+V选定行首或行尾的字符,然后用shift+i做插入,或者shift+x做删除
  • 学会用y,d 和p, P做粘贴剪切
  • 学会用^W的窗口操作。打开文件用sp或者vs
  • 学会记录宏的命令。用q加任意键开始录制,再按q保存。然后可用@加这个任意键回放,在@前加数字可定义回放次数。
  • "."重复上一个命令,“u"取消上一个命令,”^r"反取消
  • ^n, ^p用buf里的关键词补全。
  • 学会搜索替换":%s/要搜的东西/要换成的东西/g"
  • 任何时候移到一个单词上按#的话可以高亮这个文档里所有一样的单词
  • 用“/”做搜索, 按n或N 上一个/下一个
  • ":!命令 &“可直接运行这个命令,用”:!命令 %&"如果你想让这个命令对当前所编辑文件做操作。
  • 任何时候可用":cd %:p:h"来切换目录到当前编辑文件所在目录。

vimscript中不错的语句小结

  1. "打开或读取python相关的程序,才高亮所有python语法 

  2. autocmd BufRead,BufNewFile *.py let python_highlight_all = 1 


  3. au FileType python setlocal formatprg=autopep8\ - 

  4. autocmd FileType c,cpp,java,go,php,javascript,puppet,python,rust,twig,xml,yml,perl autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces() 

  5. autocmd ! 清除vimcrc组全部的自动命令 


  6. #快捷键函数映射 

  7. map <F3> :call FormatSrc()<CR><CR> 

  8. func FormatSrc() 

  9. exec "w"   "保存文档 

  10. if &filetype == 'py' || &filetype == 'python' 

  11. exec "r !autopep8 -i --aggressive --aggressive %" ”读取该命令执行后的结果 

  12. endif 

  13. exec "e! %"   “编辑当前文件:无论缓存区里是否已经更改,考虑多人编辑文档的情况 

  14. endfunc 


  15. noremap <F3> :Autoformat<CR>   "f3映射到命令autoformat 

  16. au BufWrite * :Autoformat "保存文档前执行autoformat 


  17. "使得formatprg带有参数 

  18. au FileType python let &l:formatprg='autopep8 -a -a -' 

  19. "au FileType python setlocal formatprg=autopep8\ - 


vim操作备忘录的更多相关文章

  1. linux下vi或vim操作Found a swap file by the name的原因及解决方法

    在linux下用vi或vim打开Test.java文件时 [root@localhost tmp]# vi Test.java出现了如下信息: E325: ATTENTION    Found a s ...

  2. [No0000191]7种提高工作效率的Vim操作-Vim使用技巧(6)

    Vim一直被认为是一种非常高效的文本编辑器,但是对于普通用户来说,很难在入门的时候就体会到Vim的所谓高效性. 本文介绍7种提高你工作效率和生产力的Vim使用技巧,主要集中在对某个文件范围内的特定目标 ...

  3. VIM操作基础命令

    VIM操作基础命令 1 文件操作 1.1 打开文件 VIM 使用 –o 或 –O 选项打开多个文件,其中 –o 表示垂直并排,例如 vim -o lesson4 lesson5 lesson6.大O表 ...

  4. vim学习笔记(1)——vim操作

    仅记录一些自己最经常使用的vim操作.随时更新 文本操作 d 剪切.双击剪切一行 y 复制,双击复制一行 p 粘贴 x 删除当前光标下字符 r 替换当前光标字符.后面接替换的字符 :s/old/new ...

  5. VIM操作常用指令(转)

    vim是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率.vi是"visual interface&q ...

  6. Ubuntu/Linux 下pdf阅读器Zathura(类vim操作)

    Ubuntu下源安装: sudo apt-get install zathura 操作总结: 基本操作与vim一致,对于熟悉vim快捷键的十分方便: 向下移动一页是J(Ctrl+f),向上移动一页是K ...

  7. vim操作集合

    Vim命令合集 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filena ...

  8. vim操作笔记

    1.切换到下一个文件 假设要切换的文件名为 test.py :ex test.py 2.文档内复制命令 yy "复制光标所在行.或大写一个Y. 2yy "复制两行. y^ &quo ...

  9. vim 操作

    vim -b test.bin vim 的 -b 选项是告诉 vim 打开的是一个二进制文件,不指定的话,会在后面加上 0x0a ,即一个换行符,这样若是二进制文件,则文件被改变了,后面多了一个0x0 ...

随机推荐

  1. CCF系列之I’m stuck!(201312-5)

    试题名称: I’m stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', ...

  2. redis 安装实战(10步完成安装)

    1 下载zip :https://redis.io/download   ---->redis-4.0.6 2 上传:利用wcp 上传到/usr/local/soft/ 3 解压:tar -zv ...

  3. glReadPixel 读取数据错误问题

    glReadPixel 读取数据错误问题 问题:在Android上使用 glReadPixel 读取当前渲染数据,在若干机型(华为P9以及魅族某魅蓝手机)上读取数据失败,glGetError() 没有 ...

  4. java1.8--Optional类

    身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法.我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数. ...

  5. 解决Flink输出日志中时间比当前时间晚8个小时的问题

    Flink安装在CentOS7上,默认时间是UTC时间,查看Flink日志,发现输出时间比当前时间晚8个小时. 通过如下命令,调整成北京时间 cp /usr/share/zoneinfo/Asia/S ...

  6. golang变量作用域问题-避免使用全局变量

    最近遇到了一个变量作用域的问题,一个比较低级的问题,可能作为一个熟手不应该犯这样的低级错误,但是golang的语法特点可能让你稍微不注意就踩坑,嘿嘿. 变量作用域 全局变量的作用域是整个包,局部变量的 ...

  7. 【转】GPS误差来源

    一.与GPS卫星有关的误差 1.卫星时钟误差 即使卫星是非常的精密复杂,它可以计算出一些极微小的讯息信息,如原子钟(Cesium) 即是如此一个精准的装置,但是精准并不代表完美,因此仍会有一些微小的误 ...

  8. TCP粘包和拆包问题

    问题产生 一个完整的业务可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和封包问题. 下面可以看一张图,是客户端向服务端发送包: 1. 第一种情况 ...

  9. Jetson TX2上的demo(原创)

    Jetson TX2上的demo 一.快速傅里叶-海动图 sample The CUDA samples directory is copied to the home directory on th ...

  10. MySQL--当查询遇到隐藏字符

    事件起因: 在将一些EXCEL维护的数据导入MySQL中维护过程中发现漏了一些数据,检查时发现看着相同的SQL返回的结果完全不同: 在SQLyog中看到的截图如: 两个SQL执行返回结果不同,其中一条 ...