Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zhnd/dotconfig


https://github.com/zhnd/dotconfig

Last synced: 1 day ago
JSON representation

Awesome Lists containing this project

README

        

# 面向前端开发的 neovim 配置

为了练习 vim 编程方式,参考日常使用习惯,将自己的配置文件夹同步至此仓库,多设备同步,方便查看。

基于自身技术栈以及学习内容,主要支持以下文件类型:

- JavaScript
- TypeScript
- HTML
- CSS
- Less
- TypeScriptReact
- Rust

## 目前实现的主要功能:

- 使用内置[lsp](https://microsoft.github.io/language-server-protocol/) 客户端
- 自动提示、方法、文件跳转
- 代码片段
- 文件树
- 代码高亮
- code runner
- 终端集成
- [lazygit](https://github.com/jesseduffield/lazygit)集成
- 保存自动格式化
- [packer](https://github.com/wbthomason/packer.nvim)插件管理
- CSS Modules

## 使用指南

可直接 clone 本仓库到用户目录下,目前这个项目的配置内容仅在 MaxOS 进行测试,欢迎各位伙伴试用并 commit fix and feat mr。

需要手动安装各种依赖:

### 通用依赖

这些内容可以脱离 neovim 单独在终端中使用:

- Nodejs
- Python
- neovim:[安装文档](https://github.com/neovim/neovim/wiki/Installing-Neovim)
- lazygit:[安装文档](https://github.com/jesseduffield/lazygit#installation)

### lsp 依赖

这些内容是使用本配置的依赖,可在第一次启动 neovim 的时候按照提示依次安装:

#### npm install -g

- emmet-ls
- vscode-langservers-extracted
- typescript
- typescript-language-server
- cssmodules-language-server

一键安装:

```bash
npm install -g emmet-ls vscode-langservers-extracted typescript typescript-language-server cssmodules-language-server
```

如果你需要更新 Lua 配置文件,还需要安装

- lua-language-server:[安装文档](https://github.com/sumneko/lua-language-server/wiki/Build-and-Run)

如果你碰巧也在学习 Rust,还需要安装:

- Rust,强烈推荐使用 rustup:

```rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

- rust_analyzer:[安装文档](https://rust-analyzer.github.io/manual.html#installation)

## 常用快捷键

基本操作


u:: 撤销
r:: 替换光标下的字符,不进入插入模式,例如rx,将光标下的字符替换为x
ndd: 删除从光标所在行开始,向下的n行
x: 每按一次,删除光标所在位置的“后面”一个字符。
nx:删除光标所在位置的“后面”n个字符
X: 每按一次,删除光标所在位置的“前面”一个字符
nX: 删除光标所在位置的“前面”n个字符
:history: 显示最近在vim里面输入的历史
gcc: 注释一行
<<: 左移一行
>>: 右移一行
c?change: (先删除再进入插入模式)
d?delete: 先删除
p: 从光标右边开始粘贴,注意不能粘贴到Vim外的程序中
P: 大P,从光标左边开始粘贴
yy: 复制一整行
y$: 复制从光标所在位置,到行尾的所有字符
y0: (复制从光标所在位置,到行首的所有字符
~? : 转换大小写
gu: 转为小写
guiw: 就是让一个单词变成小写
gUiw: 就是让一个单词变成大写
>?:shift right (右移)
:shift left (左移)
diw: 删除一个单词,只删除单词本身,不会旁边的空格
daw: 删除一个单词,并删除旁边的一个空格
viw: 就表示选中一个单词
yiw: 表示复制一个单词
:%s/源字符串/目的字符串/g: 批量替换
:%s/源字符串/目的字符串/gc 单个替换

动作命令


f{char}find: 行内搜索一个字符
t{char}till: 功能类型 f{chat}, 但是是在这个搜索到的字符前停下,意思是到这个字符之前,很常用的motion
gg:跳到行首
G:跳到行尾
w:移到下个单词的第一个字符
b:移到上个单词的第一个字符
e:移到单词最后一个字符
ge:上个单词的最后一个字符
vaw “a word”: 选择一整个单词,包括它边上的空格
viw in word: 选择一整个单词,不包括空格

vim-surround


ysiw": 单词周围加双引号
ysiw(: 单词周围加圆括号, 左括号是带空格的
ysiw]: 单词周围加方括号, 右括号不带空格
ysiWb: 以空格为分界加圆括号,这是不带空格的括号,大 B 代表不带空格的花括号
ysfn: 从光标位置到字母 n 加
ystn: 从光标位置到字母 n 前面加
yss: 整行前后加
v: 选中,S v 模式选中区域前后加
cs'": 双引号改单引号,作用于整行
ds": 删除双引号,作用于整行

vim-easymotion


leader leader s 全文查找字符
leader leader w查找当前光标后面的单词首字母
leader leader b查找当前光标前面的单词首字母

****
### normal mode

#### 自定义

| 快捷键 | 说明 |
| ----------- | ------------------------- |
| jj | ESC |
| leader + e | :NvimTreeToggle |
| leader + f | vim.diagnostic.open_float |
| leader + ff | telscope.find_files |
| leader + fg | telscope.live_grep |
| leader + fb | telscope.buffers |
| leader + fh | telscope.help_tags |
| leader + g | lazygit_toggle |
| leader + r | :QuickRun |
| leader + dd | :Dash |

#### 插件

Lazygit

- 全局键绑定


ctrl+r: 切换到最近的仓库
pgup: 向上滚动主面板 (fn+up/shift+k)
pgdown: 向下滚动主面板 (fn+down/shift+j)
m: 查看 合并/变基 选项
ctrl+p: 查看自定义补丁选项
R: 刷新
x: 打开菜单
+: 下一屏模式(正常/半屏/全屏)
_: 上一屏模式
ctrl+s: 查看按路径过滤选项
W: 打开 diff 菜单
ctrl+e: 打开 diff 菜单
@: 打开命令日志菜单
}: 扩大差异视图中显示的上下文范围
{: 缩小差异视图中显示的上下文范围
:: 执行自定义命令
z: (通过 reflog)撤销「实验功能」
ctrl+z: (通过 reflog)重做「实验功能」
P: 推送
p: 拉取

- 列表面板导航


.: 下一页
,: 上一页
<: 滚动到顶部
>: 滚动到底部
/: 开始搜索
H: 向左滚动
L: 向右滚动
]: 下一个标签
[: 上一个标签

- Reflog 页面


ctrl+o: 将提交的 SHA 复制到剪贴板
space: 检出提交
y: copy commit attribute
o: 在浏览器中打开提交
n: 从提交创建新分支
g: 查看重置选项
c: 复制提交(拣选)
C: 复制提交范围(拣选)
ctrl+r: 重置已拣选(复制)的提交
enter: 查看提交

- 分支页面


ctrl+o: 将分支名称复制到剪贴板
i: 显示 git-flow 选项
space: 检出
n: 新分支
o: 创建抓取请求
O: 创建抓取请求选项
ctrl+y: 将抓取请求 URL 复制到剪贴板
c: 按名称检出
F: 强制检出
d: 删除分支
r: 将已检出的分支变基到该分支
M: 合并到当前检出的分支
f: 从上游快进此分支
g: 查看重置选项
R: 重命名分支
u: set/unset upstream
enter: 查看提交

- 子提交


ctrl+o: 将提交的 SHA 复制到剪贴板
space: 检出提交
y: copy commit attribute
o: 在浏览器中打开提交
n: 从提交创建新分支
g: 查看重置选项
c: 复制提交(拣选)
C: 复制提交范围(拣选)
ctrl+r: 重置已拣选(复制)的提交
enter: 查看提交的文件

- 子模块


ctrl+o: 将子模块名称复制到剪贴板
enter: 输入子模块
d: 删除子模块
u: 更新子模块
n: 添加新的子模块
e: 更新子模块 URL
i: 初始化子模块
b: 查看批量子模块选项

- 提交


ctrl+o: 将提交的 SHA 复制到剪贴板
ctrl+r: 重置已拣选(复制)的提交
b: 查看二分查找选项
s: 向下压缩
f: 修正提交(fixup)
r: 改写提交
R: 使用编辑器重命名提交
d: 删除提交
e: 编辑提交
p: 选择提交(变基过程中)
F: 为此提交创建修正
S: 压缩在所选提交之上的所有“fixup!”提交(自动压缩)
ctrl+j: 下移提交
ctrl+k: 上移提交
v: 粘贴提交(拣选)
A: 用已暂存的更改来修补提交
a: reset commit author
t: 还原提交
T: 标签提交
ctrl+l: 打开日志菜单
space: 检出提交
y: copy commit attribute
o: 在浏览器中打开提交
n: 从提交创建新分支
g: 查看重置选项
c: 复制提交(拣选)
C: 复制提交范围(拣选)
enter: 查看提交的文件

- 提交文件


ctrl+o: 将提交的文件名复制到剪贴板
c: 检出文件
d: 放弃对此文件的提交更改
o: 打开文件
e: 编辑文件
space: 补丁中包含的切换文件
a: toggle all files included in patch
enter: 输入文件以将所选行添加到补丁中(或切换目录折叠)
`: 切换文件树视图

- 文件


ctrl+o: 将文件名复制到剪贴板
ctrl+w: 切换是否在差异视图中显示空白字符差异
d: 查看'放弃更改'选项
space: 切换暂存状态
ctrl+b: Filter files (staged/unstaged)
c: 提交更改
w: 提交更改而无需预先提交钩子
A: 修补最后一次提交
C: 提交更改(使用编辑器编辑提交信息)
e: 编辑文件
o: 打开文件
i: 添加到 .gitignore
r: 刷新文件
s: 将所有更改加入贮藏
S: 查看贮藏选项
a: 切换所有文件的暂存状态
enter: 暂存单个 块/行 用于文件, 或 折叠/展开 目录
g: 查看上游重置选项
D: 查看重置选项
`: 切换文件树视图
M: 打开外部合并工具 (git mergetool)
f: 抓取

- 构建补丁中


esc: 退出逐行模式
o: 打开文件
: 选择上一行
: 选择下一行
: 选择上一个区块
: 选择下一个区块
ctrl+o: 将选中文本复制到剪贴板
space: 添加/移除 行到补丁
v: 切换拖动选择
V: 切换拖动选择
a: 切换选择区块

- 标签页面


space: 检出
d: 删除标签
P: 推送标签
n: 创建标签
g: 查看重置选项
enter: 查看提交

- 正在合并


esc: 返回文件面板
M: 打开外部合并工具 (git mergetool)
space: 选中区块
b: 选中所有区块
: 选择上一个冲突
: 选择下一个冲突
: 选择顶部块
: 选择底部块
e: 编辑文件
o: 打开文件
z: 撤销

- 正在暂存


esc: 返回文件面板
space: 切换行暂存状态
d: 取消变更 (git reset)
tab: 切换到其他面板
o: 打开文件
: 选择上一行
: 选择下一行
: 选择上一个区块
: 选择下一个区块
ctrl+o: 将选中文本复制到剪贴板
e: 编辑文件
v: 切换拖动选择
V: 切换拖动选择
a: 切换选择区块
E: edit hunk

- 正常


mouse wheel down: 向下滚动 (fn+up)
mouse wheel up: 向上滚动 (fn+down)

- 状态


e: 编辑配置文件
o: 打开配置文件
u: 检查更新
enter: 切换到最近的仓库
a: 显示所有分支的日志

- 贮藏


space: 应用
g: 应用并删除
d: 删除
n: 新分支
enter: 查看提交的文件

- 远程分支


space: 检出
n: 新分支
M: 合并到当前检出的分支
r: 将已检出的分支变基到该分支
d: 删除分支
u: 设置为检出分支的上游
esc: 返回远程仓库列表
g: 查看重置选项
enter: 查看提交

- 远程页面


f: 抓取远程仓库
n: 添加新的远程仓库
d: 删除远程
e: 编辑远程仓库

neovim tree



-- default mappings
local list = {
{ key = {"", "o", "<2-LeftMouse>"}, action = "edit" },
{ key = "", action = "edit_in_place" },
{ key = {"O"}, action = "edit_no_picker" },
{ key = {"<2-RightMouse>", ""}, action = "cd" },
{ key = "", action = "vsplit" },
{ key = "", action = "split" },
{ key = "", action = "tabnew" },
{ key = "<", action = "prev_sibling" },
{ key = ">", action = "next_sibling" },
{ key = "P", action = "parent_node" },
{ key = "", action = "close_node" },
{ key = "", action = "preview" },
{ key = "K", action = "first_sibling" },
{ key = "J", action = "last_sibling" },
{ key = "I", action = "toggle_git_ignored" },
{ key = "H", action = "toggle_dotfiles" },
{ key = "R", action = "refresh" },
{ key = "a", action = "create" },
{ key = "d", action = "remove" },
{ key = "D", action = "trash" },
{ key = "r", action = "rename" },
{ key = "", action = "full_rename" },
{ key = "x", action = "cut" },
{ key = "c", action = "copy" },
{ key = "p", action = "paste" },
{ key = "y", action = "copy_name" },
{ key = "Y", action = "copy_path" },
{ key = "gy", action = "copy_absolute_path" },
{ key = "[c", action = "prev_git_item" },
{ key = "]c", action = "next_git_item" },
{ key = "-", action = "dir_up" },
{ key = "s", action = "system_open" },
{ key = "f", action = "live_filter" },
{ key = "F", action = "clear_live_filter" },
{ key = "q", action = "close" },
{ key = "g?", action = "toggle_help" },
{ key = "W", action = "collapse_all" },
{ key = "S", action = "search_node" },
{ key = "", action = "toggle_file_info" },
{ key = ".", action = "run_file_command" }
}