#前言

noevim一些技巧汇总

#删除并粘贴

删除或拷贝默认会替换剪切板的内容,虽然neovim的剪切板可以设置为系统的,但是在系统中复制粘贴并不会写入0号复制专用寄存器。

#nvim-cmp 顺序问题

在使用nvim-cmp自动补全插件时,提示词并不会默认选中第一个,原因作者回复了:https://github.com/hrsh7th/nvim-cmp/issues/1809,是 gopls 的问题,解决方法是把插件的预选修改:

1
2
3
4
local cmp = require("cmp")
cmp.setup({
preselect = cmp.PreselectMode.None
})

#查询格式化信息

本质上使用的是:conform.nvim

1
:ConformInfo

#查询 treesitter 节点信息

1
:InspectTree

#多行编辑

1
2
3
4
# 竖向选区
ctrl + v
# 进入编辑模式
shift + i

#vim 笔记

  • 高亮选区的范围由其两个端点界定。其中一端固定,而另一端可以随光标自由移动,我们可以用 o 键来切换其活动的端点。
  • 启用了wrap之后,长度会折叠,出现屏幕行与实际行不同的情况。gj作用于屏幕行,j作用于实际行。
  • 一个单词由字母、数字、下划线,或其他非空白字符的序列组成,单词间以空白字符分隔。而字串的定义则更简单,它由非空白字符序列组成,字串间以空白字符分隔。
  • WBEgE是面向字串的移动方式。
  • 可视模式下,会有范围限定词,t是一个特殊的,代表 xml 或者 html 这类的标签选定(感觉算是特殊优化)。
  • m{a-zA-Z}命令会用选定的字母标记当前光标所在位置。小写位置标记只在每个缓冲区里局部可见,而大写位置标记则全局可见。
  • '{mark}命令跳到位置标记所在行,并把光标置于该行第一个非空白字符上;而 `{mark} 命令则把光标移动到设置此位置标记时光标所在之处,也就是说,它同时恢复行、列的位置。

跳转位置

  • 当我们使用 y{motion} 命令时,要复制的文本不仅会被拷贝到无名寄存器中,而且也被拷贝到了复制专用寄存器中,后者可用数字 0 加以引用。复制专用寄存器,顾名思义,仅当使用 y{motion} 命令时才会被赋值。
  • 怎样才能知道 p 命令是把寄存器的文本粘贴到当前字符之后还是当前行之后呢?这取决于这个指定的寄存器是怎样被赋值的。面向行的复制或者删除操作(例如:dd、yy 或者 dap),将创建面向行的寄存器;而面向字符的复制或者删除操作(例如:x、diw 或者 das),则创建面向字符的寄存器。一般而言,使用 p 命令的结果会一目了然。