vim 笔记

前言

记录一些平时用到的东西或者是新学习到的内容

vim 目录结构

  • vim目录结构 以下针对 vim90, 有些文件夹可能没有,没有的话,可以自己新建一个
  • after : plugin 加载完后,加载 after 中的内容
  • autoload : 自动会运行的脚本
  • bitmaps : 默认图标存放路径
  • colors : 配色方案
  • compiler
  • doc : 插件文档,使用 :help 时可以用到
  • ftdetect : filetype detection, vim 启动时执行,检测和设置文件的类型。
  • ftplugin : plugin,autoload,ftplugin不同
  • GvimExt32
  • GvimExt64
  • import
  • indent : 自动缩进定义文件, 根据打开文件名字加载
  • keymap
  • lang : 界面显示语言
  • macros : 宏示例
  • plugin : 插件, 每次启动 vim 时都会加载
  • spell : 拼写检查脚本
  • syntax : 语法高亮
  • tools : 工具
  • tutor

vimrc 配置

github比较全的配置

配置文件在 ~/.vimrc,将下面的设置写入 ~/.vimrc 中即可每次打开 vim 时都实现特特定的效果。也可以在打开 vim 后, 在命令模式下输入下面的内容也可以实现特定的效果,这种方式只会在当前打开的 vim 界面有效。

  • set hlsearch : 设置搜索高亮,当查到字符串时高亮显示
  • set nu : 显示行号
  • set nonu : 取消行号显示
  • set tags=tags : 设置 tags 为当前文件夹下的 tags
  • set cursorcolumn : 高亮所在列
  • set cursorline : 高亮所在行。高亮操作
  • set runtimepath^=/home/chao/.vim/pack/vimwiki : ^= 新增一个 runtimepath 路径,可以管理插件
  • set enc=utf-8 : 设置 utf-8 编码
  • syntax clear : 取消高亮
  • set guioptions : 设置gui模式下菜单栏和导航栏是否显示
  • set wrap : 设置折行,长的行用多行显示,但是本质还是一行
  • set nowrap : 不设置折行,可能会出现一行太长,屏幕装不下的情况
  • set guioptions+=T : 显示工具栏
  • set guioptions-=T : 不显示工具栏

vim 的几种模式

打开 vim 后,输入 :help vim-modes 便可以查看 vim 的几种模式,对于 vim 9.0.1425, 得到的结果是: 7种基本模式

  • Normal mode : 正常模式,正常模式下可以输入所有的编辑命令,这也称之为命令模式
  • Visual mode : 可视模式,这与正常模式类似,但是当使用移动命令(h,j,k,l等)时,会衍生出来一块高亮的区域。当使用非移动命令, 会对高亮部分内容生效。比如高亮了一块区域,然后输入 d, 便会删除高亮的部分
  • Select mode : 选择模式,这看起来最想 MS-Windows 的选择模式,键入可打印字符会删除选择并启动插入模式。
  • Insert mode : 插入模式,在插入模式下,输入的文本会保存在 buffer 中,类 unix 输入的文本下会保存在为 .文件名.swp
  • Command-line mode : 命令行模式, 也叫做 Cmdline mode, 可以在窗口下面输入一行文本。: 用于 Ex 命令,? 用于搜索,/ 用于过滤
  • Ex mode : 与 Command-line mode 类似,但是输完一个命令后仍然在 Ex mode.
  • Terminal-Job mode : 终端任务模式,在终端窗口交互式作业,输入的键转到作业,而作业的输出将显示到终端窗口 此外,还有 7 种额外的模式,这些是基本模式的变种, 包括 Operator-pending mode, Replace mode, Virtual Replace mode, Insert Normal mode, Terminal-Normal mode, Insert Visual modeInsert Select mode

正常模式/命令模式

