vim常用技巧总结(代码片段)

tsts tsts     2023-03-09     332

关键词:

其实早就想整这篇总结了,一直没有时间写,鉴于李老板的强烈要求,今天更新上来。

VIM作为linux环境下一个非常强大的工具,其实是非常实用了,尤其是对于代码量庞大的项目来讲,简直就是福音。无法想象在一个集成IDE里面添加几万甚至百万个文件个文件时,你还能指望IDE能够快速的进行代码的快速浏览跳转,但是VIM就可以轻松做到。

在默认安装的VIM中,其实没有带多少插件,但其自带的基本功能,也能满足普通的文本编辑需求。但是如果是经常使用VIM来查看阅读代码,那必须对默认的VIM进行一些强化,才能使其用起来更加顺手和方便。

本文所描述的一些使用技巧,很多都是在各种VIM插件的基础上进行操作的,如果没有这些操作的支持,你可能无法在你的机器上面进行这些操作。不过没有关系,我已经把自己的VIM配置上传到github上,你可以直接下载下来使用,也可以对其进行修改以适配你自己的使用习惯。下面我分两部分来介绍vim的基本操作,当前这里不会介绍VIM的所有功能,只是介绍一些平常经常使用的基本操作。

1. VIM基本功能

其实VIM本身就已经自带的非常多的功能,这些操作基本是纯键盘操作,对应习惯了Window环境的人来说,其实是很难习惯的。但是,一旦你习惯vim的操作后,将会发现它直接非常的实用,非常强大。

1.1 VIM的常用模式

  • 正常(normal)模式:默认的编辑模式;下面如果不加特殊说明,提到的命令都直接在正常模式下输入“:”,任何其它模式中都可以通过键盘上的 Esc 键回到正常模式。
  • 命令(command)模式:用于执行较长、较复杂的命令;在正常模式下输入“:”(一般命令)、“/”(正向搜索)或“?”(反向搜索)即可进入该模式;命令模式下的命令要输入回车键(Enter)才算完成。
  • 插入(insert)模式:输入文本时使用;在正常模式下键入“i”(insert)或“a”(append)即可进入插入模式(也有另外一些命令,如“c”,也可以进入插入模式,但这些命令有其它的作用)。
  • 可视(visual)模式:用于选定文本块;可以在正常模式下输入“v”(小写)来按字符选定,输入“V”(大写)来按行选定,或输入“Ctrl-V”来按方块选定

1.2 基本移动

下面几个命令需要在normal模式执行

  • h:光标左移一个位置
  • j:光标右移一个位置
  • k:光标上移一个位置
  • l:光标下称一个位置
  • gg:光标跳转到文件首行
  • G:光标跳转文件最后一行
  • _:光标移到当前行第一个非空字符位置
  • 行号+gg:快速移动到指定行号
  • 数字+h/j/k/l:快速将光标向左、下、上、右移动指定个位置

1.3 窗口操作

窗口分割

  • :vsp:横向窗口分割
  • :sp:纵向窗口分割
  • ctrl+w+h:将光标切换到左边窗口
  • ctrl+w+j:将光标切换到下边窗口
  • ctrl+w+k:将光标切换到上边窗口
  • ctrl+w+l:将光标切换到右边窗口
  • ctrl+w:在已打开窗口中循环切换光标
  • :resize +3:纵向扩大窗口大小
  • :resize -3:纵向减小窗口大小
  • :vertical resize +3:横向扩大窗口大小
  • :vertical resize -3:横向减小窗口大小

调整窗口大小

  • :resize +3:纵向扩大窗口大小
  • :resize -3:纵向减小窗口大小
  • :vertical resize +3:横向扩大窗口大小
  • :vertical resize -3:横向减小窗口大小

1.4 粘贴与复制

normal模式下,撤下 i 键进入insert模式,此时可以直接编辑当前文件。 normal模式下的几个基本文件编辑操作:

  • y:复制当前光标所在处字符
  • yy:复制当前光标所在行
  • p:在当前位置粘贴上一次复制的内容

先按下v键进入view模式,通过移动h/j/k/l键选择要复制的内容,再按下y键可复制单词或整段文件,然后移动光标至目标位置,再使用p进行粘贴。

