vim
vim
我曾在约一年前强迫自己使用 vim 作为代码编辑器,并进行相关学习。但是 vscode vim 给了我极其惨痛的教训:混用 Ctrl + Z 和 u(undo) 打乱了我的代码,我只能从 git 中恢复,浪费了数小时的时间。因此弃用。
此次重新启用,也大概是我的心血来潮吧。不过现在用了好久,确实没有遇到类似的问题了,可能是因为我已经不用 u 了吧。
其他同等级编辑器还有 emacs, helix 等,等有缘人去尝试吧。
for beginner
如果您没有学习 vim 并碰到需要使用 vim 的场景,这两条规则会很有帮助:
aori开启编辑。<ESC>:wq保存并退出。
常用组合键
A=$a,I=0i*是当前单词的下一个匹配项yyp复制当前行并粘贴到下一行。我的数据记录需要频繁使用此功能。dawdelete a word()f{char}search next char,使用;可以继续搜索w,e,W,E,b一些移动光标的操作。前四个都是向后移动,大写的会快一点(空格分隔)。b是向前移动。我不是很想记它们的具体移动方式。能用就行,但是光标移动确实是 vim 增加效率的很重要的一环。
- 替换:参考此处。。
感觉不如 vscode ctrl+f - 加括号:选中括号头位置,
ysw,yse...(不太好用) vi(选中括号内内容,不包括括号本身。va(选中包括括号本身。括号可以用各种符号([,`, etc)代替。- 同理,
c,d,y也能代替v。
- 同理,
g开头的:g+ j/k/0/$/m... 跳转视觉行的位置,而不是实际行。gd:go definition,相当于 ctrl + 左键单击
vscode vim 特有:
<C-q>进入 visual block,选中区域后使用I进行多行输入 / 删除。gb是多光标,添加下一个相同单词到多光标。然后就可以用A或I进入 insert 修改。
设置(vscode)
直接看我的 vscode settings.json 吧。
设置(懒狗型)
由于现在 vscode 是我的主要编辑器,因此无需折腾,配置简单的 vim 系编辑器也是不错的选择。
设置(neovim)
在折腾了大段配置后,我决定使用 lazy.vim 代替 packer 进行插件管理。于是懒狗的我直接使用 lazyvim,该仓库使用 lazy.vim 并预设了许多插件和 keybindings,非常方便。因此我就在此基础上再进行自定义。
这里有一些插件推荐,能够使 neovim 接近 vscode(笑)
我的配置存放在 github 仓库,直接替换 ~/.config/nvim 然后启动 nvim 就能使用。首次启动会黑屏一阵,不要 Ctrl+c 终止,否则需要清理缓存重新配置。
- 迁移我原先的 keymaps。
- 禁用 Telescope 及其衍生插件,改为使用 Neotree.nvim。
outdated, archived
首先基础设置我是照着 external 2. 来的。这篇文章确实讲的还行。后续冲浪时也看到一篇写得很好的文章,见 external 3.,有空的话去试吧。
然后进入到了自定义环节:
基础设置
- nvim 不支持 alt 和 TAB 快捷键绑定。。(骂人) 切窗口的快捷键还得再自定义。
vim.opt.wrap = true这行是一定要开的,可以让过长的行到行尾自动换行。(ref)
侧边栏
俗话说 neovim 人都在为了逼近 vscode 而努力(来源请求),我需要的侧边栏也不例外。vscode 的“打开文件夹”功能好用,我需要使用。在尝试了多个插件(opener.nvim, Telescope, NerdTree)后,最终我使用的插件是Neo-tree。这个插件专为 neovim 设计,并且快捷键更加简单易懂NerdTree 是什么妖魔鬼怪。
在
lua/plugin.lua中添加:use { "nvim-neo-tree/neo-tree.nvim", branch = "v3.x", requires = { "nvim-lua/plenary.nvim", "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended "MunifTanjim/nui.nvim", } }快捷键(lua/keymaps.lua):
vim.keymap.set('n', '<C-o>', ':Neotree<CR>', opts)其他设置(init.lua):
require('neo-tree').setup { filesystem = { filtered_items = { visible = true, hide_dotfiles = false, hide_gitignored = true, }, } }
我的插件
- Neotree
一些想法
用 vim for vscode 用了一周,感觉有些欠缺,因此进行了一些自定义化。以下阐述我的自定义化的一些构思。
- visual 下按
(,[等括号类可直接为选中区域添加闭合括号。 - 保留非 vim 的 Ctrl 组合键功能,例如复制粘贴等。
- 删除选中区域时不复制到剪贴板。
而以下是我对纯 vim (无插件)无法实现功能的更多构想:
- 更改指令查找替换方式(太麻烦了),直接搜索高亮,然后选择其中的一些或全部,进行直观替换
- 增加 保持光标 与 新建光标 功能,并可任意移动任一光标,方便随机修改。
external
- Vim 实用技巧,进阶阅读
- 从零开始配置 Neovim(Nvim)(踩坑配置教程)
- Neovim 使用体验
- Emacs 101 新手求生指南(知己知彼)
