Skip to content

Commit c19e7a8

Browse files
committed
finish textobject
1 parent 2d8c999 commit c19e7a8

File tree

6 files changed

+115
-75
lines changed

6 files changed

+115
-75
lines changed

README.md

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ curl -sSLf https://142857.red/files/nvimrc-install.sh | bash
1212

1313
如果安装遇到问题,欢迎通过 [GitHub issue](github.com/archibate/vimrc/issues) 反映,我会尽快帮您解决。
1414

15-
* 目前只支持 Linux 系统,暂时不支持 MacOS 等系统
15+
* 目前只支持 Linux 和 MacOS 系统,暂不支持 Wendous 系统
1616
* 请勿以 root 身份运行!否则会为 root 安装 nvim 插件而不是当前用户,插件安装后仅对当前用户有效。
1717
* 您的系统中无需事先安装有 nvim,本整合包内部已经自带了最新版 nvim 的 AppImage,可无依赖直接运行。
1818
* 无需连接 GitHub,所有插件全部已经预下载在整合包内部,无需 GitHub 加速器!
1919
* 过程中会通过您系统的包管理器安装一些工具,所以只需确保包管理器的设置是国内源即可。
2020
* 为了能够使用补全,会为您安装如 clangd 一类的包,但即使其中一个安装失败,也不影响其他语言和编辑器整体的使用。
2121
* 安装脚本运行中可能产生一些冗余错误信息,属于正常现象,不影响使用,请忽视他们。
2222

23-
安装完成后,输入 `nvim` 即可使用,按 q:wqa 即可退出。
23+
安装完成后,输入 `nvim` 即可使用,按 `q``:wqa` 即可退出。
2424

2525
如需更新,重新执行上面的一键安装命令即可。
2626