1.5 文件浏览

  • :Explore或:E:打开VIM默认的文件浏览器

1.6 VIM快捷键大全

网上搜集的VIM常用快捷键汇总图,非常实用。

技术图片

 

2. VIM私人定制

前面介绍了VIM的一些常用的基本的操作,其实这些只是VIM的基本入门操作,它还有很多其他的操作和功能,这里不详细介绍,有需要的朋友,可以直接:help查看VIM的帮忙以学习更多的操作方法。

下面开始我们的定制部分,这一部分主要介绍一些常用的VIM插件。没有安装插件的VIM已经为我们提供了相当多的功能,但是有些功能用起来非常难受。好在大牛们针对VIM开发了很多实用插件,这大大简化了VIM的操作。下面主要介绍一些平常开发中常用的插件的使用方法。

我的VIM配置:https://github.com/tshfut/tSuai_vim

我自己设置的几个常用快捷键:

  • F2:打开左侧的文件列表
  • F3:打开类视图,即查看当前文件的类及其成员属性(在右侧)
  • F4:查看当前已打开的文件列表
  • F5:在当前文件中快速查找函数并
  • F6:在当前目录中快速查找文件(模糊搜索)
  • +m:(取消)高亮光标当前所在词
  • +n:取消所有高亮词
  • +nm:设置不显示行号
  • +mn:设置显示行号
  • +rr:将左侧的文件目录树切换到当前文件所在目录
  • +ff:从vim进入命令行状态,以exit命令两次回到vim状态
  • +jj:切换到深色模式
  • +ll:切换至浅色模式
  • +s:查看当前光标所在行的git提交记录(changeid,author,time等)
  • :ag:在当前目录中搜索光标所在处词出现的地方
  • w+,:横向减小窗口
  • w+.:横向扩大窗口
  • w+=:纵向增大窗口
  • w+-:纵向减小窗口
  • ctrl++s/g/c/t/e/f/i/d:快速代码跟踪命令,依赖cscope插件创建的tag文件
  • g+]:跳转到函数出现的地方,依赖于ctag创建的tags文件

 

2.1 主题定制

VIM默认提供了很多主题,但我独爱Visual studio的默认浅色主题,而这个主题VIM里面却没有,无赖只能自己动手定制,只需要找一个已经存在的vim主题,copy一份放到.vim/colors目录下,然后根据里面的配置选项,设置自己喜欢的颜色即可。

配置好后,直接在.vimrc文件里面将自己的VIM主题设置为默认即可:  colorscheme Porsche

colorscheme space-vim-dark

我自己的经常使用的vim主题主要有两个,一个浅色(类似Visual Studio),一个深色(space-vim-dark),都放下github上面了地址:

https://github.com/tshfut/Porsche

    上两个配色截图:

 技术图片 技术图片

2.2 NERDTree文件浏览

    前面介绍了,使用:Explore命令可以查看文件目录树,但仍然觉得不方便,可以使用NERDTree插件来替代,NERDTree提供了非常好的文件目录可视化操作,支持文件展开、文件夹/文件区分标识等。

    相关的配置如下:

"let g:NERDTree_title=‘NERD Tree‘
"let g:winManagerWindowLayout=‘NERDTree|TagList,Tarbar‘
nmap <silent> mt :if IsWinManagerVisible() <BAR> WMToggle<CR> <BAR> else <BAR> WMToggle<CR>:q<CR> endif "<CR>
nmap wm :NERDTreeToggle<cr>
autocmd vimenter * NERDTree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") ) | q | endif

function! NERDTree_Start()
    exec NERDTree
endfunction


function! NERDTree_IsValid()
    return 1
endfunction

 

    使用效果如下图所示:

 技术图片

2.3 EasyMotion快速移动

如果只使用h/j/k/l进行移动,难免显得有些慢,当然,可以也VIM的鼠标控制,利用鼠标来移动光标,但是这就失去了键盘操作带来的一致性。EasyMotion这个插件很好的解决了屏幕显示范围内,精准快速移动光标的问题。其他使用方法很简单:

1. 首先按 s 键,然后输入想要跳转的位置的前两个字母,此时屏幕会高亮提示所有匹配的位置

