######################################## vim ######################################## - `Linux vi/vim `_ 光标 **************************************** ========= ====================== h/j/k/l 左下上右 b/e 词首词尾 ^/$ 行首行尾 -/+ 上一行行首、后一行行首 {/} 段首段尾 gg/G 文首文尾 向下一页(Forward) 向上一页(Back) 向下半页 向上半页 gg 光标移动到文档开头 G 光标移动到文档末尾 数字+方向 向某个方向移动指定行 ========= ====================== .. seealso:: - `vim 光标移动 `_ 字符操作 **************************************** ===== ============================= i/I 插入、插入到行首 a/A 附加、附加到行尾 p/P 后粘贴、前粘贴 d/D 删除、删除到行尾 s/S 删除并插入、删除到行尾并插入 r 替换 f/F 行内查找、行内前向查找 R 进入 Replace/Insert 模式 [#]_ :m +1 下移一行 :m -1 上移一行 ===== ============================= .. [#] `Vim入门教程之替换模式、虚拟替换模式和r命令详解 `_ 列编辑 **************************************** 使用列编辑一共有三个步骤: #. 使用 进入列选择模式 #. 使用 进入列前端插入模式,或者使用 进入列后端插入 #. 完成编辑后使用 退出编辑模式 然后所有选择的列都会出现相同的内容 可视模式 **************************************** 上面所述的 列编辑_ 实际上是可视模式的一种。 +-------+--------------+ | v | 字符可视模式 | +=======+==============+ | V | 行可视模式 | +-------+--------------+ | | 块可视模式 | +-------+--------------+ .. seealso:: - `vim 可视化模式(visual模式) `_ 窗口管理 **************************************** =============== ======================== sp/vs 分割窗口 +方向键 在分割的窗口间切换 转到下一个窗口: 调整窗口高度 > 调整窗口宽度 将所有窗口设置为相同尺寸 :[vertiacl] res 调整窗口大小: close 关闭当前窗口 qall 退出所有窗口 qall! 退出所有窗口而不保存 wqall 退出所有窗口并保存 wall 保存所有窗口 =============== ======================== .. note:: 可以用来转到悬浮窗口 [#float_window]_ 标签页: ========= ======== tabe+file 创建标签 tabc+n 关闭标签 tabn/tabp 切换标签 ========= ======== .. [#float_window] `Q: How do I scroll a float window? `_ .. seealso:: - `vim 多窗口,多tab编辑 `_ - `vim 多窗口操作 `_ - `vim 窗口切换 `_ 代码折叠 **************************************** == ==================================================== za 切换折叠 zc 折叠 zC 对所在范围内所有嵌套的折叠点进行折叠 zo 展开折叠 zO 对所在范围内所有嵌套的折叠点展开 [z 到当前打开的折叠的开始处 ]z 到当前打开的折叠的末尾处 zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入 zk 向上移动到前一折叠的结束处。关闭的折叠也被计入 == ==================================================== 此外,还可能需要在配置文件中添加: .. code-block:: vim ' 基于缩进进行代码折叠 set foldmethod=indent ' 启动 Vim 时关闭折叠 set nofoldenable .. seealso:: - `vim中折叠代码 `_ - `Vim代码折叠-Vim入门教程(15) `_ - ` vim 标签页与折叠栏 `_ 终端命令 **************************************** :!+命令 同样的,在执行诸如 cd 的命令的时候可以按 tab 补全 切换工作区 **************************************** .. csv-table:: cd, 改变vim的当前工作路径 lcd, 改变当前窗口的工作路径 pwd, 查看当前的工作路径 set autochdir, 自动设当前编辑的文件所在目录为当前工作路径 自动对齐 **************************************** gg=G 键盘 **************************************** 默认是 :kbd:`\\\\` 映射时映射 Alt 这种键的时候需要写成 ** 的形式 箭头键是 *, , , * 两者组合在一起就是 ** .. seealso:: - `Mapping keys in Vim - Tutorial (Part 2) `_ - `Vim documentation: intro `_ - `Vim documentation: map `_ - `Can I map Alt key in Vim? `_ - `Moving lines up or down `_ - `在Vim中上下移动整个行 `_ 内置终端 **************************************** :term 或者 :term bash/zsh/... 使用 ```` 可以退出终端模式,更多请参阅 ``:help terminal-emulator`` 宏 **************************************** 宏算是一个比较高阶的功能了,用法是: #. 按下 *qa* 开始录制宏 #. 对行进行操作 #. 按 *q* 退出宏录制 #. 按 *[\\d]@a* 执行宏 .. note:: 尽管宏的用法比较简单,但是依然有一些需要注意的地方: - 在宏录制的最后不要忘记切换到下一行,要不然宏执行的时候都是在一行上进行操作的 - 当遇到错误的时候,宏会自动停止(例如在文件末尾尝试将光标移动到下一行) 插件 **************************************** 一些比较好的插件: ============================= ============================== editorconfig-vim_ editorconfig 的 vim 版本 nerdtree_ 用来显示工作路径下的路径树 vim-rooter_ 根据打开的文件自动切换工作路径 vim-nerdtree-syntax-highlight 根据 LSP 对代码进行着色 vim-airline 一个底部状态栏 ============================= ============================== .. _editorconfig-vim: https://github/com/editorconfig/editorconfig-vim .. _nerdtree: https://github/com/preservim/nerdtree .. _vim-rooter: https://github/com/airblade/vim-rooter 对于 nerdtree_ 而言,需要安装 **vim-devicons** 和相关字体,推荐安装 `FiraCodeNerd `_ 忽略大小写 **************************************** 要进行忽略大小写的搜索,有两种方法: #. set ignorecase #. /string\\c 非贪婪匹配 **************************************** 非贪婪匹配使用 ``\{-}`` 二进制模式 **************************************** 使用 nvim -b 可以使用二进制编辑模式,另外,使用 :command:`:set display=uhex` 可以将一些符号以二进制的形式显示,这在处理 Windows 下的文件时很好用