@@ -46,8 +46,8 @@ curl -sSLf https://142857.red/files/nvimrc-install.sh | bash
4646
- Q: 出现乱码,无法正确显示符号?
4747
- A: 安装 [Nerd Font](https://www.cnblogs.com/zi-wang/p/12566898.html) 字体,并把终端设置为该字体。然后在 `nvim` 中输入 `:lua require'archvim.options'.nerd_fonts = true`,重启,这样以后就可以正确显示文件类型图标了。如果不喜欢,那就 `:lua require'archvim.options'.nerd_fonts = false` 关闭。
4848

49-
- Q: 编辑 C/C++ 源码时不识别头文件目录,“飙红线”,怎么办?
50-
- A: 要么在 NeoVim 中用 `:CMakeGenerate` 命令,要么给 `cmake` 指定 `-DCMAKE_EXPORT_COMPILE_COMMANDS=ON` 参数,详见下方的 “C/C++/CMake 配置” 章节。
49+
- Q: 打开 C/C++ 源码时不识别头文件目录,“飙红线”,怎么办?
50+
- A: 请先在 NeoVim 中用 `:CMakeGenerate` 命令配置项目!否则无法识别你 CMake 里的编译选项。如果一定要命令行构建,请给 `cmake` 指定 `-DCMAKE_EXPORT_COMPILE_COMMANDS=ON` 参数,这样 C++ 补全才能正常工作,详见下方的 “C/C++/CMake 配置” 章节。
5151

5252
- Q: 支持(非 Neo 的)Vim 吗?
5353
- A: 本分支只有 NeoVim 配置,对于来自 BV1H44y1V7DW 视频想领取老版 Vim 插件的同学,请移步 [main 分支](https://github.com/archibate/vimrc/tree/main)
@@ -64,7 +64,7 @@ curl -sSLf https://142857.red/files/nvimrc-install.sh | bash
6464
- OpenSUSE (感谢 @sleeplessai 大佬)
6565
- CentOS (感谢 @xxy-im 大佬)
6666
- Deepin (感谢 @zhangasia 大佬)
67-
- MacOS (感谢 @YangZ2020 测试)
67+
- MacOS (感谢 @YangZ2020 测试确认)
6868

6969
## 开始上手
7070

@@ -92,17 +92,35 @@ curl -sSLf https://142857.red/files/nvimrc-install.sh | bash
9292
**跳转**
9393

9494
- `gd` 跳转到定义
95+
- `gD` 跳转到声明
9596
- `gy` 跳转到变量类型的定义
96-
- `gD` 跳转到虚函数实现
97+
- `gY` 跳转到虚函数实现
9798
- `go` 头文件和源文件来回跳转
9899

99100
- `gr` 寻找符号引用
101+
- `gz` 罗列所有相关信息(定义、引用等)
100102

101103
- `gf` 打开光标下的文件名
102104
- `gx` 打开光标下的网页链接
103105

104106
- `<C-o>` 跳转回来
105107

108+
**重构**
109+
110+
- `gcc` 注释/取消注释当前选中的代码/行
111+
- `gn` 重命名变量
112+
- `gw` 尝试自动修复问题
113+
- `g=` 自动格式化当前代码
114+
- `<S-F4>` 格式化当前整个文件
115+
116+
**预览**
117+
118+
- `K` 悬浮窗查看文档
119+
- `gsf` 预览函数定义
120+
- `gsc` 预览类定义
121+
- `gsd` 查看所有语法错误
122+
- `<C-w>d` 查看当前光标下的语法错误
123+
106124
**标签页**
107125

108126
- `<F4>``:wa` 一键保存所有打开的文件
@@ -121,14 +139,6 @@ curl -sSLf https://142857.red/files/nvimrc-install.sh | bash
121139

122140
- `g<Space>` 选择跳转到一个标签页
123141

124-
**重构**
125-
126-
- `gcc` 注释/取消注释当前选中的代码/行
127-
- `gn` 重命名变量
128-
- `gw` 尝试自动修复问题
129-
- `g=` 自动格式化当前代码
130-
- `<S-F4>` 格式化当前整个文件
131-
132142
**文本查找**
133143

134144
- `,,` 当前文件中模糊查找
@@ -155,12 +165,6 @@ curl -sSLf https://142857.red/files/nvimrc-install.sh | bash
155165
- `,;` 所有可用的 Vim 命令
156166
- `,?` 所有 Vim 帮助文档
157167

158-
**预览**
159-
160-
- `K` 悬浮窗查看文档
161-
- `gsf` 预览函数定义
162-
- `gsc` 预览类定义
163-
164168
**选择**
165169

166170
- `vac` 选中当前类
@@ -207,12 +211,14 @@ curl -sSLf https://142857.red/files/nvimrc-install.sh | bash
207211

208212
**换位**
209213

210-
- `gsh` 左移参数
211-
- `gsl` 右移参数
212-
- `gsj` 下移当前语句
213-
- `gsk` 上移当前语句
214-
- `gsf` 下移当前函数
215-
- `gsb` 上移当前函数
214+
- `mh` 左移参数
215+
- `ml` 右移参数
216+
- `mj` 下移当前语句
217+
- `mk` 上移当前语句
218+
- `maf` 下移当前函数
219+
- `mif` 上移当前函数
220+
- `mac` 下移当前类
221+
- `mic` 上移当前类
216222

217223
**括号**
218224

@@ -308,17 +314,19 @@ hello world
308314

309315
这样是无需任何配置,所有 `CMakeLists.txt` 中配置的头文件都能找得到,语法高亮和代码提示就是正确的。
310316

311-
* 如果你是 CMake 项目,但想要手动构建,那么请指定 `-DCMAKE_EXPORT_COMPILE_COMMANDS=ON` 参数:
317+
如果你想要手动命令行调用 `cmake`,那么也请指定 `-DCMAKE_EXPORT_COMPILE_COMMANDS=ON` 参数:
312318

313319
```bash
314320
cmake -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
315321
```
316322

317323
这会生成对 C++ 代码补全必不可少的 `build/compile_commands.json` 文件。
318324

319-
否则本插件的语法高亮和代码提示插件将无法确定编译的参数,头文件的路径,可能无法正常工作(俗称“飙红线”)。
325+
否则,本插件的语法高亮和代码提示插件将无法确定头文件目录,语法检测可能无法正常工作(俗称“飙红线”)。
326+
327+
> `:CMakeGenerate` 实际上就是默认自带了 `-DCMAKE_EXPORT_COMPILE_COMMANDS=ON` 这个参数,建议始终通过 `:CMakeGenerate``:CMakeBuild` 来构建项目。
320328
321-
* 如果你用的是其他构建系统,可能需要自己在项目根目录下生成 `compile_commands.json` 文件。
329+
如果你用的是其他构建系统,可能需要自己在项目根目录下生成 `compile_commands.json` 文件。
322330

323331
如需指定没有 `compile_commands.json` 时默认的 Clangd 选项(单文件编译的情况),编辑文件 [`~/.config/clangd/config.yaml`](dotfiles/.config-clangd-config.yaml),内容为:
324332

compile.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,11 @@ stat \"\$(which nvim)\" || true
9494
version=\"1\$(nvim --version | head -n1 | cut -f2 -dv | sed s/\\\\.//g)\"
9595
(nvim --version && [ \"\$version\" -ge 1$version_min ] ${version_max-" && [ \"\$version\" -le 1$version_max ]"}) || install_nvim
9696
nvim --version
97-
test -d ~/.config/nvim && mv ~/.config/nvim ~/.config/.nvim.backup.\$\$
97+
if [ -d ~/.config/nvim ]; then
98+
echo \"-- Backup existing config to ~/.config/.nvim.backup.\$\$...\"
99+
mv ~/.config/nvim ~/.config/.nvim.backup.\$\$
100+
fi
101+
echo '-- Copying to ~/.config/nvim...'
98102
mkdir -p ~/.config
99103
rm -rf ~/.config/nvim
100104
cp -r . ~/.config/nvim

key_details.md

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ vim.keymap.set("t", "kj", "<C-\\><C-n>", { silent = true })
5252

5353
- `<F12>` / `:AerialToggle` 打开大纲
5454
- `<F10>` / `:Neogit` 打开 Git 面板
55-
- `<F9>` / `:TroubleToggle` 打开实时语法检查清单
55+
- `<F9>` / `:Trouble diagnostics toggle` 打开实时语法检查清单
5656
- `<F8>` / `:ToggleTerm` 打开内置终端
5757
- `<F7>` / `:NvimTreeToggle` 打开项目文件树
58-
- `<F6>` / `:copen` 打开编译器错误列表
58+
- `<F6>` / `:Trouble qflist toggle` 打开编译器错误列表
5959
- `<F5>` / `:TermExec cmd=./run.sh` 运行 `./run.sh`,这里面可以放你项目的构建和运行指令
6060
- `<S-F5>` / `:TermExec cmd=\<C-c>` 中断当前在终端中执行的程序(发送 Ctrl+C 的效果)
6161

@@ -126,12 +126,14 @@ vim.keymap.set("t", "kj", "<C-\\><C-n>", { silent = true })
126126
我的一键安装脚本应该已经为你自动安装了 `clangd``pyright`,可以运行 `clangd --version` 来检查,如果没有 `clangd` 则无法在 C++ 文件中实现以下这些功能。
127127

128128
- `gd` 跳转到当前光标下函数、变量、或类的定义。
129+
- `gD` 跳转到当前光标下函数、变量、或类的声明。
129130

130131
如果光标悬浮在 `#include <cstdio>` 上使用 `gd`,则会打开并跳转到 `cstdio` 这个头文件中,对于 Python 的 `import package` 和 Lua 的 `require('package')` 也同样会跳转到模块对应的文件。
131132

132133
- `gy` 跳转到当前光标下变量的类型的定义,与 `gd` 类似,但跳转到变量类型的定义,而不是变量本身的定义,例如 `std::vector<int> arr`,则光标悬停在 `arr``gy` 时,会跳转到其类型 `std::vector` 的定义。
133134
- `gr` 跳转到当前光标下函数、变量、或类的所有引用,也就是查找谁使用了当前这个函数或变量。会弹出一个列表,让你用 `j/k` 移动选择,按 `<CR>` 即可跳转到选中的那个引用所在的文件。
134-
- `gD` 跳转到当前光标下函数的所有实现,也就是查找当前虚函数的所有 override。如果有多个实现,则会弹出一个列表,让你用 `j/k` 移动选择,按 `<CR>` 即可跳转到选中的那个实现。
135+
- `gR` 跳转到当前光标下函数的所有实现,也就是查找当前虚函数的所有 override。如果有多个实现,则会弹出一个列表,让你用 `j/k` 移动选择,按 `<CR>` 即可跳转到选中的那个实现。
136+
- `gz` 查看所有(定义、引用、类型定义、声明)
135137

136138
小贴士:使用 `gd` 跳转过去后,如果想要回来,只需要按 `<C-o>`(Ctrl+O)就能恢复到原来编辑的文件和位置,非常方便。
137139

@@ -286,35 +288,43 @@ int main() {
286288

287289
- `<Space>` 全屏任意移动
288290

289-
#### 语法树换位 (nvim-treesitter)
291+
#### 定义预览 (LSP)
290292

291293
语法树变换类的快捷键都以 `gs` 开头。
292294

293295
- `gsc` 在小窗口中预览当前光标下类或变量的定义(但不跳转过去)
294296
- `gsf` 在小窗口中预览当前光标下函数的定义(但不跳转过去)
297+
- `gsd` 在弹出窗口中预览当前项目中的所有语法错误
298+
- `<C-w>d` 在小窗口中预览当前光标下存在的语法错误
299+
300+
#### 语法树换位 (nvim-treesitter)
301+
302+
语法树换位的快捷键都以 `m` 开头。
295303

296-
- `gsh` 尝试左移当前的参数
297-
- `gsl` 尝试左移当前的参数
298-
- `gsj` 尝试下移当前的语句
299-
- `gsk` 尝试上移当前的语句
300-
- `gsf` 尝试下移当前的整个函数
301-
- `gsb` 尝试上移当前的整个函数
304+
- `mh` / `map` 尝试左移当前的参数
305+
- `ml` / `mip` 尝试左移当前的参数
306+
- `mj` / `mah` 尝试下移当前的语句
307+
- `mk` / `mih` 尝试上移当前的语句
308+
- `maf` 尝试下移当前的整个函数
309+
- `mif` 尝试上移当前的整个函数
310+
- `mac` 尝试下移当前的整个类
311+
- `mic` 尝试上移当前的整个类
302312

303313
```cpp
304314
func("hello", 42, Some());
305315
```
306316
307-
光标悬停在 `42` 上时按下 `gsl`,则得到:
317+
光标悬停在 `42` 上时按下 `ml`,则得到:
308318
309319
```cpp
310320
func(42, "hello", Some());
311321
```
312322

313323
用于快速调整参数的顺序,非常有用。
314324

315-
当你看的不顺眼时,`gsf``gsb` 也可以用于调整多个函数之间的上下顺序。
325+
当你看的不顺眼时,`maf``mif` 也可以用于调整多个函数之间的上下顺序。
316326

317-
所有这些都支持数字修饰,例如 `3gsb` 将当前函数向上移动三个函数的位置
327+
所有这些都支持数字修饰,例如 `3mk` 将当前语句向上移动三格
318328

319329
#### 全局搜索功能 (telescope.nvim)
320330

lua/archvim/config/nvim-treesitter.lua

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,22 @@ require'nvim-treesitter.configs'.setup {
9595
swap = {
9696
enable = true,
9797
swap_next = {
98-
["gsl"] = "@parameter.inner",
99-
["gsj"] = "@statement.outer",
100-
["gsf"] = "@function.outer",
98+
["ml"] = "@parameter.inner",
99+
["mj"] = "@statement.outer",
100+
["mip"] = "@parameter.inner",
101+
["mib"] = "@block.outer",
102+
["mil"] = "@statement.outer",
103+
["mif"] = "@function.outer",
104+
["min"] = "@number.inner",
101105
},
102106
swap_previous = {
103-
["gsh"] = "@parameter.inner",
104-
["gsk"] = "@statement.outer",
105-
["gsb"] = "@function.outer",
107+
["mh"] = "@parameter.inner",
108+
["mk"] = "@statement.outer",
109+
["map"] = "@parameter.inner",
110+
["mab"] = "@block.outer",
111+
["mal"] = "@statement.outer",
112+
["maf"] = "@function.outer",
113+
["man"] = "@number.inner",
106114
},
107115
},
108116
move = {
@@ -121,7 +129,7 @@ require'nvim-treesitter.configs'.setup {
121129
["]t"] = "@comment.*",
122130
["]r"] = "@return.inner",
123131
["]l"] = "@statement.*",
124-
["]n"] = "@number.outer",
132+
["]n"] = "@number.*",
125133
["]h"] = "@assignment.outer",
126134
},
127135
goto_next_end = {
@@ -137,7 +145,7 @@ require'nvim-treesitter.configs'.setup {
137145
["]T"] = "@comment.*",
138146
["]R"] = "@return.inner",
139147
["]L"] = "@statement.*",
140-
["]N"] = "@number.outer",
148+
["]N"] = "@number.*",
141149
["]H"] = "@assignment.outer",
142150
},
143151
goto_previous_start = {
@@ -153,7 +161,7 @@ require'nvim-treesitter.configs'.setup {
153161
["[t"] = "@comment.*",
154162
["[r"] = "@return.inner",
155163
["[l"] = "@statement.*",
156-
["[n"] = "@number.outer",
164+
["[n"] = "@number.*",
157165
["[h"] = "@assignment.outer",
158166
},
159167
goto_previous_end = {
@@ -169,7 +177,7 @@ require'nvim-treesitter.configs'.setup {
169177
["[T"] = "@comment.*",
170178
["[R"] = "@return.inner",
171179
["[L"] = "@statement.*",
172-
["[N"] = "@number.outer",
180+
["[N"] = "@number.*",
173181
["[H"] = "@assignment.outer",
174182
},
175183
-- Below will go to either the start or the end, whichever is closer.

lua/archvim/config/telescope.lua

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,3 @@ vim.keymap.set("n", "<leader>a", "<cmd>Telescope diagnostics<CR>")
7171
vim.keymap.set("n", "<leader>q", "<cmd>Telescope quickfix<CR>")
7272
-- 查看所有 Vim 通知
7373
vim.keymap.set("n", "<leader>n", "<cmd>Telescope notify<CR>")
74-
75-
-- 查找符号定义(LSP)
76-
vim.keymap.set("n", "gd", "<cmd>Telescope lsp_definitions<CR>")
77-
-- 查找类型定义(LSP)
78-
vim.keymap.set("n", "gy", "<cmd>Telescope lsp_type_definitions<CR>")
79-
-- 查找所有引用(LSP)
80-
vim.keymap.set("n", "gr", "<cmd>Telescope lsp_references<CR>")
81-
-- 查找函数实现(LSP)
82-
vim.keymap.set("n", "gD", "<cmd>Telescope lsp_implementations<CR>")

lua/archvim/mappings.lua

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,6 @@ vim.keymap.set({'v', 'n', 'i', 't'}, '<Ins>', [[<Cmd>ZenMode<CR>]])
105105
-- vim.keymap.set({"v", "n"}, "go", "<cmd>Ouroboros<CR>", { silent = true })
106106
-- vim.keymap.set({"v", "n"}, "gO", "<cmd>split | Ouroboros<CR>", { silent = true })
107107
-- vim.keymap.set({"v", "n"}, "g<C-o>", "<cmd>vsplit | Ouroboros<CR>", { silent = true })
108-
vim.keymap.set({"v", "n"}, "go", "<cmd>ClangdSwitchSourceHeader<CR>", { silent = true })
109-
vim.keymap.set({"v", "n"}, "gO", "<cmd>split | ClangdSwitchSourceHeader<CR>", { silent = true })
110-
vim.keymap.set({"v", "n"}, "g<C-o>", "<cmd>vsplit | ClangdSwitchSourceHeader<CR>", { silent = true })
111108
-- vim.keymap.set({"v", "n", "i"}, "<F10>", "<cmd>Neoformat<CR>", { silent = true })
112109
-- vim.keymap.set("n", "Q", "<cmd>wa<CR><cmd>qa!<CR>", { silent = true })
113110

@@ -151,35 +148,57 @@ vim.keymap.set('t', '<Esc>', [[<C-\><C-n>]], { noremap = true })
151148
-- vim.keymap.set('t', [[<Esc>]], [[<Esc>]], { noremap = true })
152149
-- vim.keymap.set('t', [[jk]], [[<C-\><C-n>]], opts)
153150

154-
vim.keymap.set({'v', 'n'}, '<F16>', function ()
151+
-- 格式化代码
152+
vim.keymap.set({'v'}, 'g=', [[<Cmd>Neoformat<CR>]])
153+
vim.keymap.set({'n'}, 'g=', function ()
155154
vim.lsp.buf.format()
156155
end)
157-
156+
vim.keymap.set({'v', 'n', 'i'}, '<F16>', function()
157+
vim.lsp.buf.format()
158+
end)
159+
-- 查看文档
158160
vim.keymap.set({'v', 'n'}, 'K', function ()
159161
vim.lsp.buf.hover()
160162
end)
161-
163+
-- 函数签名
162164
vim.keymap.set({'v', 'n'}, 'gK', function ()
163165
vim.lsp.buf.signature_help()
164166
end)
165-
167+
-- 代码修复
166168
vim.keymap.set({'v', 'n'}, 'gw', function ()
167169
vim.lsp.buf.code_action({
168-
-- context = {
169-
-- only = {
170-
-- "source",
171-
-- },
172-
-- diagnostics = {},
173-
-- },
174170
apply = true,
175171
})
176172
end)
173+
-- 重命名变量
177174
vim.keymap.set({'v', 'n'}, 'gn', function()
178175
return ":IncRename " .. vim.fn.expand("<cword>")
179176
end, { expr = true })
180177
vim.keymap.set({'v', 'n'}, 'gN', function()
181178
return ":IncRename "
182179
end, { expr = true })
180+
-- 查找符号定义
181+
vim.keymap.set("n", "gd", "<cmd>Telescope lsp_definitions<CR>")
182+
-- 查找符号声明
183+
vim.keymap.set("n", "gD", function()
184+
vim.lsp.buf.declaration()
185+
end)
186+
vim.keymap.set("n", "gsd", "<cmd>Trouble diagnostics toggle<CR>")
187+
-- 查找类型定义
188+
vim.keymap.set("n", "gy", "<cmd>Telescope lsp_type_definitions<CR>")
189+
-- 查找所有引用
190+
vim.keymap.set("n", "gr", "<cmd>Telescope lsp_references<CR>")
191+
-- 查找函数实现
192+
vim.keymap.set("n", "gY", "<cmd>Telescope lsp_implementations<CR>")
193+
-- 查看全部
194+
vim.keymap.set("n", "gz", "<cmd>Trouble lsp toggle<CR>")
195+
-- 头文件/源文件跳转
196+
vim.keymap.set({"v", "n"}, "go", "<cmd>ClangdSwitchSourceHeader<CR>", { silent = true })
197+
vim.keymap.set({"v", "n"}, "gO", "<cmd>split | ClangdSwitchSourceHeader<CR>", { silent = true })
198+
vim.keymap.set({"v", "n"}, "g<C-o>", "<cmd>vsplit | ClangdSwitchSourceHeader<CR>", { silent = true })
199+
200+
201+
183202
vim.keymap.set({'n'}, '<S-Tab>', '<C-o>')
184203
vim.keymap.set({'i'}, '<C-Space>', '<Space>')
185204

0 commit comments

Comments
 (0)