进入vim后即为正常模式

  • ctrl+w, _ (shift+-) : 最大化窗口
  • ctrl+w, = : 恢复窗口
  • "+gP : 可以从剪贴板复制,gvim有效。
  • u : 撤回一次更改,类似 windows 下的 ctrl + z
  • ctrl + R : 取消一次撤回的更改,类似 windows 下的 ctrl + y
  • ma : 生成一个标签 a (只在当前文件有效)
  • `a : 跳转到标签 a
  • delmarks a : 删除标签 a

命令行模式

命令模式下很多东西都可以写在 ~/.vimrc 中, ~/.vimrc 中的很多内容也都可以在命令行模式下执行

  • set ft=c # ft filetype
  • set runtimepath ? # 查看 vim 的 runtimepath。
  • tags : 列出所有标签
  • marks : 查看设置过的标签

可视模式

  • u : 选择的内容小写
  • U : 选择的内容大写

跳转

通过 tags 进行跳转

  • bn : 跳转下一个记录
  • bp : 跳转到上一个记录
  • ma : 生成一个标签 a (只在当前文件有效)
  • `a : 跳转到标签 a
  • delmarks a : 删除标签 a
  • marks : 查看设置过的标签

为 UVM 生成 tags

首先进入 uvm 源码的 src 目录,执行下列语句

ctags --languages=systemverilog -R .

就会在源码目录生成 tags 文件,然后编辑用户家目录的 .vimrc 文件,添加如下内容,注意 /opt/uvm/uvm-1.1d/src 为上面生成的 tags 文件路径:

set tags=./tags
set tags+=/opt/uvm/uvm-1.1d/src/tags

然后打开 systemverilog 文件就可以进行跳转了。

  • tags : 列出所有标签
  • ctrl + ] : 跳转到函数,类等
  • ctrl + t : 返回跳转前的位置,如果有多次跳转,只能一次一次返回

跳转到文件中的目录

  • gf : go to file
  • :bd : 返回到原来的文件
  • :bn : 跳转到下一个记录
  • :bp : 跳转到上一个记录

匹配

  • \s : 匹配空格

多标签(tab)

此标签 (tab) 非彼标签 (tag) vim 可以添加标签,方便切换

  • :tabnew : 新建一个标签,可以后街文件
  • :tabopen : 打开文件
  • :tabedit : 编辑文件

遇到的问题

编码设置,解决 windows gvim 菜单键乱码问题

" vimrc 中注释用 "
" 编码设置,解决 windows gvim 菜单键乱码问题。
set enc=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
" some conf
" ...
if(has("win32") || has("win95") || has("win64") || has("win7") || has("win10"))
    source $VIMRUNTIME/delmenu.vim
    source $VIMRUNTIME/menu.vim
endif

插件

存放插件的路径放在 runtimepath 中, 启动 vim 时, 会按照下面的步骤执行:

  1. 处理 .vimrc 文件
  2. 扫描 ~/.vim 中的所有目录
  3. 查找包含 pack/*/start 中的插件

手动安装

插件安装 start 目录下的插件会自动执行,在 opt 目录下的插件需要通过 packadd xx 来加载插件

  • 将插件放在 ~/.vim/pack/*/start/ 目录下
  • 或者在 ~/.vim/pack/ 目录下创建一个目录,然后在该目录下创建一个 start 目录,将插件放在 start 目录下

vim安装vba格式的插件

以安装vimwiki为例, 首先打开 vimwiki.vba 文件

vim vimwiki.vba

然后执行下面的语句

:so %
:q

用到的一些插件

NERDTree

  • vim 的一个树形文件浏览器插件
  • NERDTree 打开 NERDTree 插件

其它暂未分类

  • iabbrev 设置缩写
iabbrev pf `print()`

后面在相应的语言代码中输入 pf 然后按空格键,便会自动输入 print

使用宏的步骤

  1. 先按 q, 然后按任意一个字母, 如 a, 就可以录制宏
  2. 比如需要删除1,3,5,7等奇数行, 先输入 dd 删除一行, 然后输入 2j 跳到下一行
  3. 结束宏录制, 按 q
  4. 使用宏, 按@a 使用一次, 输入 7@a 使用 7 次
Subscribe
提醒
guest
0 评论
内联反馈
查看所有评论