├── README.md ├── mac_software.md └── vscode ├── keybindings.json ├── plugins.md └── settings.json /README.md: -------------------------------------------------------------------------------- 1 | # configuration 2 | 配置文件 -------------------------------------------------------------------------------- /mac_software.md: -------------------------------------------------------------------------------- 1 | # Mac 软件管理方案 2 | 基于命令自动保存到 iCloud云盘下的 AppList 文件夹 3 | 4 | ## 备份 5 | 软件安装有以下 4 种方式 6 | 1. Mac App Store 安装,位置:/Applications 7 | 2. 手动下载安装,位置:/Applications 8 | 3. Homebrew 安装,位置:/usr/local/Cellar,主要是一些命令行工具 9 | 4. Homebrew Cask 安装,位置:/usr/local/Caskroom,主要是各种普通软件,如 Alfred、Steam 等 10 | 11 | ```sh 12 | # All Apps 13 | ls -lh /Applications > ~/Library/Mobile\ Documents/com~apple~CloudDocs/AppList/All_AppList 14 | 15 | # MAS Apps 16 | /usr/local/bin/mas list > ~/Library/Mobile\ Documents/com~apple~CloudDocs/AppList/MAS_AppList 17 | 18 | # brew Apps 19 | /usr/local/bin/brew list > ~/Library/Mobile\ Documents/com~apple~CloudDocs/AppList/Brew_AppList 20 | 21 | # brew cask Apps 22 | /usr/local/bin/brew cask list > ~/Library/Mobile\ Documents/com~apple~CloudDocs/AppList/BrewCask_AppList 23 | ``` 24 | 25 | ## 自动安装 26 | 需要说明的是,第一行命令生成的所有软件列表,鱼龙混杂,需要你自己挑选并安装。 27 | 28 | 后面几种可以自动安装。但是,在安装前,你应该检查列表文件,去除一些不再需要的 App,确保内容无误。 29 | 30 | ```sh 31 | # 进入 iCloud 中的 AppList 文件夹 32 | cd ~/Library/Mobile\ Documents/com\~apple\~CloudDocs/AppList 33 | 34 | # 生成 MAS_AppList 安装命令 35 | cat AppList/MAS_AppList | sed "s/(.*)//g" | sed -Ee 's/([0-9]+) (.+)/mas install \1 #\2/g' > ~/Desktop/AppInstaller 36 | 37 | # 生成 Brew_AppList 安装命令 38 | echo "\nbrew install $(cat AppList/Brew_AppList | tr '\n' ' ')" >> ~/Desktop/AppInstaller 39 | 40 | # 生成 BrewCask_AppList 安装命令 41 | echo "\nbrew cask install $(cat AppList/BrewCask_AppList | tr '\n' ' ')" >> ~/Desktop/AppInstaller 42 | 43 | # 开始安装 44 | chmod +x ~/Desktop/AppInstaller 45 | ~/Desktop/AppInstaller 46 | ``` 47 | -------------------------------------------------------------------------------- /vscode/keybindings.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "key": "a", 4 | "command": "explorer.newFile", 5 | "when": "filesExplorerFocus && !inputFocus" 6 | }, 7 | { 8 | "key": "shift+a", 9 | "command": "explorer.newFolder", 10 | "when": "filesExplorerFocus && !inputFocus" 11 | }, 12 | { 13 | "key": "r", 14 | "command": "renameFile", 15 | "when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus" 16 | }, 17 | { 18 | "key": "d", 19 | "command": "deleteFile", 20 | "when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceReadonly && !inputFocus" 21 | }, 22 | { 23 | "key": "x", 24 | "command": "filesExplorer.cut", 25 | "when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus" 26 | }, 27 | { 28 | "key": "y", 29 | "command": "filesExplorer.copy", 30 | "when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceIsRoot && !inputFocus" 31 | }, 32 | { 33 | "key": "p", 34 | "command": "filesExplorer.paste", 35 | "when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceReadonly && !inputFocus" 36 | }, 37 | { 38 | "key": "ctrl+;", 39 | "command": "workbench.view.explorer", 40 | "when": "viewContainer.workbench.view.explorer.enabled" 41 | }, 42 | { 43 | // window move left */ 44 | "key": "shift+left", 45 | "command": "vim.remap", 46 | "when": "vim.mode == 'Normal'", 47 | "args": { 48 | "after": [ 49 | "", 50 | "h" 51 | ] 52 | } 53 | }, 54 | { 55 | // window move right */ 56 | "key": "shift+right", 57 | "command": "vim.remap", 58 | "when": "vim.mode == 'Normal'", 59 | "args": { 60 | "after": [ 61 | "", 62 | "l" 63 | ] 64 | } 65 | }, 66 | { 67 | // window move up */ 68 | "key": "shift+up", 69 | "command": "vim.remap", 70 | "when": "vim.mode == 'Normal'", 71 | "args": { 72 | "after": [ 73 | "", 74 | "k" 75 | ] 76 | } 77 | }, 78 | { 79 | // window move down */ 80 | "key": "shift+down", 81 | "command": "vim.remap", 82 | "when": "vim.mode == 'Normal'", 83 | "args": { 84 | "after": [ 85 | "", 86 | "j" 87 | ] 88 | } 89 | }, 90 | { 91 | "key": "shift+cmd+\\", 92 | "command": "workbench.action.splitEditorUp" 93 | }, 94 | { 95 | "key": "ctrl+,", 96 | "command": "workbench.action.terminal.toggleTerminal", 97 | "when": "terminal.active" 98 | }, 99 | { 100 | "key": "cmd+]", 101 | "command": "workbench.action.terminal.focusNextPane", 102 | "when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported" 103 | }, 104 | { 105 | "key": "alt+cmd+right", 106 | "command": "-workbench.action.terminal.focusNextPane", 107 | "when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported" 108 | }, 109 | { 110 | "key": "cmd+[", 111 | "command": "workbench.action.terminal.focusPreviousPane", 112 | "when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported" 113 | }, 114 | { 115 | "key": "alt+cmd+left", 116 | "command": "-workbench.action.terminal.focusPreviousPane", 117 | "when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported" 118 | }, 119 | { 120 | "key": "shift+alt+q", 121 | "command": "workbench.action.terminal.kill" 122 | }, 123 | { 124 | "key": "ctrl+alt+n", 125 | "command": "workbench.action.terminal.new", 126 | "when": "terminalProcessSupported || terminalWebExtensionContributedProfile" 127 | }, 128 | { 129 | "key": "ctrl+shift+`", 130 | "command": "-workbench.action.terminal.new", 131 | "when": "terminalProcessSupported || terminalWebExtensionContributedProfile" 132 | }, 133 | { 134 | "key": "shift+cmd+0", 135 | "command": "workbench.action.debug.restart", 136 | "when": "inDebugMode" 137 | }, 138 | { 139 | "key": "shift+cmd+f5", 140 | "command": "-workbench.action.debug.restart", 141 | "when": "inDebugMode" 142 | }, 143 | { 144 | "key": "shift+cmd+9", 145 | "command": "editor.debug.action.toggleBreakpoint", 146 | "when": "debuggersAvailable && editorTextFocus" 147 | }, 148 | { 149 | "key": "f9", 150 | "command": "-editor.debug.action.toggleBreakpoint", 151 | "when": "debuggersAvailable && editorTextFocus" 152 | }, 153 | { 154 | "key": "cmd+'", 155 | "command": "workbench.action.debug.stepOver", 156 | "when": "debugState == 'stopped'" 157 | }, 158 | { 159 | "key": "f10", 160 | "command": "-workbench.action.debug.stepOver", 161 | "when": "debugState == 'stopped'" 162 | }, 163 | { 164 | "key": "shift+cmd+'", 165 | "command": "workbench.action.debug.stepInto", 166 | "when": "debugState != 'inactive'" 167 | }, 168 | { 169 | "key": "f11", 170 | "command": "-workbench.action.debug.stepInto", 171 | "when": "debugState != 'inactive'" 172 | }, 173 | { 174 | "key": "ctrl+'", 175 | "command": "workbench.action.focusFirstEditorGroup" 176 | }, 177 | { 178 | "key": "tab", 179 | "command": "-acceptSelectedSuggestion", 180 | "when": "suggestWidgetHasFocusedSuggestion && suggestWidgetVisible && textInputFocus" 181 | }, 182 | // 下面是配套 neovim 插件的配置,现在不在使用 neovim 所以注释掉 183 | // { 184 | // "command": "vscode-neovim.send", 185 | // // the key sequence to activate the binding 186 | // "key": "ctrl+n", 187 | // // don't activate during insert mode 188 | // "when": "editorTextFocus && neovim.mode != insert", 189 | // // the input to send to Neovim 190 | // "args": "" 191 | // }, 192 | // { 193 | // // window move left 194 | // "command": "vscode-neovim.send", 195 | // "key": "shift+left", 196 | // "when": "neovim.mode == normal", 197 | // "args": "h" 198 | // }, 199 | // { 200 | // // window move right 201 | // "command": "vscode-neovim.send", 202 | // "key": "shift+right", 203 | // "when": "neovim.mode == normal", 204 | // "args": "l" 205 | // }, 206 | // { 207 | // // window move down 208 | // "command": "vscode-neovim.send", 209 | // "key": "shift+down", 210 | // "when": "neovim.mode == normal", 211 | // "args": "j" 212 | // }, 213 | // { 214 | // // window move up 215 | // "command": "vscode-neovim.send", 216 | // "key": "shift+up", 217 | // "when": "neovim.mode == normal", 218 | // "args": "k" 219 | // }, 220 | // { 221 | // "key": "cmd+/", 222 | // "command": "-editor.action.commentLine", 223 | // "when": "editorTextFocus && !editorReadonly" 224 | // }, 225 | // { 226 | // "key": "cmd+/", 227 | // "command": "", 228 | // "when": "editorTextFocus && !editorReadonly" 229 | // }, 230 | // { 231 | // "command": "vscode-neovim.send", 232 | // "key": "cmd+/", 233 | // "when": "neovim.mode == normal || neovim.mode == visual", 234 | // "args": "" 235 | // }, 236 | // { 237 | // "command": "vscode-neovim.send", 238 | // "key": "ctrl+y", 239 | // "when": "neovim.mode == normal || neovim.mode == visual", 240 | // "args": "" 241 | // }, 242 | // { 243 | // "command": "vscode-neovim.send", 244 | // "key": "ctrl+p", 245 | // "when": "neovim.mode == normal", 246 | // "args": [""] 247 | // }, 248 | ] -------------------------------------------------------------------------------- /vscode/plugins.md: -------------------------------------------------------------------------------- 1 | # Plugins 2 | 3 | 4 | ## [Abracadabra, refactor this!](https://marketplace.visualstudio.com/items?itemName=nicoespeon.abracadabra) 5 | 6 | 重构专用插件 7 | 8 | 9 | ## [Astro](https://marketplace.visualstudio.com/items?itemName=astro-build.astro-vscode) 10 | 11 | 如果使用 Astro 的话 那么需要安装下 不然就不需要安装了 12 | 13 | 14 | ## [Auto Close Tag](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag) 15 | 16 | Automatically add HTML/XML close tag, same as Visual Studio IDE or Sublime Text does 17 | 18 | 写 html 必备 19 | 20 | 21 | ## [Auto Rename Tag](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag) 22 | 23 | 写 html 必备 24 | 25 | ## [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) 26 | 27 | 检测英文拼写是否正确 28 | 29 | ## [Delete Function](https://marketplace.visualstudio.com/items?itemName=cuixiaorui.delete-function) 30 | 31 | 快速删除一个函数 32 | > 是我自己写的插件,后面会在 vscodeVim 中实现一个 function-text-object 然后这个插件就可以不用了 33 | 34 | ## [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) 35 | 36 | eslint 专用 37 | 38 | ## [Evondev Dracula](https://marketplace.visualstudio.com/items?itemName=evondev.dracula-high-contrast) 39 | 40 | 主题 41 | 42 | 一丢丢的紫色 很骚~ 43 | 44 | ## [Git History](https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory) 45 | 46 | 可视化查看当前文件的 git history 47 | 48 | git 必备插件 49 | 50 | ## [GitLens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens) 51 | 52 | 增强 git 功能 53 | 54 | git 必备插件 55 | 56 | ## [Highlight Matching Tag](https://marketplace.visualstudio.com/items?itemName=vincaslt.highlight-matching-tag) 57 | 58 | 高亮匹配的 tag 59 | 60 | 写 html 必备 61 | 62 | 63 | ## [Hocus Pocus](https://marketplace.visualstudio.com/items?itemName=nicoespeon.hocus-pocus) 64 | 65 | 重构专用插件 66 | 67 | ## [HTML CSS Support](https://marketplace.visualstudio.com/items?itemName=ecmel.vscode-html-css) 68 | 69 | 写 css 专用 70 | 71 | ## [IntelliSense for CSS class names in HTML](https://marketplace.visualstudio.com/items?itemName=Zignd.html-css-class-completion) 72 | 73 | 74 | 写 css 专用 75 | 76 | ## [JavaScript (ES6) code snippets](https://marketplace.visualstudio.com/items?itemName=xabikos.JavaScriptSnippets) 77 | 78 | snippets 相关 79 | 80 | 81 | ## [JavaScript standardjs styled snippets](https://marketplace.visualstudio.com/items?itemName=capaj.vscode-standardjs-snippets) 82 | 83 | snippets 相关 84 | 85 | ## [Jest Snippets](https://marketplace.visualstudio.com/items?itemName=andys8.jest-snippets) 86 | 87 | snippets 相关 88 | 89 | ## [Vue VSCode Snippets](https://marketplace.visualstudio.com/items?itemName=sdras.vue-vscode-snippets) 90 | 91 | snippets 相关 92 | 93 | ## [Jest Runner](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner) 94 | 95 | 写 jest 专用 96 | 97 | 98 | ## [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) 99 | 100 | 快速打开一个服务器 来浏览页面 101 | 102 | ## [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) 103 | 104 | 结对编程专用 105 | 106 | ## [Markdown All in One](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one) 107 | 108 | 109 | 写 markdown 专用 110 | 111 | 112 | ## [npm Intellisense](https://marketplace.visualstudio.com/items?itemName=christian-kohler.npm-intellisense) 113 | 114 | 智能感知安装的 npm 包 115 | 116 | ## [Path Intellisense](https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense) 117 | 118 | 智能感知 path 119 | 120 | ## [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) 121 | 122 | Prettier 专用 123 | 124 | 125 | ## [REST Client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) 126 | 127 | 写后端 api 用的, 可以基于配置来发请求 128 | 129 | ## [Search node_modules](https://marketplace.visualstudio.com/items?itemName=jasonnutter.search-node-modules) 130 | 131 | 可以搜索 node_modules 的包,在找包的时候非常的方便 132 | 133 | ## [Tailwind CSS IntelliSense](https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss) 134 | 135 | 写 tailwind css 专用 136 | 137 | ## [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) 138 | 139 | 写 vue 专用 140 | 141 | ## [Vim](https://marketplace.visualstudio.com/items?itemName=vscodevim.vim) 142 | 143 | vscodeVim 144 | 145 | ## [Vitest](https://marketplace.visualstudio.com/items?itemName=ZixuanChen.vitest-explorer) 146 | 147 | 写 vitest 专用 148 | 149 | ## [Vitest Runner](https://marketplace.visualstudio.com/items?itemName=kingwl.vscode-vitest-runner) 150 | 151 | 写 vitest 专用 这个可以在 test case 上面显示 debug 和 run 按钮 比较的方便 152 | 153 | ## [vscode-icons](https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons) 154 | 155 | icons 156 | 157 | ## [Vue Language Features (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) 158 | 159 | 160 | 写 vue 专用 161 | 162 | ## [Vue Peek](https://marketplace.visualstudio.com/items?itemName=dariofuzinato.vue-peek) 163 | 164 | 可以基于组件跳转到组件文件内 165 | 166 | 写 vue 专用 167 | -------------------------------------------------------------------------------- /vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "workbench.iconTheme": "vscode-icons", 3 | "editor.acceptSuggestionOnCommitCharacter": false, 4 | "editor.fontLigatures": true, 5 | "editor.fontSize": 16, 6 | "editor.lineHeight": 24, 7 | "editor.lineNumbers": "on", 8 | "editor.fontFamily": "FiraCode-Medium", 9 | "editor.minimap.enabled": false, 10 | "editor.quickSuggestions": { 11 | "other": true, 12 | "comments": true, 13 | "strings": true 14 | }, 15 | "editor.formatOnSave": false, 16 | "editor.codeActionsOnSave": { 17 | "source.fixAll.eslint": true 18 | }, 19 | "[typescript]": { 20 | "editor.defaultFormatter": "esbenp.prettier-vscode" 21 | }, 22 | "terminal.integrated.defaultProfile.osx": "zsh", 23 | "terminal.integrated.fontFamily": "FiraCode-Medium", 24 | "terminal.integrated.fontSize": 15, 25 | "[javascript]": { 26 | "editor.defaultFormatter": "esbenp.prettier-vscode" 27 | }, 28 | "cSpell.userWords": [ 29 | "Codegen", 30 | "composables", 31 | "Pinia", 32 | "vitest", 33 | "vuex" 34 | ], 35 | "[vue]": { 36 | "editor.defaultFormatter": "esbenp.prettier-vscode" 37 | }, 38 | "[html]": { 39 | "editor.defaultFormatter": "vscode.html-language-features" 40 | }, 41 | "[json]": { 42 | "editor.defaultFormatter": "esbenp.prettier-vscode" 43 | }, 44 | "[jsonc]": { 45 | "editor.defaultFormatter": "vscode.json-language-features" 46 | }, 47 | "vsicons.dontShowNewVersionMessage": true, 48 | "vsicons.presets.jsonOfficial": true, 49 | "liveServer.settings.donotShowInfoMsg": true, 50 | "editor.renderWhitespace": "none", 51 | "[markdown]": { 52 | "editor.defaultFormatter": "esbenp.prettier-vscode" 53 | }, 54 | "[typescriptreact]": { 55 | "editor.defaultFormatter": "esbenp.prettier-vscode" 56 | }, 57 | "workbench.editor.showTabs": false, 58 | "[rust]": { 59 | "editor.defaultFormatter": "statiolake.vscode-rustfmt" 60 | }, 61 | "[javascriptreact]": { 62 | "editor.defaultFormatter": "esbenp.prettier-vscode" 63 | }, 64 | "editor.tabSize": 8, 65 | "editor.cursorStyle": "line", 66 | "editor.insertSpaces": false, 67 | "editor.wordSeparators": "/\\()\"':,.;<>~!@#$%^&*|+=[]{}`?-", 68 | "editor.wordWrap": "off", 69 | "security.workspace.trust.untrustedFiles": "newWindow", 70 | "diffEditor.ignoreTrimWhitespace": false, 71 | "files.associations": { 72 | "*.json": "jsonc" 73 | }, 74 | "editor.guides.indentation": false, 75 | "vim.argumentObjectOpeningDelimiters": [ 76 | "(", 77 | "[", 78 | "{" 79 | ], 80 | "vim.argumentObjectClosingDelimiters": [ 81 | ")", 82 | "]", 83 | "}" 84 | ], 85 | "vim.vimrc.enable": true, 86 | "vim.easymotion": true, 87 | "vim.showMarksInGutter": true, 88 | // "vim.easymotionDimBackground":false, 89 | // "vim.easymotionMarkerBackgroundColor": "#ccff88", 90 | // "vim.easymotionMarkerForegroundColorOneChar": "#000000", 91 | // "vim.easymotionMarkerForegroundColorTwoCharFirst":"#ff0000", 92 | // "vim.easymotionMarkerForegroundColorTwoCharSecond":"#000000", 93 | // "vim.easymotionMarkerFontWeight":"normal", 94 | "vim.leader": "", 95 | "vim.foldfix": true, 96 | "vim.useSystemClipboard": false, 97 | "vim.easymotionJumpToAnywhereRegex": "\\b[A-Za-z0-9]|[A-Za-z0-9]\\b|_.|#.|=.|[a-z][A-Z]|{|\\(|\\[", 98 | "vim.sneak": false, 99 | "vim.flash.enable": true, 100 | "vim.flash.ignorecase": true, 101 | "vim.leap.enable": true, 102 | "vim.leap.showMarkerPosition": "target", 103 | "vim.leap.bidirectionalSearch": true, 104 | // "vim.camelCaseMotion.enable": true, 105 | "vim.visualModeKeyBindingsNonRecursive": [ 106 | { 107 | // 在可视化模式下 y 之后光标停到当前的位置 108 | "before": [ 109 | "y" 110 | ], 111 | "after": [ 112 | "y", 113 | "g", 114 | "v", 115 | "" 116 | ] 117 | }, 118 | { 119 | "before": [ 120 | "H" 121 | ], 122 | "after": [ 123 | "^" 124 | ] 125 | }, 126 | { 127 | "before": [ 128 | "L" 129 | ], 130 | "after": [ 131 | "g", 132 | "_" 133 | ] 134 | }, 135 | { 136 | "before": [ 137 | "J" 138 | ], 139 | "after": [ 140 | "5", 141 | "j" 142 | ] 143 | }, 144 | { 145 | "before": [ 146 | "K" 147 | ], 148 | "after": [ 149 | "5", 150 | "k" 151 | ] 152 | }, 153 | { 154 | // vim-indent-object 155 | "before": [ 156 | "a", 157 | "i" 158 | ], 159 | "after": [ 160 | "a", 161 | "I" 162 | ] 163 | }, 164 | { 165 | // todo 等会看看还需要不 166 | "before": [ 167 | "", 168 | "f" 169 | ], 170 | "after": [ 171 | "", 172 | "", 173 | "2s", 174 | ] 175 | }, 176 | { 177 | // 重构手法: 提取函数 178 | "before": [ 179 | "", 180 | "r", 181 | "f" 182 | ], 183 | "commands": [ 184 | { 185 | "command": "editor.action.refactor", 186 | "args": { 187 | "kind": "refactor.extract.function" 188 | } 189 | } 190 | ] 191 | }, 192 | { 193 | // 重构手法: 提取变量 194 | "before": [ 195 | "", 196 | "r", 197 | "v" 198 | ], 199 | "commands": [ 200 | "abracadabra.extract" 201 | ] 202 | }, 203 | { 204 | // 向右侧跳转 利用的 easymotion 205 | "before": [ 206 | "", 207 | "l" 208 | ], 209 | "after": [ 210 | "", 211 | "", 212 | "l", 213 | ] 214 | }, 215 | { 216 | // 向左侧跳转 利用的 easymotion 217 | "before": [ 218 | "", 219 | "h" 220 | ], 221 | "after": [ 222 | "", 223 | "", 224 | "h", 225 | ] 226 | }, 227 | { 228 | // 基于行的向上跳转 利用的 easymotion 229 | "before": [ 230 | "", 231 | "k" 232 | ], 233 | "after": [ 234 | "", 235 | "", 236 | "k", 237 | ] 238 | }, 239 | { 240 | // 基于行的向下跳转 利用的 easymotion 241 | "before": [ 242 | "", 243 | "j" 244 | ], 245 | "after": [ 246 | "", 247 | "", 248 | "j", 249 | ] 250 | }, 251 | { 252 | // 基于单词的跳转 单词首 全局向下 基于 easymotion 253 | "before": [ 254 | "", 255 | "w" 256 | ], 257 | "after": [ 258 | "", 259 | "", 260 | "w", 261 | ] 262 | }, 263 | { 264 | // 基于单词的跳转 单词尾 全局向下 基于 easymotion 265 | "before": [ 266 | "", 267 | "e" 268 | ], 269 | "after": [ 270 | "", 271 | "", 272 | "e", 273 | ] 274 | }, 275 | { 276 | // 基于单词的跳转 单词首 全局向上 基于 easymotion 277 | "before": [ 278 | "", 279 | "b" 280 | ], 281 | "after": [ 282 | "", 283 | "", 284 | "b", 285 | ] 286 | }, 287 | { 288 | // 基于单词的跳转 单词尾 全局向上 基于 easymotion 289 | "before": [ 290 | "", 291 | "g", 292 | "e" 293 | ], 294 | "after": [ 295 | "", 296 | "", 297 | "g", 298 | "e", 299 | ] 300 | }, 301 | ], 302 | "vim.operatorPendingModeKeyBindings": [ 303 | { 304 | "before": [ 305 | "H" 306 | ], 307 | "after": [ 308 | "^" 309 | ] 310 | }, 311 | { 312 | "before": [ 313 | "L" 314 | ], 315 | "after": [ 316 | "g", 317 | "_" 318 | ] 319 | }, 320 | { 321 | "before": [ 322 | "a", 323 | "i" 324 | ], 325 | "after": [ 326 | "a", 327 | "I" 328 | ] 329 | } 330 | ], 331 | "vim.normalModeKeyBindingsNonRecursive": [ 332 | { 333 | "before": [ 334 | "", 335 | "u" 336 | ], 337 | "after": [ 338 | "~" 339 | ] 340 | }, 341 | { 342 | "before": [ 343 | "H" 344 | ], 345 | "after": [ 346 | "^" 347 | ] 348 | }, 349 | { 350 | "before": [ 351 | "L" 352 | ], 353 | "after": [ 354 | "g", 355 | "_" 356 | ] 357 | }, 358 | { 359 | "before": [ 360 | "J" 361 | ], 362 | "after": [ 363 | "5", 364 | "j" 365 | ] 366 | }, 367 | { 368 | "before": [ 369 | "K" 370 | ], 371 | "after": [ 372 | "5", 373 | "k" 374 | ] 375 | }, 376 | { 377 | // 选中一个对象/数组 378 | "before": [ 379 | "", 380 | "s" 381 | ], 382 | "after": [ 383 | "V", 384 | "$", 385 | "%" 386 | ] 387 | }, 388 | { 389 | // 向右侧跳转 利用的 easymotion 390 | "before": [ 391 | "", 392 | "l" 393 | ], 394 | "after": [ 395 | "", 396 | "", 397 | "l", 398 | ] 399 | }, 400 | { 401 | // 向左侧跳转 利用的 easymotion 402 | "before": [ 403 | "", 404 | "h" 405 | ], 406 | "after": [ 407 | "", 408 | "", 409 | "h", 410 | ] 411 | }, 412 | { 413 | // 基于行的向上跳转 利用的 easymotion 414 | "before": [ 415 | "", 416 | "k" 417 | ], 418 | "after": [ 419 | "", 420 | "", 421 | "k", 422 | ] 423 | }, 424 | { 425 | // 基于行的向下跳转 利用的 easymotion 426 | "before": [ 427 | "", 428 | "j" 429 | ], 430 | "after": [ 431 | "", 432 | "", 433 | "j", 434 | ] 435 | }, 436 | { 437 | // 基于单词的跳转 单词首 全局向下 基于 easymotion 438 | "before": [ 439 | "", 440 | "w" 441 | ], 442 | "after": [ 443 | "", 444 | "", 445 | "w", 446 | ] 447 | }, 448 | { 449 | // 基于单词的跳转 单词尾 全局向下 基于 easymotion 450 | "before": [ 451 | "", 452 | "e" 453 | ], 454 | "after": [ 455 | "", 456 | "", 457 | "e", 458 | ] 459 | }, 460 | { 461 | // 基于单词的跳转 单词首 全局向上 基于 easymotion 462 | "before": [ 463 | "", 464 | "b" 465 | ], 466 | "after": [ 467 | "", 468 | "", 469 | "b", 470 | ] 471 | }, 472 | { 473 | // 基于单词的跳转 单词尾 全局向上 基于 easymotion 474 | "before": [ 475 | "", 476 | "g", 477 | "e" 478 | ], 479 | "after": [ 480 | "", 481 | "", 482 | "g", 483 | "e", 484 | ] 485 | }, 486 | // 删除一个函数 487 | { 488 | "before": [ 489 | "", 490 | "d", 491 | "j" 492 | ], 493 | "commands": [ 494 | "delete-function.deleteFunction" 495 | ] 496 | }, 497 | { 498 | // 创建一个函数 光标需要在要创建的函数上 499 | "before": [ 500 | "", 501 | "c", 502 | "f" 503 | ], 504 | "commands": [ 505 | "hocusPocus.createFunction" 506 | ] 507 | }, 508 | { 509 | // 创建一个变量 光标需要在要创建的函数上 510 | "before": [ 511 | "", 512 | "c", 513 | "v" 514 | ], 515 | "commands": [ 516 | "hocusPocus.createVariable" 517 | ] 518 | }, 519 | { 520 | // 重构手法: 提取变量 521 | "before": [ 522 | "", 523 | "r", 524 | "v", 525 | ], 526 | "commands": [ 527 | "abracadabra.extract" 528 | ] 529 | }, 530 | { 531 | "before": [ 532 | "", 533 | "g", 534 | "g" 535 | ], 536 | "commands": [ 537 | "workbench.view.scm" 538 | ] 539 | }, 540 | { 541 | // 创建一个文件夹 542 | "before": [ 543 | "", 544 | "n", 545 | "d" 546 | ], 547 | "commands": [ 548 | "explorer.newFolder" 549 | ] 550 | }, 551 | { 552 | // 创建一个文件 553 | "before": [ 554 | "", 555 | "n", 556 | "f" 557 | ], 558 | "commands": [ 559 | "explorer.newFile" 560 | ] 561 | }, 562 | { 563 | // 全局格式化代码 564 | "before": [ 565 | "", 566 | "d", 567 | "f" 568 | ], 569 | "commands": [ 570 | "editor.action.formatDocument" 571 | ] 572 | }, 573 | { 574 | // 重命名 575 | "before": [ 576 | "", 577 | "r", 578 | "n" 579 | ], 580 | "commands": [ 581 | "abracadabra.renameSymbol", 582 | ] 583 | }, 584 | { 585 | "before": [ 586 | "J" 587 | ], 588 | "after": [ 589 | "5", 590 | "j" 591 | ] 592 | }, 593 | { 594 | "before": [ 595 | "K" 596 | ], 597 | "after": [ 598 | "5", 599 | "k" 600 | ] 601 | }, 602 | ], 603 | "terminal.external.osxExec": "iTerm.app", 604 | "debug.disassemblyView.showSourceCode": false, 605 | "terminal.integrated.env.osx": { 606 | "FIG_NEW_SESSION": "1" 607 | }, 608 | "editor.accessibilitySupport": "off", 609 | "editor.smoothScrolling": true, 610 | "[css]": { 611 | "editor.defaultFormatter": "vscode.css-language-features" 612 | }, 613 | "editor.stickyScroll.enabled": true, 614 | "[astro]": { 615 | "editor.defaultFormatter": "astro-build.astro-vscode" 616 | }, 617 | "debug.onTaskErrors": "debugAnyway", 618 | "audioCues.lineHasWarning": "auto", 619 | "files.exclude": { 620 | "**/.git": true, 621 | "**/.svn": true, 622 | "**/.hg": true, 623 | "**/CVS": true, 624 | "**/.DS_Store": true, 625 | "**/tmp": true, 626 | "**/node_modules": false, 627 | "**/bower_components": true, 628 | }, 629 | "files.watcherExclude": { 630 | "**/.git/objects/**": true, 631 | "**/.git/subtree-cache/**": true, 632 | "**/node_modules/**": true, 633 | "**/tmp/**": true, 634 | "**/bower_components/**": true, 635 | }, 636 | "editor.guides.bracketPairs": "active", 637 | "vscode-neovim.neovimExecutablePaths.darwin": "/opt/homebrew/opt/neovim/bin/nvim", 638 | "vscode-neovim.neovimExecutablePaths.linux": "/opt/homebrew/opt/neovim/bin/nvim", 639 | "vscode-neovim.neovimExecutablePaths.win32": "/opt/homebrew/opt/neovim/bin/nvim", 640 | "vscode-neovim.neovimInitVimPaths.darwin": "/Users/cxr/.config/nvim/init_vscode.lua", 641 | "vscode-neovim.logOutputToConsole": false, 642 | "workbench.colorTheme": "Evondev Dracula Darker Contrast", 643 | "todo-tree.general.tags": [ 644 | "BUG", 645 | "HACK", 646 | "FIXME", 647 | "TODO", 648 | "XXX", 649 | "[ ]", 650 | "[x]", 651 | "heihei", 652 | "TODO nihao", 653 | "todo ni", 654 | "TODO ni", 655 | "FIXME a" 656 | ], 657 | "[lua]": { 658 | "editor.defaultFormatter": "sumneko.lua" 659 | }, 660 | "editor.suggest.snippetsPreventQuickSuggestions": false, 661 | "CodeGPT.temperature": 0, 662 | "editor.inlineSuggest.showToolbar": "always", 663 | "github.copilot.advanced": {}, 664 | "editor.inlineSuggest.enabled": true, 665 | "editor.snippetSuggestions": "top", 666 | "CodeGPT.model": "CodeGPT Plus", 667 | "github.copilot.inlineSuggest.enable": false, 668 | "github.copilot.editor.enableCodeActions": false, 669 | "github.copilot.editor.enableAutoCompletions": false, 670 | "workbench.tree.indent": 15, 671 | "workbench.tree.renderIndentGuides": "always", 672 | "workbench.colorCustomizations": { 673 | "tree.indentGuidesStroke": "#9a86fd" 674 | }, 675 | "window.zoomLevel": 2 676 | } --------------------------------------------------------------------------------