2. 根据屏幕提示,输入目标位置对应的标记,就可以直接跳转到对应位置

 使用效果图如下,我先是查找了有ng关键字的位置,下面:

技术图片

2.3 mark单词高亮

这里的单词高亮,不是vim里面的语法高亮,高亮指定词。插件mark.vim提供了非常棒的单词高亮,默认支持5个高亮颜色,其实可以自己再添加,我又添加了5个,10个基本上已经够用。

使用方法:

  • +m高亮(或取消高亮)光标所在词
  • +n取消所有高亮词

    使用效果如下图所示,高亮了函数的3个入参,极大的方便了代码阅读:

 技术图片

2.4  fzf文件模糊搜索

对于类似android源码这样的巨型项目来讲,在众多的源文件中搜索某个文件是非常痛苦的。然而,fzf这个模糊搜索工具很好的解决了这个问题,fzf并不是vim插件,但是他可以无缝的与vim进行配合使用。

安装好fzf后,直接在vim中执行:fzf命令,即可进行快速文件查找。

 技术图片

2.5 bufexplorer已打开文件列表查询

通常,我们需要在vim中同时打开多个,在多个文件之间进行来回切换时,vim自带的功能可以实现,但是并不是很方便,幸好有bufexplorer.vim,他可以帮忙我们快速地查看已经打开了的文件列表,如下图所示:

技术图片

bufexplorer下载地址:https://www.vim.org/scripts/script.php?script_id=42

 

2.6 airline标题和状态栏

       一般的IDE工具,都会有一个tab列表,标识不同的文件;还有一个状态栏,显示当前编辑文件或项目的一些状态信息。Airline给VIM带来了一个非常漂亮的状态栏,该状态可以显示很多信息:当前文件所有的git分支、文件名、光标所在函数名、文件总行数、当前光标所在行,当前vim所处模式等等,最上面还有一个已经打开的文件buffer列表(可惜无法直接用鼠标点击进行切换)。使用效果如下图所示:

 技术图片

2.7 Ctrlp

Ctrlp是Vim的模糊搜索工具,支持文件,缓冲区,MRU(Most Recently Used)文件和标签等的搜索,也支持通过正则表达式搜索(Ctrl-r进行切换),同类软件还有 command-t,fzf等。ctrlp在速度上虽然有些逊色,但扩展性好,而且因为是由纯vimscript实现的,因此依赖少配置简单。

 技术图片

2.8 Ctags和Cscope

 待补充

 

总结下常用js中的小语法和技巧(代码片段)

1,数组对象遍历对一个级数对象进行遍历,取出每个值 vararr="result":["time":"2018-10-2412:12:12","time":"2018-10-2512:12:12","time":"2018-10-2612:12:12","time":"2018-10-2712:12:12","time":"2018-10-2812:12:12", 查看详情

javascript常用的开发小技巧-总结(代码片段)

有条件地向对象添加属性使用展开运算符号(...)来有条件地向对象快速添加属性constcondition=true;constperson=id:1,name:'JohnDoe',...(condition&&age:16),;如果每个操作数的值都为 true,则 && 操作符返回最后一个求... 查看详情

计算机入门的一些常用小技巧总结(代码片段)

...信公众号:雄雄的小课堂。”今天总结了一些windows中常用的小技巧,也是明天上课需要演示的,希望对初入计算机行业的你们有所帮助,哈哈哈哈。常用shutdown命令:1.定时自动关机(10分钟之后自动关机&#... 查看详情

vue中常用的开发小技巧-让开发更便捷快速-总结(代码片段)

1.将一个prop限制在一个类型的列表中使用prop定义中的 validator 选项,可以将一个prop类型限制在一组特定的值中。exportdefaultname:'Image',props:src:type:String,,style:type:String,validator:s=>['square','roun 查看详情

vim打开和保存文件-vim使用技巧(代码片段)

使用Vim打开和保存文件是最常用的操作,介绍使用edit命令通过文件路径来打开文件,使用write命令保存文件,当文件路径不存在或用户权限不匹配时,使用write命令调用外部shell程序完成操作。1.edit命令打开文件Vim命令 :edit&nb... 查看详情

常用git命令以及处理技巧(代码片段)

常用git命令以及处理技巧基础常用命令#克隆gitclonegit@github.com:fengcms/fengcms.git#拉gitpull#添加某一个文件gitadd"src/xxx.js"#添加所有文件,严禁使用`gitadd.`这样的命令!这完全是不同的含义!gitadd-A#暂存——... 查看详情

vim使用技巧:常用光标跳转命令

...命令多如牛毛,按需学习才是唯一出路。这里总结了几个常用的光标跳转命令。 基本移动:h(往左)j(往下)k(往上)l(小写字母l,往右) 行间移动:快速跳至文件末行:G(大写字母G)快速跳至文件首行:1G(数字... 查看详情

vim常用指令总结

...内建vi文书编辑器,其他的文书编辑器则不一定会存在!vim常用命令总结俗话说:”好记性不如烂笔头,熟能生巧“下面本人以实操为基础来进行vim的命令总结(按照常用频率排序)跳到制指定行(n行为例)nG或者ngggg为跳到首行,G为... 查看详情

常用前端布局,css技巧介绍(代码片段)

常用前端布局,CSS技巧介绍对前端常用布局的整理总结,并对其性能优劣,兼容等情况进行介绍css常用技巧之可变大小正方形的绘制1:若通过设置width为百分比的方式,则高度不能通过百分比来控制.在这个地方可以使用padding来... 查看详情

vim运维日常必备操作技巧(常用的全有)(代码片段)

...半功倍,本文将罗列出运维日常使用到的操作技巧,不太常用的操作,本文没有收集,有高要求有兴趣的可以百度查阅vim专题二、常用技巧1)普通模式:移动光标的操作G或者(Shift+g):光标瞬移到文件的最后一行gg:光标瞬移到... 查看详情

linux常用命令总结(代码片段)

Linux常用命令总结目录Linux常用命令总结服务器关机相关命令2.系统目录结构介绍3.文件操作相关命令4.文件的基本属性5.文件的内容查看6.Vim7.进程相关命令服务器关机相关命令关机指令为:shutdown;sync#将数据由内存同步到... 查看详情

linux常用命令总结(代码片段)

Linux常用命令总结目录Linux常用命令总结服务器关机相关命令2.系统目录结构介绍3.文件操作相关命令4.文件的基本属性5.文件的内容查看6.Vim7.进程相关命令服务器关机相关命令关机指令为:shutdown;sync#将数据由内存同步到... 查看详情

微信小程序开发技巧总结(持续更新...)(代码片段)

...和浏览各种问题的解决方案总结出一些自己在日常开发中常用的技巧和知点,希望各位不吝斧正。数据的生命周期1.短生命周期数据存储以小程序启动到彻底关闭为周期的的数据建议存储在app.js文件夹中,引用app.js:constapp=getApp();假... 查看详情

爬虫老手常用的python爬虫技巧总结(代码片段)

用python也差不多一年多了,python应用最多的场景还是web快速开发、爬虫、自动化运维:写过简单网站、写过自动发帖脚本、写过收发邮件脚本、写过简单验证码识别脚本。爬虫在开发过程中也有很多复用的过程,这里总结一下,... 查看详情

javascript常用的开发小技巧-总结(代码片段)

有条件地向对象添加属性使用展开运算符号(...)来有条件地向对象快速添加属性constcondition=true;constperson=id:1,name:'JohnDoe',...(condition&&age:16),;如果每个操作数的值都为 true,则 && 操作符返回最后一个求... 查看详情

pl/sqldeveloper开发工具技巧总结(代码片段)

...QLDevloper版本14.0.6模板功能我们可以使用模板功能,将常用的语句整理成模板,方便快速调用。模板设置默认设置首先我们需要打开模板窗口,点击查看, 查看详情

linux常用命令总结(语法+案例)建议收藏!(代码片段)

目录vi和vim开机、重启、防火墙相关操作用户管理帮助指令文件目录类时间日期类搜索查找类压缩和解压类组管理和权限管理crond任务调度RPM和YUMvi和vim快捷键使用案例:1)拷贝当前行yy,拷贝当前行向下的5行5yy,并粘贴ÿ... 查看详情

vim常用命令总结(转)

在命令状态下对当前行用==(连按=两次),或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的codeformat。使用gg=G可对整篇代码进行排版。   v... 查看详情