├── assets └── presentation.gif ├── .github └── FUNDING.yml ├── LICENSE ├── extensions.txt ├── welcomePage.js ├── tasks.json ├── keybindings.json ├── settings_linux.json ├── settings.json └── README.md /assets/presentation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EliTheSurfer/EliVim-VSCode/HEAD/assets/presentation.gif -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: elithesurfer 14 | thanks_dev: # Replace with a single thanks.dev username 15 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Eli Sall 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /extensions.txt: -------------------------------------------------------------------------------- 1 | adamsome.vscode-theme-gruvbox-minor 2 | alefragnani.project-manager 3 | alexlapwood.hyper-terminal-theme 4 | amazonwebservices.aws-toolkit-vscode 5 | angelmaneuver.wallpaper-setting 6 | asvetliakov.run-current-test 7 | asvetliakov.vscode-neovim 8 | atlassian.atlascode 9 | beardedbear.beardedicons 10 | brandonkirbyson.vscode-animations 11 | cuixiaorui.cvim 12 | darianmorat.darian-theme 13 | dbaeumer.vscode-eslint 14 | eamodio.gitlens 15 | editorconfig.editorconfig 16 | gerrnperl.outline-map 17 | github.copilot 18 | github.copilot-chat 19 | github.copilot-workspace 20 | github.vscode-pull-request-github 21 | hbenl.vscode-test-explorer 22 | hsnazar.hyper-term-theme 23 | jackpaget.gruvbox-glass 24 | joshmu.periscope 25 | jpcrs.binocular 26 | magdalenalipka.tokyo-night-frameless 27 | meganrogge.template-string-converter 28 | mhutchie.git-graph 29 | miguelsolorio.symbols 30 | ms-vscode.test-adapter-converter 31 | nautigsam.go-to-test 32 | openai.openai-chatgpt-adhoc 33 | pkief.material-icon-theme 34 | postman.postman-for-vscode 35 | redhat.vscode-yaml 36 | subframe7536.custom-ui-style 37 | svanteboberg.svant-vscode-fzf 38 | tompollak.lazygit-vscode 39 | tomrijndorp.find-it-faster 40 | usernamehw.errorlens 41 | vintharas.learn-vim 42 | vlchristos.carnation-vscode-theme 43 | vscodevim.vim 44 | wallabyjs.quokka-vscode 45 | -------------------------------------------------------------------------------- /welcomePage.js: -------------------------------------------------------------------------------- 1 | 2 | const neovim1 = ` 3 | 4 | ██████ █████ █████ █████ ███ 5 | ░░██████ ░░███ ░░███ ░░███ ░░░ 6 | ░███░███ ░███ ██████ ██████ ░███ ░███ ████ █████████████ 7 | ░███░░███░███ ███░░███ ███░░███ ░███ ░███ ░░███ ░░███░░███░░███ 8 | ░███ ░░██████ ░███████ ░███ ░███ ░░███ ███ ░███ ░███ ░███ ░███ 9 | ░███ ░░█████ ░███░░░ ░███ ░███ ░░░█████░ ░███ ░███ ░███ ░███ 10 | █████ ░░█████░░██████ ░░██████ ░░███ █████ █████░███ █████ 11 | ░░░░░ ░░░░░ ░░░░░░ ░░░░░░ ░░░ ░░░░░ ░░░░░ ░░░ ░░░░░ 12 | 13 | ` 14 | 15 | const neovim2 = ` 16 | ███▄ █ ▓█████ ▒█████ ██▒ █▓ ██▓ ███▄ ▄███▓ 17 | ██ ▀█ █ ▓█ ▀ ▒██▒ ██▒▓██░ █▒▓██▒▓██▒▀█▀ ██▒ 18 | ▓██ ▀█ ██▒▒███ ▒██░ ██▒ ▓██ █▒░▒██▒▓██ ▓██░ 19 | ▓██▒ ▐▌██▒▒▓█ ▄ ▒██ ██░ ▒██ █░░░██░▒██ ▒██ 20 | ▒██░ ▓██░░▒████▒░ ████▓▒░ ▒▀█░ ░██░▒██▒ ░██▒ 21 | ░ ▒░ ▒ ▒ ░░ ▒░ ░░ ▒░▒░▒░ ░ ▐░ ░▓ ░ ▒░ ░ ░ 22 | ░ ░░ ░ ▒░ ░ ░ ░ ░ ▒ ▒░ ░ ░░ ▒ ░░ ░ ░ 23 | ░ ░ ░ ░ ░ ░ ░ ▒ ░░ ▒ ░░ ░ 24 | ░ ░ ░ ░ ░ ░ ░ ░ 25 | ░ 26 | `; 27 | 28 | const neovim3 = ` 29 | ███▄▄▄▄ ▄████████ ▄██████▄ ▄█ █▄ ▄█ ▄▄▄▄███▄▄▄▄ 30 | ███▀▀▀██▄ ███ ███ ███ ███ ███ ███ ███ ▄██▀▀▀███▀▀▀██▄ 31 | ███ ███ ███ █▀ ███ ███ ███ ███ ███▌ ███ ███ ███ 32 | ███ ███ ▄███▄▄▄ ███ ███ ███ ███ ███▌ ███ ███ ███ 33 | ███ ███ ▀▀███▀▀▀ ███ ███ ███ ███ ███▌ ███ ███ ███ 34 | ███ ███ ███ █▄ ███ ███ ███ ███ ███ ███ ███ ███ 35 | ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ 36 | ▀█ █▀ ██████████ ▀██████▀ ▀██████▀ █▀ ▀█ ███ █▀ 37 | `; 38 | 39 | const neovim4 = ` 40 | 41 |  42 | ████ ██████ █████ ██ 43 | ███████████ █████  44 | █████████ ███████████████████ ███ ███████████ 45 | █████████ ███ █████████████ █████ ██████████████ 46 | █████████ ██████████ █████████ █████ █████ ████ █████ 47 | ███████████ ███ ███ █████████ █████ █████ ████ █████ 48 | ██████ █████████████████████ ████ █████ █████ ████ ██████ 49 | 50 | 51 | `; 52 | 53 | const neovim5 = ` 54 | 55 | : 56 | L. ,; t#, 57 | EW: ,ft f#i ;##W. t 58 | E##; t#E .E#t :#L:WE Ej .. : 59 | E###t t#E i#W, .KG ,#D t .DD.E#, ,W, .Et 60 | E#fE#f t#E L#D. EE ;#f EK: ,WK. E#t t##, ,W#t 61 | E#t D#G t#E :K#Wfff; f#. t#iE#t i#D E#t L###, j###t 62 | E#t f#E. t#E i##WLLLLt :#G GK E#t j#f E#t .E#j##, G#fE#t 63 | E#t t#K: t#E .E#L ;#L LW. E#tL#i E#t ;WW; ##,:K#i E#t 64 | E#t ;#W,t#E f#E: t#f f#: E#WW, E#t j#E. ##f#W, E#t 65 | E#t :K#D#E ,WW; f#D#; E#K: E#t .D#L ###K: E#t 66 | E#t .E##E .D#; G#t ED. E#t :K#t ##D. E#t 67 | .. G#E tt t t E#t ... #G .. 68 | fE ,;. j 69 | , 70 | `; 71 | 72 | 73 | 74 | const vim = ` 75 | . 76 | ##############..... ############## 77 | ##############......############## 78 | ##########..........########## 79 | ##########........########## 80 | ##########.......########## 81 | ##########.....##########.. 82 | ##########....##########..... 83 | ..##########..##########......... 84 | ....##########.#########............. 85 | ..################JJJ............ 86 | ################............. 87 | ##############.JJJ.JJJJJJJJJJ 88 | ############...JJ...JJ..JJ JJ 89 | ##########....JJ...JJ..JJ JJ 90 | ########......JJJ..JJJ JJJ JJJ 91 | ###### ......... 92 | ..... 93 | .`; 94 | 95 | const logoList = [ vim, neovim1, neovim2, neovim3, neovim4, neovim5 ]; 96 | const randomLogo = logoList[Math.floor(Math.random() * logoList.length)]; 97 | const highlightedLogo = randomLogo === vim 98 | ? randomLogo.replace(/J/g,'#').replace(/[#J]/g, '$&') 99 | : randomLogo == neovim1 ? randomLogo.replace(/[█]/g, '$&') 100 | : randomLogo.replace(/./g, '$&'); 101 | 102 | document.querySelector('.editor-group-watermark').innerHTML = `
${highlightedLogo}
`; 103 | document.querySelector('.watermark-box').innerHTML = `
${highlightedLogo}
`; 104 | document.querySelector('.shortcuts').innerHTML = `
${highlightedLogo}
`; -------------------------------------------------------------------------------- /tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "2.0.0", 5 | "contributes": { 6 | "problemMatcher": [ 7 | { 8 | "owner": "vitest", 9 | "name": "vitest", 10 | "fileLocation": [ 11 | "relative", 12 | "${workspaceFolder}" 13 | ], 14 | "pattern": [ 15 | { 16 | "message": 1, 17 | "regexp": "^AssertionError:(.*)$" 18 | }, 19 | { 20 | "column": 3, 21 | "file": 1, 22 | "line": 2, 23 | "regexp": "^ ❯ (.*):(.*):(.*)$" 24 | } 25 | ], 26 | "background": { 27 | "activeOnStart": false, 28 | "beginsPattern": "RERUN", 29 | "endsPattern": "Duration (.*)$" 30 | } 31 | } 32 | ] 33 | }, 34 | "tasks": [ 35 | { 36 | "label": "Maximize Panel", 37 | "command": "${command:workbench.action.toggleMaximizedPanel}", 38 | "type": "shell", 39 | "problemMatcher": [] 40 | }, 41 | { 42 | "label": "side Tests", 43 | "type": "shell", 44 | "command": [ 45 | "${command:workbench.action.createTerminalEditorSide}", 46 | "runInTerminal.run" 47 | ], 48 | "args": [ 49 | "npm run test" 50 | ], 51 | "problemMatcher": [ 52 | { 53 | "owner": "vitest", 54 | "fileLocation": [ 55 | "relative", 56 | "${workspaceFolder}" 57 | ], 58 | "pattern": [ 59 | { 60 | "message": 1, 61 | "regexp": "^AssertionError:(.*)$" 62 | }, 63 | { 64 | "column": 3, 65 | "file": 1, 66 | "line": 2, 67 | "regexp": "^ ❯ (.*):(.*):(.*)$" 68 | } 69 | ], 70 | "background": { 71 | "activeOnStart": false, 72 | "beginsPattern": "RERUN", 73 | "endsPattern": "Duration (.*)$" 74 | } 75 | } 76 | ] 77 | }, 78 | { 79 | "label": "LazyGit", 80 | "dependsOn": [ 81 | "Maximize Panel" 82 | ], 83 | "type": "process", 84 | "command": "lazygit", 85 | "problemMatcher": [], 86 | "presentation": { 87 | "echo": true, 88 | "reveal": "always", 89 | "focus": true, 90 | "panel": "shared", 91 | "showReuseMessage": false, 92 | "clear": false, 93 | "close": true 94 | } 95 | }, 96 | { 97 | "label": "Telescope", 98 | "dependsOn": [ 99 | "Maximize Panel" 100 | ], 101 | "type": "process", 102 | "command": "telescope", 103 | "problemMatcher": [], 104 | "presentation": { 105 | "echo": false, 106 | "reveal": "always", 107 | "focus": true, 108 | "panel": "shared", 109 | "showReuseMessage": false, 110 | "clear": false, 111 | "close": true 112 | } 113 | }, 114 | { 115 | "label": "Gitlab", 116 | "dependsOn": [ 117 | "Maximize Panel" 118 | ], 119 | "type": "shell", 120 | "command": "glab pipeline ci view", 121 | "problemMatcher": [], 122 | "presentation": { 123 | "echo": true, 124 | "reveal": "always", 125 | "focus": true, 126 | "panel": "shared", 127 | "showReuseMessage": false, 128 | "clear": false, 129 | "close": true 130 | } 131 | }, 132 | { 133 | "label": "vitest client dev", 134 | "type": "shell", 135 | "command": "vitest --coverage --config test/vitest.config.ts", 136 | "problemMatcher": [ 137 | { 138 | "owner": "typescript", 139 | "source": "Typescript", 140 | "fileLocation": "absolute", 141 | "applyTo": "allDocuments", 142 | "background": { 143 | "activeOnStart": true 144 | // "beginsPattern": "sd", 145 | // "endsPattern": " > " 146 | }, 147 | "pattern": [ 148 | { 149 | "regexp": "(ERROR|WARNING)\\(TypeScript\\) (.*)", 150 | "severity": 1, 151 | "message": 2 152 | }, 153 | { 154 | "regexp": "^ FILE (.*):(\\d*):(\\d*)$", 155 | "file": 1, 156 | "line": 2, 157 | "column": 3 158 | } 159 | ] 160 | } 161 | ] 162 | }, 163 | { 164 | "label": "VITEST_DEFAULT_REPORTER", 165 | "type": "shell", 166 | "isBackground": true, 167 | "command": "npm run test", 168 | "group": "test", 169 | "runOptions": { 170 | "runOn": "default" 171 | }, 172 | "presentation": { 173 | "echo": true, 174 | "reveal": "never", 175 | "revealProblems": "never", 176 | "focus": true, 177 | "panel": "shared", 178 | "showReuseMessage": true, 179 | "clear": true 180 | }, 181 | "problemMatcher": [ 182 | { 183 | "owner": "vitest", 184 | "fileLocation": [ 185 | "relative", 186 | "${workspaceFolder}" 187 | ], 188 | "pattern": [ 189 | { 190 | "message": 1, 191 | "regexp": "^.*Error:(.*)$" 192 | }, 193 | { 194 | "column": 4, 195 | "file": 2, 196 | "line": 3, 197 | "regexp": "^(.*) (.*):(.*):(.*)$" 198 | } 199 | ], 200 | "background": { 201 | "activeOnStart": false, 202 | "beginsPattern": "Failed Tests|RERUN", 203 | "endsPattern": "Duration\\s+(.*)" 204 | } 205 | } 206 | ] 207 | }, 208 | { 209 | "label": "TDD", 210 | "type": "shell", 211 | "isBackground": true, 212 | "command": "npm run test", 213 | "group": "test", 214 | "runOptions": { 215 | "runOn": "default" 216 | }, 217 | "presentation": { 218 | "echo": true, 219 | "reveal": "silent", 220 | "revealProblems": "onProblem", 221 | "focus": true, 222 | "panel": "shared", 223 | "showReuseMessage": true, 224 | "clear": true 225 | }, 226 | "problemMatcher": [ 227 | { 228 | "owner": "vitest", 229 | "fileLocation": [ 230 | "autoDetect", 231 | "${workspaceFolder}" 232 | ], 233 | "pattern": [ 234 | { 235 | "message": 1, 236 | "column": 4, 237 | "file": 2, 238 | "line": 3, 239 | "regexp": "::error title=(.*),file=(/.*),line=(.*),col=(.*)::" 240 | } 241 | ], 242 | "background": { 243 | "activeOnStart": false, 244 | "beginsPattern": "::group::Vitest", 245 | "endsPattern": "::endgroup::" 246 | } 247 | } 248 | ] 249 | }, 250 | { 251 | "label": "Test Unit (Watch Mode)", 252 | "type": "shell", 253 | "isBackground": true, 254 | "command": "npm run test", 255 | "group": "test", 256 | "runOptions": { 257 | "runOn": "default" 258 | }, 259 | "presentation": { 260 | "echo": true, 261 | "reveal": "never", 262 | "revealProblems": "never", 263 | "focus": true, 264 | "panel": "shared", 265 | "showReuseMessage": true, 266 | "clear": true 267 | }, 268 | "problemMatcher": [ 269 | { 270 | "owner": "vitest", 271 | "fileLocation": [ 272 | "relative", 273 | "${workspaceFolder}" 274 | ], 275 | "pattern": [ 276 | { 277 | "message": 1, 278 | "regexp": "^\\s+(FAIL.*)$" 279 | }, 280 | { 281 | "message": 1, 282 | "regexp": "^.*Error:(.*)$" 283 | }, 284 | { 285 | "column": 3, 286 | "file": 1, 287 | "line": 2, 288 | "regexp": "^\\s+❯\\s(.*):(.*):(.*)$" 289 | }, 290 | { 291 | "regexp": "^\\s*(\\d*\\|.*)", 292 | "message": 1 293 | }, 294 | { 295 | "regexp": "^\\s*(\\d*\\|.*)", 296 | "message": 1 297 | }, 298 | { 299 | "regexp": "^\\s*(\\d*\\|.*)", 300 | "message": 1 301 | }, 302 | { 303 | "regexp": "^\\s*(\\d*\\|.*)", 304 | "message": 1 305 | }, 306 | { 307 | "regexp": "^\\s*(\\d*\\|.*)", 308 | "message": 1 309 | }, 310 | { 311 | "regexp": "^\\s*(\\d*\\|.*)", 312 | "message": 1 313 | }, 314 | { 315 | "regexp": "(.*)", 316 | "message": 1 317 | }, 318 | { 319 | "regexp": "(.*)", 320 | "message": 1 321 | }, 322 | { 323 | "regexp": "(.*)", 324 | "message": 1 325 | } 326 | ], 327 | "background": { 328 | "activeOnStart": true, 329 | "beginsPattern": "Failed Tests|RERUN", 330 | "endsPattern": "Duration\\s+(.*)" 331 | } 332 | } 333 | ] 334 | }, 335 | { 336 | "label": "tsc-watch", 337 | "command": "tsc", 338 | "args": [ 339 | "-watch" 340 | ], 341 | "isBackground": true, 342 | "problemMatcher": "$tsc-watch" 343 | } 344 | ] 345 | } -------------------------------------------------------------------------------- /keybindings.json: -------------------------------------------------------------------------------- 1 | // Place your key bindings in this file to override the defaultsauto[] 2 | [ 3 | { 4 | "key": "shift+cmd+t", 5 | "command": "-workbench.action.reopenClosedEditor" 6 | }, 7 | { 8 | "key": "shift+cmd+t", 9 | "command": "workbench.action.terminal.new", 10 | "when": "terminalProcessSupported" 11 | }, 12 | { 13 | "key": "ctrl+shift+`", 14 | "command": "-workbench.action.terminal.new", 15 | "when": "terminalProcessSupported" 16 | }, 17 | { 18 | "key": "cmd+[KeyM]", 19 | "command": "workbench.action.createTerminalEditor" 20 | }, 21 | { 22 | "key": "cmd+h", 23 | "command": "workbench.action.toggleActivityBarVisibility" 24 | }, 25 | { 26 | "key": "ctrl+`", 27 | "command": "-workbench.action.terminal.toggleTerminal", 28 | "when": "terminal.active" 29 | }, 30 | { 31 | "key": "alt+f", 32 | "command": "eslint.executeAutofix" 33 | }, 34 | { 35 | "key": "ctrl+shift+g", 36 | "command": "editor.action.rename", 37 | "when": "editorHasRenameProvider && editorTextFocus && !editorReadonly" 38 | }, 39 | { 40 | "key": "f2", 41 | "command": "-editor.action.rename", 42 | "when": "editorHasRenameProvider && editorTextFocus && !editorReadonly" 43 | }, 44 | { 45 | "key": "shift+cmd+g", 46 | "command": "-workbench.view.scm", 47 | "when": "!gitlens:disabled && config.gitlens.keymap == 'chorded'" 48 | }, 49 | { 50 | "key": "shift+cmd+g", 51 | "command": "workbench.action.tasks.runTask", 52 | "args": "LazyGit" 53 | }, 54 | { 55 | "key": "ctrl+shift+g", 56 | "command": "-workbench.view.scm", 57 | "when": "!gitlens:disabled && config.gitlens.keymap == 'chorded'" 58 | }, 59 | { 60 | "key": "shift+cmd+t", 61 | "command": "-extension.goToTest", 62 | "when": "editorTextFocus" 63 | }, 64 | { 65 | "key": "shift+cmd+t", 66 | "command": "extension.splitTestFile", 67 | "when": "editorTextFocus" 68 | }, 69 | { 70 | "key": "cmd+f1", 71 | "command": "-extension.splitTestFile", 72 | "when": "editorTextFocus" 73 | }, 74 | { 75 | "key": "cmd+[Comma] f", 76 | "command": "-testing.runCurrentFile", 77 | "when": "editorTextFocus" 78 | }, 79 | { 80 | "key": "ctrl+t", 81 | "command": "runCurrentTest.run" 82 | }, 83 | { 84 | "key": "ctrl+f", 85 | "command": "runCurrentTest.runAndUpdateSnapshots" 86 | }, 87 | { 88 | "key": "ctrl+g", 89 | "command": "workbench.action.tasks.runTask", 90 | "args": "LazyGit", 91 | "when": "terminalProcessSupported" 92 | }, 93 | { 94 | "key": "cmd+8", 95 | "command": "editor.action.marker.next", 96 | "when": "editorFocus" 97 | }, 98 | { 99 | "key": "alt+f8", 100 | "command": "-editor.action.marker.next", 101 | "when": "editorFocus" 102 | }, 103 | { 104 | "key": "cmd+9", 105 | "command": "editor.action.marker.nextInFiles", 106 | "when": "editorFocus" 107 | }, 108 | { 109 | "key": "f8", 110 | "command": "-editor.action.marker.nextInFiles", 111 | "when": "editorFocus" 112 | }, 113 | { 114 | "key": "ctrl+alt+cmd+right", 115 | "command": "workbench.action.decreaseViewSize" 116 | }, 117 | { 118 | "key": "ctrl+alt+cmd+left", 119 | "command": "workbench.action.increaseViewSize" 120 | }, 121 | { 122 | "key": "ctrl+alt+cmd+up", 123 | "command": "workbench.action.evenEditorWidths" 124 | }, 125 | { 126 | "key": "cmd+t", 127 | "command": "-workbench.action.showAllSymbols" 128 | }, 129 | { 130 | "key": "cmd+t", 131 | "command": "workbench.action.createTerminalEditorSide", 132 | }, 133 | { 134 | "key": "ctrl+tab", 135 | "command": "extension.goToTest" 136 | }, 137 | { 138 | "key": "cmd+p", 139 | "command": "-extension.GoToAnything" 140 | }, 141 | { 142 | "key": "ctrl+cmd+p", 143 | "command": "searchEverywhere.search" 144 | }, 145 | { 146 | "key": "alt+cmd+p", 147 | "command": "-searchEverywhere.search" 148 | }, 149 | { 150 | "key": "shift+alt", 151 | "command": "fuzzySearch.activeTextEditor" 152 | }, 153 | { 154 | "key": "alt+cmd+p", 155 | "command": "projectManager.listProjects" 156 | }, 157 | { 158 | "key": "alt+cmd+p", 159 | "command": "-projectManager.listProjects" 160 | }, 161 | { 162 | "key": "cmd+u", 163 | "command": "-cursorUndo", 164 | "when": "textInputFocus" 165 | }, 166 | { 167 | "key": "cmd+u", 168 | "command": "thunder-client.import-curl" 169 | }, 170 | { 171 | "key": "shift+cmd+c", 172 | "command": "-workbench.action.terminal.openNativeConsole", 173 | "when": "!terminalFocus" 174 | }, 175 | { 176 | "key": "shift+cmd+c", 177 | "command": "vscode-chatgpt.view.focus" 178 | }, 179 | { 180 | "key": "shift+cmd+r", 181 | "command": "-rerunSearchEditorSearch", 182 | "when": "inSearchEditor" 183 | }, 184 | { 185 | "key": "shift+cmd+r", 186 | "command": "-nodeReadme.showReadme", 187 | "when": "editorTextFocus" 188 | }, 189 | { 190 | "key": "shift+cmd+r", 191 | "command": "vscode-chatgpt.optimize" 192 | }, 193 | { 194 | "key": "shift+cmd+t", 195 | "command": "vscode-chatgpt.addTests" 196 | }, 197 | { 198 | "key": "ctrl+j", 199 | "command": "workbench.action.terminal.toggleTerminal" 200 | }, 201 | { 202 | "key": "shift+alt+right", 203 | "command": "editor.action.inlineSuggest.showNext" 204 | }, 205 | { 206 | "key": "shift+alt+left", 207 | "command": "editor.action.inlineSuggest.showPrevious" 208 | }, 209 | { 210 | "key": "shift+alt+down", 211 | "command": "editor.action.inlineSuggest.trigger" 212 | }, 213 | { 214 | "key": "shift+cmd+a", 215 | "command": "copilot-labs.use-brush-picker", 216 | "when": "editorTextFocus" 217 | }, 218 | { 219 | "key": "shift+alt+cmd+e", 220 | "command": "-copilot-labs.use-brush-picker", 221 | "when": "editorTextFocus" 222 | }, 223 | { 224 | "key": "shift+cmd+t", 225 | "command": "chatgpt-vscode.addTests", 226 | "when": "editorHasSelection" 227 | }, 228 | { 229 | "key": "cmd+k shift+cmd+1", 230 | "command": "-chatgpt-vscode.addTests", 231 | "when": "editorHasSelection" 232 | }, 233 | { 234 | "key": "shift+cmd+c", 235 | "command": "chatgpt-vscode.adhoc", 236 | "when": "editorHasSelection" 237 | }, 238 | { 239 | "key": "cmd+k shift+cmd+7", 240 | "command": "-chatgpt-vscode.adhoc", 241 | "when": "editorHasSelection" 242 | }, 243 | { 244 | "key": "shift+cmd+c", 245 | "command": "chatgpt-vscode.freeText" 246 | }, 247 | { 248 | "key": "shift+cmd+m", 249 | "command": "workbench.action.toggleMaximizedPanel" 250 | }, 251 | { 252 | "key": "shift+cmd+g", 253 | "command": "-editor.action.previousMatchFindAction", 254 | "when": "editorFocus" 255 | }, 256 | { 257 | "key": "shift+cmd+g", 258 | "command": "-workbench.action.terminal.findPrevious", 259 | "when": "terminalFindFocused && terminalHasBeenCreated || terminalFindFocused && terminalProcessSupported || terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported" 260 | }, 261 | { 262 | "key": "shift+cmd+f", 263 | "command": "find-it-faster.findWithinFiles" 264 | }, 265 | { 266 | "key": "shift+cmd+u", 267 | "command": "-find-it-faster.findWithinFiles" 268 | }, 269 | { 270 | "key": "shift+cmd+u", 271 | "command": "workbench.view.search", 272 | "when": "workbench.view.search.active && neverMatch =~ /doesNotMatch/" 273 | }, 274 | { 275 | "key": "shift+cmd+f", 276 | "command": "-workbench.view.search", 277 | "when": "workbench.view.search.active && neverMatch =~ /doesNotMatch/" 278 | }, 279 | { 280 | "key": "shift+cmd+r", 281 | "command": "chatgpt-vscode.optimize", 282 | "when": "editorHasSelection" 283 | }, 284 | { 285 | "key": "cmd+k shift+cmd+3", 286 | "command": "-chatgpt-vscode.optimize", 287 | "when": "editorHasSelection" 288 | }, 289 | { 290 | "key": "shift+cmd+k", 291 | "command": "workbench.action.terminal.killAll" 292 | }, 293 | { 294 | "key": "shift+cmd+g", 295 | "command": "workbench.scm.focus" 296 | }, 297 | { 298 | "key": "ctrl+g", 299 | "command": "lazygit-vscode.toggle" 300 | }, 301 | { 302 | "key": "shift+cmd+l", 303 | "command": "-lazygit-vscode.toggle" 304 | }, 305 | { 306 | "key": "ctrl+p", 307 | "command": "binocular.customCommands", 308 | "args": "pipeline" 309 | }, 310 | { 311 | "key": "ctrl+shift+p", 312 | "command": "binocular.customCommands", 313 | }, 314 | { 315 | "key": "shift+tab", 316 | "command": "workbench.action.previousEditorInGroup" 317 | }, 318 | { 319 | "key": "cmd+k alt+cmd+left", 320 | "command": "-workbench.action.previousEditorInGroup" 321 | }, 322 | { 323 | "key": "alt+cmd+left", 324 | "command": "workbench.action.previousEditor" 325 | }, 326 | { 327 | "key": "ctrl+alt+cmd+5", 328 | "command": "-workbench.action.previousEditor" 329 | }, 330 | { 331 | "key": "alt+cmd+left", 332 | "command": "-workbench.action.previousEditor" 333 | }, 334 | { 335 | "key": "shift+cmd+b", 336 | "command": "-workbench.action.tasks.build", 337 | "when": "taskCommandsRegistered" 338 | }, 339 | { 340 | "key": "shift+cmd+b", 341 | "command": "workbench.action.toggleAuxiliaryBar" 342 | }, 343 | { 344 | "key": "alt+cmd+b", 345 | "command": "-workbench.action.toggleAuxiliaryBar" 346 | }, 347 | { 348 | "key": "cmd+0", 349 | "command": "workbench.action.terminal.openUrlLink", 350 | "when": "terminalHasBeenCreated" 351 | }, 352 | { 353 | "key": "ctrl+m", 354 | "command": "issuesAndMrs.focus" 355 | }, 356 | { 357 | "key": "ctrl+j", 358 | "command": "workbench.action.navigateDown" 359 | }, 360 | { 361 | "key": "ctrl+k", 362 | "command": "workbench.action.navigateUp" 363 | }, 364 | { 365 | "key": "ctrl+h", 366 | "command": "workbench.action.navigateLeft" 367 | }, 368 | { 369 | "key": "ctrl+l", 370 | "command": "workbench.action.navigateRight" 371 | }, 372 | { 373 | "key": "ctrl+n", 374 | "command": "workbench.action.navigateEditorGroups" 375 | }, 376 | { 377 | "key": "ctrl+c", 378 | "command": "-extension.vim_ctrl+c", 379 | "when": "editorTextFocus && vim.active && vim.overrideCtrlC && vim.use && !inDebugRepl" 380 | }, 381 | { 382 | "key": "ctrl+l", 383 | "command": "workbench.action.terminal.clear", 384 | "when": "terminalFocus && terminalHasBeenCreated && !accessibilityModeEnabled || terminalFocus && terminalProcessSupported && !accessibilityModeEnabled || accessibilityModeEnabled && accessibleViewIsShown && terminalHasBeenCreated && accessibleViewCurrentProviderId == 'terminal' || accessibilityModeEnabled && accessibleViewIsShown && terminalProcessSupported && accessibleViewCurrentProviderId == 'terminal'" 385 | }, 386 | { 387 | "key": "cmd+k", 388 | "command": "-workbench.action.terminal.clear", 389 | "when": "terminalFocus && terminalHasBeenCreated && !accessibilityModeEnabled || terminalFocus && terminalProcessSupported && !accessibilityModeEnabled || accessibilityModeEnabled && accessibleViewIsShown && terminalHasBeenCreated && accessibleViewCurrentProviderId == 'terminal' || accessibilityModeEnabled && accessibleViewIsShown && terminalProcessSupported && accessibleViewCurrentProviderId == 'terminal'" 390 | }, 391 | { 392 | "key": "cmd+k shift+enter", 393 | "command": "-workbench.action.pinEditor", 394 | "when": "!activeEditorIsPinned" 395 | }, 396 | { 397 | "key": "shift+cmd+m", 398 | "command": "workbench.action.toggleMaximizeEditorGroup", 399 | "when": "editorPartMaximizedEditorGroup || editorPartMultipleEditorGroups" 400 | }, 401 | { 402 | "key": "cmd+k cmd+m", 403 | "command": "-workbench.action.toggleMaximizeEditorGroup", 404 | "when": "editorPartMaximizedEditorGroup || editorPartMultipleEditorGroups" 405 | }, 406 | { 407 | "key": "cmd+w", 408 | "command": "-workbench.action.closeWindow", 409 | "when": "!editorIsOpen && !multipleEditorGroups" 410 | }, 411 | { 412 | "key": "shift+cmd+f", 413 | "command": "-workbench.action.terminal.searchWorkspace", 414 | "when": "terminalFocus && terminalProcessSupported && terminalTextSelected" 415 | }, 416 | { 417 | "key": "cmd+j", 418 | "command": "-workbench.action.togglePanel" 419 | }, 420 | { 421 | "key": "shift+alt+right", 422 | "command": "togglePeekWidgetFocus", 423 | "when": "inReferenceSearchEditor || referenceSearchVisible" 424 | }, 425 | { 426 | "key": "alt+cmd+right", 427 | "command": "-workbench.action.terminal.focusNextPane", 428 | "when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported" 429 | }, 430 | 431 | ] -------------------------------------------------------------------------------- /settings_linux.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.fontLigatures": true, 3 | "terminal.integrated.fontFamily": "Fantasque", 4 | "editor.fontFamily": "Julia Mono", 5 | "git.autofetch": true, 6 | "editor.tabSize": 2, 7 | "explorer.confirmDelete": false, 8 | "typescript.updateImportsOnFileMove.enabled": "always", 9 | "javascript.updateImportsOnFileMove.enabled": "always", 10 | "explorer.confirmDragAndDrop": false, 11 | "redhat.telemetry.enabled": true, 12 | "atlascode.bitbucket.enabled": false, 13 | "editor.inlineSuggest.enabled": true, 14 | "atlascode.jira.enabled": true, 15 | "github.copilot.enable": { 16 | "*": true, 17 | "plaintext": true, 18 | "markdown": false, 19 | "scminput": false, 20 | "yaml": true, 21 | "typescript": true 22 | }, 23 | "terminal.integrated.gpuAcceleration": "on", 24 | "zenMode.hideLineNumbers": false, 25 | "yaml.customTags": [ 26 | "!And", 27 | "!And sequence", 28 | "!If", 29 | "!If sequence", 30 | "!Not", 31 | "!Not sequence", 32 | "!Equals", 33 | "!Equals sequence", 34 | "!Or", 35 | "!Or sequence", 36 | "!FindInMap", 37 | "!FindInMap sequence", 38 | "!Base64", 39 | "!Join", 40 | "!Join sequence", 41 | "!Cidr", 42 | "!Ref", 43 | "!Sub", 44 | "!Sub sequence", 45 | "!GetAtt", 46 | "!GetAZs", 47 | "!ImportValue", 48 | "!ImportValue sequence", 49 | "!Select", 50 | "!Select sequence", 51 | "!Split", 52 | "!Split sequence" 53 | ], 54 | "json.schemas": [], 55 | "editor.codeActionsOnSave": { 56 | "source.fixAll": "explicit" 57 | }, 58 | "editor.bracketPairColorization.enabled": true, 59 | "editor.guides.bracketPairs": "active", 60 | "[typescript]": { 61 | "editor.defaultFormatter": "dbaeumer.vscode-eslint" 62 | }, 63 | "editor.accessibilitySupport": "off", 64 | "projectManager.git.baseFolders": [], 65 | "goToTest.specFilePatterns": [ 66 | "{f}.spec{e}", 67 | "{f}.test{e}", 68 | "{f}-spec{e}", 69 | "{f}-test{e}", 70 | "{f}_spec{e}", 71 | "{f}_test{e}", 72 | "{f}Tests{e}", 73 | "{f}tests{e}", 74 | "{f}Tests", 75 | "{f}Test" 76 | ], 77 | "wallpaper-setting.filePath": "file://${userHome}/Downloads/vscode.gif", 78 | "wallpaper-setting.opacity": 0.9, 79 | "vim.insertModeKeyBindings": [ 80 | { 81 | "before": [ 82 | "j", 83 | "j" 84 | ], 85 | "after": [ 86 | "" 87 | ] 88 | } 89 | ], 90 | "runCurrentTest.run": "npm run test -r ${relativeTestPath} -- -t \"${testName}\" --reporter default", 91 | "runCurrentTest.runAndUpdateSnapshots": "npm run test ${relativeTestPath} --reporter default", 92 | "editor.scrollbar.horizontal": "hidden", 93 | "editor.scrollbar.vertical": "hidden", 94 | "editor.overviewRulerBorder": false, 95 | "gitlens.integrations.enabled": true, 96 | "gitlens.remotes": [ 97 | { 98 | "domain": "gitlab.dnm.radiofrance.fr", 99 | "type": "GitLab" 100 | } 101 | ], 102 | "goToTest.testFolder": "test/unit/", 103 | "goToTest.srcFolder": "source", 104 | "goToTest.pathType": "absolute", 105 | "git.terminalGitEditor": true, 106 | "npm.keybindingsChangedWarningShown": true, 107 | "vitest.include": [ 108 | "test/unit/**" 109 | ], 110 | "runInTerminal.clearBeforeRun": true, 111 | "runInTerminal.commands": [ 112 | { 113 | "key": "ctrl+e", 114 | "command": "runInTerminal.run", 115 | "args": { 116 | "cmd": "npx vitest", 117 | "match": "\\.ts$", 118 | "name": "s" 119 | } 120 | } 121 | ], 122 | "vitest.showFailMessages": true, 123 | "vitest.enable": true, 124 | "testing.autoRun.mode": "rerun", 125 | "wallaby.codeLensFeature.runTest": true, 126 | "errorLens.statusBarIconsEnabled": true, 127 | "errorLens.statusBarMessageEnabled": true, 128 | "errorLens.statusBarMessageTemplate": "$message", 129 | "vitest.commandLine": "npm run test", 130 | "vim.commandLineModeKeyBindings": [ 131 | { 132 | "before": [ 133 | ":" 134 | ], 135 | "commands": [ 136 | "extension.GoToAnything" 137 | ], 138 | "silent": false 139 | } 140 | ], 141 | "vim.sneak": true, 142 | "vim.visualModeKeyBindings": [ 143 | { 144 | "before": [ 145 | "j", 146 | "j" 147 | ], 148 | "after": [ 149 | "" 150 | ] 151 | } 152 | ], 153 | "editor.stickyScroll.enabled": true, 154 | "errorLens.excludePatterns": [ 155 | "[\"node_modules\", \"**/node_modules\"]", 156 | "\"node_modules\"", 157 | "node_modules", 158 | " [\"**/*.{js}\"]", 159 | "**/node_modules" 160 | ], 161 | "files.exclude": { 162 | "**/node_modules": true 163 | }, 164 | "editor.codeLens": false, 165 | "editor.lineNumbers": "relative", 166 | "errorLens.enabledDiagnosticLevels": [ 167 | "error", 168 | "warning" 169 | ], 170 | "errorLens.severityText": [ 171 | "ERROR", 172 | "WARNING", 173 | "HINT", 174 | "ERROR" 175 | ], 176 | "errorLens.light": {}, 177 | "totalTypeScript.hiddenTips": [ 178 | "ts-object-type", 179 | "union-type", 180 | "basic-types", 181 | "passing-generics-to-types", 182 | "function-return-type", 183 | "typing-function-parameters" 184 | ], 185 | "update.mode": "start", 186 | "window.title": "", 187 | "terminal.integrated.enableMultiLinePasteWarning": "auto", 188 | "terminal.explorerKind": "integrated", 189 | "debug.terminal.clearBeforeReusing": true, 190 | "terminal.integrated.defaultProfile.osx": "zsh", 191 | "zenMode.fullScreen": false, 192 | "errorLens.messageTemplate": "$message - $source", 193 | "javascript.suggest.names": false, 194 | "eslint.lintTask.options": "npm run lint", 195 | "zenMode.centerLayout": false, 196 | "workbench.editor.limit.enabled": true, 197 | "workbench.editor.limit.value": 3, 198 | "workbench.editor.limit.excludeDirty": true, 199 | "workbench.editor.pinnedTabSizing": "compact", 200 | "workbench.editor.tabSizing": "shrink", 201 | "workbench.editor.highlightModifiedTabs": true, 202 | "vim.easymotion": true, 203 | "vim.leader": "space", 204 | "touchBar.foldAll": true, 205 | "touchBar.copyLinesDownAction": false, 206 | "touchBar.extensions": false, 207 | "touchBar.rename": false, 208 | "touchBar.terminal": true, 209 | "terminal.integrated.env.osx": { 210 | "FIG_NEW_SESSION": "1" 211 | }, 212 | "autoHide.hideSideBarsOnDebug": false, 213 | "autoHide.hidePanelOnDebug": false, 214 | "apc.electron": { 215 | "transparent": true, 216 | "opacity": 0.5, 217 | "backgroundColor": "#00000000", 218 | "frame": false, 219 | "vibrancy": "ultra-dark", 220 | "visualEffectState": "active" 221 | }, 222 | "apc.stylesheet": { 223 | 224 | ".monaco-hover": "border: 1px solid #007ACC !important;", 225 | ".tree": "border: 1px solid #007ACC !important;", 226 | ".quick-input-widget": { 227 | "width": "900px !important", 228 | "left": "41% !important", 229 | "top": "250px !important", 230 | "padding": "15px !important", 231 | "background-color": "rgb(30, 30, 30) !important", 232 | "border-radius": "10px !important", 233 | "border": "1px solid #007ACC !important" 234 | }, 235 | ".quick-input-widget .quick-input-header": "padding:0px!important;margin-bottom:10px;", 236 | ".quick-input-widget .monaco-inputbox": { 237 | "padding": "10px !important", 238 | "border-radius": "5px!important" 239 | }, 240 | ".quick-input-widget .monaco-list-rows": "top: 0 !important;max-height:670px;min-height:300px;", 241 | ".quick-input-widget .monaco-list-row": "position:static!important;border-bottom: 1px solid #333942;padding:5px!important;height:auto!important;", 242 | ".quick-input-widget .quick-input-list-entry": "position:relative;padding:0 5px 0px 15px;", 243 | ".quick-input-widget .quick-input-list-entry .codicon[class*=codicon-]": "font-size:12px;", 244 | ".quick-input-widget .quick-input-list .quick-input-list-entry.quick-input-list-separator-border": "border-top-width:0px!important;", 245 | ".monaco-editor .cursor": "background: linear-gradient(to bottom, #00FF00, #00FF00) !important; color: #161616 !important", 246 | ".title-actions": "display: none !important", 247 | ".quick-input-widget.show-file-icons, .editor-widget.find-widget": "box-shadow: none !important", 248 | ".filematch .monaco-icon-label:before, .custom-list-row.results .monaco-list-row .monaco-icon-label:before": "background-position: 0 bottom !important", 249 | ".filematch .monaco-count-badge": "padding: 5px 6px 0 6px !important", 250 | ".sidebar .title-label": "padding: 0 !important", 251 | ".monaco-workbench .monaco-list:not(.element-focused):focus:before": "outline: none !important", 252 | ".sidebar": "border: none !important", 253 | ".quick-input-list-row div": "display: flex !important; align-items: center !important", 254 | ".panel .composite.title": "visibility: hidden !important", 255 | ".title.show-file-icons .label-container .monaco-icon-label.file-icon": "padding-bottom: 6px !important", 256 | ".sidebar .title-label h2": "line-height: 2.8 !important", 257 | ".monaco-editor .scroll-decoration": "display: none !important", 258 | ".monaco-scrollable-element > .shadow.top": "display: none !important", 259 | ".editor-group-watermark": { 260 | "font-size": "15px !important" 261 | } 262 | }, 263 | "apc.font.family": "Julia Mono", 264 | "apc.listRow": { 265 | "lists": [ 266 | "quick-input-list", 267 | "results" 268 | ], 269 | "height": 30 270 | }, 271 | "apc.imports": [ 272 | "file://$HOME/.vscode-oss/extensions/brandonkirbyson.vscode-animations-2.0.3/dist/updateHandler.js", 273 | "file://$XDG_CONFIG_HOME/.config/codium/User/welcomePage.js" 274 | ], 275 | "window.titleBarStyle": "native", 276 | "security.workspace.trust.untrustedFiles": "open", 277 | "binocular.command.commands": [ 278 | { 279 | "shellCommand": "glab pipeline ci view", 280 | "commandIdentifier": "pipeline" 281 | }, 282 | { 283 | "shellCommand": "git-jira", 284 | "commandIdentifier": "git-jira" 285 | }, 286 | { 287 | "shellCommand": "telescope", 288 | "commandIdentifier": "Telescope" 289 | }, 290 | { 291 | "shellCommand": "lazygit", 292 | "commandIdentifier": "Lazygit" 293 | }, 294 | { 295 | "shellCommand": "git checkout $(git fuzzy log)", 296 | "commandIdentifier": "Git fuzzy log" 297 | }, 298 | { 299 | "shellCommand": "git checkout $(git fuzzy log ${file})", 300 | "commandIdentifier": "Git fuzzy log current file" 301 | } 302 | ], 303 | "quickgrep.preview": true, 304 | "workbench.editor.enablePreviewFromCodeNavigation": true, 305 | "workbench.editor.enablePreviewFromQuickOpen": true, 306 | "find-it-faster.general.openFileInPreviewEditor": true, 307 | "terminal.integrated.tabs.enabled": false, 308 | "gitlab.aiAssistedCodeSuggestions.preferredAccount": "", 309 | "autoHide.hideOnDebug": false, 310 | "gitlab.customQueries": [ 311 | { 312 | "name": "All project merge requests", 313 | "type": "merge_requests", 314 | "scope": "all", 315 | "state": "opened", 316 | "noItemText": "The project has no merge requests" 317 | } 318 | ], 319 | "workbench.editor.tabActionCloseVisibility": false, 320 | "workbench.editor.empty.hint": "hidden", 321 | "vscode_vibrancy.opacity": 0.4, 322 | "vscode_vibrancy.refreshInterval": 1000, 323 | "vscode_vibrancy.theme": "GitHub Dark Default", 324 | "animations.Install-Method": "Apc Customize UI++", 325 | "vitest.rootConfig": "./test/vitest.config.ts, vite.config.ts", 326 | "gitlab.aiAssistedCodeSuggestions.enabled": true, 327 | "gitlab.duoChat.enabled": false, 328 | "editor.codeLensFontFamily": "Julia Mono", 329 | "editor.experimentalInlineEdit.fontFamily": "Julia Mono", 330 | "editor.inlayHints.fontFamily": "Julia Mono", 331 | "editor.inlineSuggest.fontFamily": "Julia Mono", 332 | "debug.console.fontFamily": "Julia Mono", 333 | "scm.inputFontFamily": "Julia Mono", 334 | "notebook.output.fontFamily": "Julia Mono", 335 | "chat.editor.fontFamily": "Julia Mono", 336 | "errorLens.fontFamily": "Julia Mono", 337 | "gitlens.blame.fontFamily": "Julia Mono", 338 | "window.commandCenter": false, 339 | "workbench.panel.opensMaximized": "always", 340 | "apc.menubar.compact": true, 341 | "apc.activityBar": {}, 342 | "gitlens.statusBar.alignment": "left", 343 | "gitlens.graph.layout": "editor", 344 | "gitlens.cloudPatches.experimental.layout": "editor", 345 | "gitlens.autolinks": [ 346 | { 347 | "prefix": "API-2385", 348 | "url": "https://dnm-radiofrance.atlassian.net/browse/API-2385" 349 | } 350 | ], 351 | "vitest.nodeEnv": {}, 352 | "errorLens.codeLensEnabled": true, 353 | "window.customTitleBarVisibility": "never", 354 | "github.copilot.editor.enableAutoCompletions": true, 355 | "workbench.colorTheme": "Hyper Term Black", 356 | "animations.Command-Palette": "Slide", 357 | "animations.Tabs": "None", 358 | "animations.Scrolling": "None", 359 | "animations.Enabled": true, 360 | "wallpaper-setting.wallpaper.filePath": "file://${userHome}/Downloads/437004 3840x2160.jpg", 361 | "workbench.iconTheme": "bearded-icons", 362 | "explorer.openEditors.visible": 1, 363 | "testing.openTesting": "neverOpen", 364 | "gitlens.ai.experimental.model": "openai:gpt-4o", 365 | "gitlens.graph.dateStyle": "absolute", 366 | "github.copilot-labs.showTestGenerationLenses": true, 367 | "testExplorerDiagnostics.show.passed": true, 368 | "find-it-faster.general.useTerminalInEditor": true, 369 | "find-it-faster.advanced.disableStartupChecks": true, 370 | "find-it-faster.findWithinFiles.previewWindowConfig": "right:55%:wrap", 371 | "find-it-faster.findWithinFiles.previewCommand": "bat --style=numbers --color=always --line-range=:100 {1} --highlight-line {2}", 372 | "find-it-faster.general.searchCurrentWorkingDirectory": "never", 373 | "find-it-faster.general.clearTerminalAfterUse": false, 374 | "find-it-faster.findWithinFiles.fuzzRipgrepQuery": true, 375 | "find-it-faster.general.killTerminalAfterUse": true, 376 | "typescript.tsserver.experimental.enableProjectDiagnostics": true, 377 | "window.density.editorTabHeight": "compact", 378 | "eslint.lintTask.enable": true, 379 | "eslint.enable": true, 380 | "testExplorer.useNativeTesting": true, 381 | "testing.automaticallyOpenPeekView": "failureAnywhere", 382 | "testing.showAllMessages": true, 383 | "testExplorer.addToEditorContextMenu": true, 384 | "gitlens.launchpad.indicator.openInEditor": true, 385 | "gitlens.experimental.cloudIntegrations.github.enabled": true, 386 | "terminal.integrated.suggest.builtinCompletions": { 387 | "pwshCode": true, 388 | "pwshGit": true 389 | }, 390 | "terminal.integrated.suggest.enabled": true, 391 | "vscode-graphql-execution.showExecCodelens": true, 392 | "workbench.externalBrowser": "Arc", 393 | "workbench.activityBar.location": "hidden", 394 | "yaml.schemas": { 395 | "file:///home/raijin/.vscode-oss/extensions/atlassian.atlascode-3.0.10/resources/schemas/pipelines-schema.json": "bitbucket-pipelines.yml" 396 | }, 397 | "supermaven.otherWarning": false, 398 | "git.openRepositoryInParentFolders": "never", 399 | "glassit-linux.opacity": 30, 400 | "markdown.preview.lineHeight": 1, 401 | "workbench.startupEditor": "none", 402 | "editor.wordWrapColumn": 120, 403 | "apc.monospace.font.family": "Julia Mono", 404 | "cmake.showOptionsMovedNotification": false 405 | } -------------------------------------------------------------------------------- /settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.fontLigatures": true, 3 | "terminal.integrated.fontFamily": "JetbrainsMono Nerd Font Mono", 4 | "editor.fontFamily": "JetbrainsMono Nerd Font Mono", 5 | "git.autofetch": true, 6 | "editor.tabSize": 2, 7 | "explorer.confirmDelete": false, 8 | "typescript.updateImportsOnFileMove.enabled": "always", 9 | "atlascode.jira.jqlList": [], 10 | "explorer.confirmDragAndDrop": false, 11 | "atlascode.bitbucket.enabled": false, 12 | "editor.inlineSuggest.enabled": true, 13 | "atlascode.jira.enabled": true, 14 | "github.copilot.enable": { 15 | "*": true, 16 | "plaintext": true, 17 | "markdown": true, 18 | "scminput": false, 19 | "yaml": true, 20 | "typescript": true 21 | }, 22 | "terminal.integrated.gpuAcceleration": "on", 23 | "zenMode.hideLineNumbers": false, 24 | "yaml.customTags": [ 25 | "!And", 26 | "!And sequence", 27 | "!If", 28 | "!If sequence", 29 | "!Not", 30 | "!Not sequence", 31 | "!Equals", 32 | "!Equals sequence", 33 | "!Or", 34 | "!Or sequence", 35 | "!FindInMap", 36 | "!FindInMap sequence", 37 | "!Base64", 38 | "!Join", 39 | "!Join sequence", 40 | "!Cidr", 41 | "!Ref", 42 | "!Sub", 43 | "!Sub sequence", 44 | "!GetAtt", 45 | "!GetAZs", 46 | "!ImportValue", 47 | "!ImportValue sequence", 48 | "!Select", 49 | "!Select sequence", 50 | "!Split", 51 | "!Split sequence" 52 | ], 53 | "json.schemas": [], 54 | "editor.codeActionsOnSave": { 55 | "source.addMissingImports.ts": "always", 56 | "source.fixAll": "explicit", 57 | }, 58 | "editor.bracketPairColorization.enabled": true, 59 | "editor.guides.bracketPairs": "active", 60 | "[typescript]": { 61 | "editor.defaultFormatter": "vscode.typescript-language-features" 62 | }, 63 | "editor.accessibilitySupport": "off", 64 | "goToTest.specFilePatterns": [ 65 | "{f}.spec{e}", 66 | "{f}.test{e}", 67 | "{f}-spec{e}", 68 | "{f}-test{e}", 69 | "{f}_spec{e}", 70 | "{f}_test{e}", 71 | "{f}Tests{e}", 72 | "{f}tests{e}", 73 | "{f}Tests", 74 | "{f}Test" 75 | ], 76 | "vim.normalModeKeyBindings": [ 77 | { 78 | "before": [":"], 79 | "commands": [ 80 | "vim.showQuickpickCmdLine", 81 | ], 82 | "silent": true 83 | }, 84 | { 85 | "before": ["", "t", "a"], 86 | "commands": ["testing.runAll"] 87 | }, 88 | { 89 | "before": ["", "t", "f"], 90 | "commands": ["testing.runCurrentFile"] 91 | }, 92 | { 93 | "before": ["", "t", "c"], 94 | "after": ["testing.runAtCursor"] 95 | }, 96 | { 97 | "before": ["", "t", "t"], 98 | "after": ["testing.runAtCursor"] 99 | }, 100 | { 101 | "before": ["", "t", "w"], 102 | "commands": ["testing.startContinuousRun"] 103 | }, 104 | { 105 | "before": ["", "t", "p"], 106 | "after": ["testing.peekRelatedCode"] 107 | }, 108 | { 109 | "before": ["", "p", "i"], 110 | "commands": ["editor.action.peekImplementation"] 111 | }, 112 | { 113 | "before": ["", "p", "o"], 114 | "commands": ["testing.openOutputPeek"] 115 | }, 116 | { 117 | "before": ["", "p", "d"], 118 | "commands": ["editor.action.peekTypeDefinition"] 119 | }, 120 | { 121 | "before": ["", "p", "r"], 122 | "commands": ["editor.action.referenceSearch.trigger"] 123 | }, 124 | { 125 | "before": ["", "f"], 126 | "after": ["v","i", "w"], 127 | "commands":["find-it-faster.findWithinFiles"] 128 | }, 129 | { 130 | "before": ["", "g", "c"], 131 | "commands": ["gitlens.gitCommands.switch"] 132 | }, 133 | { 134 | "before": ["", "g", "g"], 135 | "commands": ["git-graph.view"] 136 | }, 137 | { 138 | "before": ["", "s"], 139 | "commands": [":split"] 140 | }, 141 | { 142 | "before":["", "v"], 143 | "commands": [":vsplit"] 144 | }, 145 | { 146 | "before": ["", "p", "p"], 147 | "commands": ["togglePeekWidgetFocus"], 148 | "when": "inReferenceSearchEditor || referenceSearchVisible" 149 | }, 150 | ], 151 | "vim.insertModeKeyBindings": [ 152 | { 153 | "before": [ 154 | "j", 155 | "k" 156 | ], 157 | "after": [ 158 | "" 159 | ] 160 | } 161 | ], 162 | "runCurrentTest.run": "npm run test -r ${relativeTestPath} -- -t \"${testName}\" --reporter default", 163 | "runCurrentTest.runAndUpdateSnapshots": "npm run test ${relativeTestPath} --reporter default", 164 | "workbench.startupEditor": "terminal", 165 | "editor.scrollbar.horizontal": "hidden", 166 | "editor.scrollbar.vertical": "hidden", 167 | "editor.overviewRulerBorder": false, 168 | "gitlens.integrations.enabled": true, 169 | "goToTest.testFolder": "test/unit/", 170 | "goToTest.srcFolder": "source", 171 | "goToTest.pathType": "absolute", 172 | "git.terminalGitEditor": true, 173 | "npm.keybindingsChangedWarningShown": true, 174 | "vitest.include": [ 175 | "test/unit/**" 176 | ], 177 | "runInTerminal.clearBeforeRun": true, 178 | "runInTerminal.commands": [ 179 | { 180 | "key": "ctrl+e", 181 | "command": "runInTerminal.run", 182 | "args": { 183 | "cmd": "npx vitest", 184 | "match": "\\.ts$", 185 | "name": "s" 186 | } 187 | } 188 | ], 189 | 190 | "testing.autoRun.mode": "rerun", 191 | "wallaby.codeLensFeature.runTest": true, 192 | "errorLens.statusBarIconsEnabled": true, 193 | "errorLens.statusBarMessageEnabled": true, 194 | "errorLens.statusBarMessageTemplate": "$message", 195 | "vim.commandLineModeKeyBindings": [ 196 | { 197 | "before": [ 198 | ":" 199 | ], 200 | "commands": [ 201 | "extension.GoToAnything" 202 | ], 203 | "silent": false 204 | } 205 | ], 206 | "vim.sneak": true, 207 | "vim.visualModeKeyBindings": [ 208 | { 209 | "before": [ 210 | "j", 211 | "k" 212 | ], 213 | "after": [ 214 | "" 215 | ] 216 | }, 217 | ], 218 | "editor.stickyScroll.enabled": true, 219 | "errorLens.excludePatterns": [ 220 | "[\"node_modules\", \"**/node_modules\"]", 221 | "\"node_modules\"", 222 | "node_modules", 223 | " [\"**/*.{js}\"]", 224 | "**/node_modules" 225 | ], 226 | "files.exclude": { 227 | "**/node_modules": true 228 | }, 229 | "editor.codeLens": false, 230 | "editor.lineNumbers": "relative", 231 | "errorLens.enabledDiagnosticLevels": [ 232 | "warning", 233 | "error" 234 | ], 235 | "errorLens.severityText": [ 236 | "ERROR", 237 | "WARNING", 238 | "HINT", 239 | "ERROR" 240 | ], 241 | "errorLens.light": {}, 242 | "window.title": "", 243 | "terminal.explorerKind": "integrated", 244 | "debug.terminal.clearBeforeReusing": true, 245 | "terminal.external.osxExec": "iTerm2.app", 246 | "terminal.integrated.defaultProfile.osx": "zsh", 247 | "zenMode.fullScreen": false, 248 | "errorLens.messageTemplate": "$message - $source", 249 | "javascript.suggest.names": false, 250 | "eslint.lintTask.options": "npm run lint", 251 | "zenMode.centerLayout": false, 252 | "workbench.editor.limit.enabled": true, 253 | "workbench.editor.limit.value": 3, 254 | "workbench.editor.pinnedTabSizing": "compact", 255 | "workbench.editor.tabSizing": "shrink", 256 | "workbench.editor.highlightModifiedTabs": true, 257 | "vim.easymotion": true, 258 | "vim.leader": "space", 259 | "custom-ui-style.font.family": "Jetbrains Mono", 260 | "custom-ui-style.electron": { 261 | "transparent": true, 262 | "opacity": 0.9, 263 | "frame": false, 264 | "vibrancy": "ultra-dark", 265 | "visualEffectState": "active" 266 | }, 267 | // vibrancy requires other panels to be transparent 268 | // see https://code.visualstudio.com/api/references/theme-color 269 | 270 | "custom-ui-style.webview.stylesheet": { 271 | ".inline-tabs-placeholder": "display: none !important;", 272 | ".monaco-hover": "border: 1px solid #007ACC !important;", 273 | ".tree": "border: 1px solid #007ACC !important;", 274 | ".quick-input-widget": { 275 | "width": "900px !important", 276 | "left": "41% !important", 277 | "top": "250px !important", 278 | "padding": "15px !important", 279 | "background-color": "rgb(30, 30, 30) !important", 280 | "border-radius": "10px !important", 281 | "border": "1px solid #007ACC !important" 282 | }, 283 | ".quick-input-widget .quick-input-header": "padding:0px!important;margin-bottom:10px;", 284 | ".quick-input-widget .monaco-inputbox": { 285 | "padding": "10px !important", 286 | "border-radius": "5px!important" 287 | }, 288 | ".quick-input-widget .monaco-list-rows": "top: 0 !important;max-height:670px;min-height:300px;", 289 | ".quick-input-widget .monaco-list-row": "position:static!important;border-bottom: 1px solid #333942;padding:5px!important;height:auto!important;", 290 | ".quick-input-widget .quick-input-list-entry": "position:relative;padding:0 5px 0px 15px;", 291 | ".quick-input-widget .quick-input-list-entry .codicon[class*=codicon-]": "font-size:12px;", 292 | ".quick-input-widget .quick-input-list .quick-input-list-entry.quick-input-list-separator-border": "border-top-width:0px!important;", 293 | ".monaco-editor .cursor": "background: linear-gradient(to bottom, #00FF00, #00FF00) !important; color: #161616 !important", 294 | ".title-actions": "display: none !important", 295 | ".quick-input-widget.show-file-icons, .editor-widget.find-widget": "box-shadow: none !important", 296 | ".filematch .monaco-icon-label:before, .custom-list-row.results .monaco-list-row .monaco-icon-label:before": "background-position: 0 bottom !important", 297 | ".filematch .monaco-count-badge": "padding: 5px 6px 0 6px !important", 298 | ".sidebar .title-label": "padding: 0 !important", 299 | ".monaco-workbench .monaco-list:not(.element-focused):focus:before": "outline: none !important", 300 | ".sidebar": "border: none !important", 301 | ".quick-input-list-row div": "display: flex !important; align-items: center !important", 302 | ".panel .composite.title": "visibility: hidden !important", 303 | ".title.show-file-icons .label-container .monaco-icon-label.file-icon": "padding-bottom: 6px !important", 304 | ".sidebar .title-label h2": "line-height: 2.8 !important", 305 | ".monaco-editor .scroll-decoration": "display: none !important", 306 | ".monaco-scrollable-element > .shadow.top": "display: none !important", 307 | ".editor-group-watermark": { 308 | "font-size": "15px !important" 309 | } 310 | }, 311 | "custom-ui-style.external.imports": [ 312 | "file://${userHome}/Library/Application Support/Code/User/emptyPage.js", 313 | ], 314 | // fin de l'import depuis la chaine youtube de igor babko 315 | "window.titleBarStyle": "native", 316 | "security.workspace.trust.untrustedFiles": "open", 317 | "binocular.command.commands": [ 318 | { 319 | "shellCommand": "glab pipeline ci view", 320 | "commandIdentifier": "pipeline", 321 | }, 322 | { 323 | "shellCommand": "git-jira", 324 | "commandIdentifier": "git-jira", 325 | }, 326 | { 327 | "shellCommand": "telescope", 328 | "commandIdentifier": "Telescope", 329 | "key": "shift+cmd+f", 330 | }, 331 | { 332 | "shellCommand": "lazygit", 333 | "commandIdentifier": "Lazygit" 334 | }, 335 | { 336 | "shellCommand": "git checkout $(git fuzzy log)", 337 | "commandIdentifier": "Git fuzzy log" 338 | }, 339 | { 340 | "shellCommand": "git checkout $(git fuzzy log ${file})", 341 | "commandIdentifier": "Git fuzzy log current file" 342 | } 343 | ], 344 | "quickgrep.preview": true, 345 | "workbench.editor.enablePreviewFromCodeNavigation": true, 346 | "workbench.editor.enablePreviewFromQuickOpen": true, 347 | "find-it-faster.general.openFileInPreviewEditor": true, 348 | "terminal.integrated.tabs.enabled": false, 349 | "workbench.editor.tabActionCloseVisibility": false, 350 | "workbench.editor.empty.hint": "hidden", 351 | "animations.Install-Method": "Custom UI Style", 352 | "editor.fontSize": 13, 353 | "vitest.rootConfig": "./test/vitest.config.ts, vite.config.ts", 354 | "editor.codeLensFontFamily": "Jetbrains Mono", 355 | "editor.inlayHints.fontFamily": "Jetbrains Mono", 356 | "editor.inlineSuggest.fontFamily": "Jetbrains Mono", 357 | "debug.console.fontFamily": "Jetbrains Mono", 358 | "scm.inputFontFamily": "Jetbrains Mono", 359 | "notebook.output.fontFamily": "Jetbrains Mono", 360 | "chat.editor.fontFamily": "Jetbrains Mono", 361 | "errorLens.fontFamily": "Jetbrains Mono", 362 | "gitlens.blame.fontFamily": "Jetbrains Mono", 363 | "window.commandCenter": false, 364 | "workbench.panel.opensMaximized": "always", 365 | "gitlens.statusBar.alignment": "left", 366 | "gitlens.graph.layout": "editor", 367 | "gitlens.cloudPatches.experimental.layout": "editor", 368 | "vitest.nodeEnv": {}, 369 | "errorLens.codeLensEnabled": true, 370 | "window.customTitleBarVisibility": "never", 371 | "github.copilot.editor.enableAutoCompletions": true, 372 | "animations.Command-Palette": "Slide", 373 | "animations.Tabs": "None", 374 | "animations.Scrolling": "None", 375 | "animations.Enabled": true, 376 | "workbench.iconTheme": "bearded-icons", 377 | "explorer.openEditors.visible": 1, 378 | "gitlens.graph.dateStyle": "absolute", 379 | "find-it-faster.general.useTerminalInEditor": true, 380 | "find-it-faster.advanced.disableStartupChecks": true, 381 | "find-it-faster.findWithinFiles.previewWindowConfig": "right:55%:wrap", 382 | "find-it-faster.findWithinFiles.previewCommand": "bat --style=numbers --color=always --line-range=:100 {1} --highlight-line {2}", 383 | "find-it-faster.general.searchCurrentWorkingDirectory": "never", 384 | "find-it-faster.general.clearTerminalAfterUse": false, 385 | "find-it-faster.findWithinFiles.fuzzRipgrepQuery": true, 386 | "find-it-faster.general.killTerminalAfterUse": true, 387 | "typescript.tsserver.experimental.enableProjectDiagnostics": true, 388 | "window.density.editorTabHeight": "compact", 389 | "eslint.lintTask.enable": true, 390 | "eslint.enable": true, 391 | "testExplorer.useNativeTesting": true, 392 | "testing.showAllMessages": true, 393 | "testExplorer.addToEditorContextMenu": true, 394 | "terminal.integrated.suggest.builtinCompletions": { 395 | "pwshCode": true, 396 | "pwshGit": true 397 | }, 398 | "terminal.integrated.suggest.enabled": true, 399 | "workbench.externalBrowser": "Arc", 400 | "terminal.integrated.confirmOnKill": "never", 401 | "terminal.integrated.enableImages": true, 402 | "workbench.colorCustomizations": { 403 | "terminalCursor.foreground": "#00ff00", 404 | "terminal.background": "#00000000", 405 | }, 406 | "workbench.settings.applyToAllProfiles": [ 407 | "workbench.colorCustomizations" 408 | ], 409 | "extensions.experimental.affinity": { 410 | "asvetliakov.vscode-neovim": 1 411 | }, 412 | "projectManager.supportSymlinksOnBaseFolders": true, 413 | "svelte.enable-ts-plugin": true, 414 | "vim.camelCaseMotion.enable": true, 415 | "vim.highlightedyank.enable": true, 416 | "vim.smartRelativeLine": true, 417 | "vim.enableNeovim": true, 418 | "vim.statusBarColors.commandlineinprogress": "#00ff00", 419 | "vim.useSystemClipboard": true, 420 | "vim.easymotionDimColor": "", 421 | "vim.easymotionIncSearchForegroundColor": "", 422 | "vim.easymotionMarkerBackgroundColor": "", 423 | "vim.sneakUseIgnorecaseAndSmartcase": true, 424 | "vim.easymotionMarkerForegroundColorTwoCharSecond": "", 425 | "workbench.colorTheme": "Hyper Term Black", 426 | "vim.easymotionMarkerForegroundColorOneChar": "", 427 | "vim.easymotionMarkerForegroundColorTwoCharFirst": "", 428 | "vim.flash.labels": "dsqcxvertgbmlkjnoiu", 429 | "terminal.integrated.fontWeightBold": "bold", 430 | "vim.flash.enable": true, 431 | "terminal.integrated.defaultLocation": "editor", 432 | "vim.easymotionKeys": "hklyuiopnm,azeerqsdfwx;", 433 | "vim.highlightedyank.color": "limegreen", 434 | "workbench.editor.autoLockGroups": { 435 | "terminalEditor": false 436 | }, 437 | "lazygit-vscode.autoHidePanel": true, 438 | "lazygit-vscode.autoHideSideBar": true, 439 | "lazygit-vscode.autoMaximizeWindow": true, 440 | "projectManager.sortList": "Recent", 441 | "editor.mouseWheelZoom": true, 442 | "vim.searchHighlightTextColor": "limegreen", 443 | "vim.searchHighlightColor": "blue", 444 | "editor.peekWidgetDefaultFocus": "editor", 445 | "window.newWindowDimensions": "maximized", 446 | "atlascode.jira.lastCreateSiteAndProject": { 447 | "siteId": "bdd4bedd-1521-40aa-84a6-d348241e248b", 448 | "projectKey": "ACQ" 449 | }, 450 | "diffEditor.hideUnchangedRegions.enabled": true, 451 | "diffEditor.ignoreTrimWhitespace": true, 452 | "testing.automaticallyOpenPeekView": "never", 453 | "gitlens.advanced.messages": { 454 | "suppressIntegrationDisconnectedTooManyFailedRequestsWarning": true 455 | }, 456 | "debug.onTaskErrors": "debugAnyway", 457 | "diffEditor.experimental.useTrueInlineView": true, 458 | "find-it-faster.general.shellPathForTerminal": "/bin/bash", 459 | "terminal.integrated.env.osx": { 460 | "FIG_NEW_SESSION": "1" 461 | }, 462 | "extensions.autoCheckUpdates": false, 463 | "update.mode": "none", 464 | "git-graph.repository.commits.fetchAvatars": true, 465 | "testing.automaticallyOpenTestResults": "neverOpen", 466 | "github.copilot.nextEditSuggestions.enabled": true, 467 | "custom-ui-style.background.opacity": 0.4, 468 | "custom-ui-style.font.sansSerif": "Jetbrains Mono Nerd Font", 469 | "workbench.activityBar.location": "hidden" 470 | } 471 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # EliVim-VSCode 2 | Customize VSCode to prioritize keyboard usage as much as possible (inspired by Neovim) 3 | 4 | Screenshot 5 | 6 | ## Plan 7 | 8 | 1. [Prerequisites](#prerequisites) 9 | 2. [Installation](#installation) 10 | - [Install the extensions](#1-install-the-extensions) 11 | - [Copy/overwrite configuration files](#2-copyoverwrite-configuration-files) 12 | - [Reload/Restart VS Code](#3-reloadrestart-vs-code) 13 | 3. [Usage](#usage) 14 | - [Toggle terminal (cmd+, cmd+t or ctrl+j)](#toggle-terminal-cmd-cmdt-or-ctrlj) 15 | - [Git (ctrl+g)](#git-ctrlg) 16 | - [Search text (cmd+shift+f)](#search-text-cmdshiftf) 17 | - [Search file (cmdp)](#search-file-cmdp) 18 | - [The welcome page](#the-welcome-page) 19 | 20 | 4. [Contributing](#contributing) 21 | 22 | 23 | ## Prerequisites 24 | 25 | Before customizing VSCode, make sure you have the following tools installed on your machine: 26 | 27 | - [fzf](https://github.com/junegunn/fzf) 28 | - [ripgrep](https://github.com/BurntSushi/ripgrep) 29 | - [lazygit](https://github.com/jesseduffield/lazygit) 30 | 31 | These tools are essential for enhancing your keyboard-first experience with VSCode. 32 | You can install these tools using the following commands: 33 | ```bash 34 | # Mac OS 35 | brew install fzf 36 | brew install ripgrep 37 | brew install lazygit 38 | 39 | # Windows 40 | choco install fzf 41 | choco install ripgrep 42 | choco install lazygit 43 | 44 | # Ubuntu Linux 45 | sudo apt-get install fzf 46 | sudo apt-get install ripgrep 47 | LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') 48 | curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz" 49 | tar xf lazygit.tar.gz lazygit 50 | sudo install lazygit /usr/local/bin 51 | 52 | # Arch Linux 53 | sudo pacman fzf ripgrep lazygit 54 | ``` 55 | 56 | You also need to install the following fonts: 57 | - [Fira Code](https://github.com/tonsky/FiraCode) 58 | - [JetBrains Mono](https://www.jetbrains.com/fr-fr/lp/mono/) 59 | 60 | 61 | Once you have installed these prerequisites, you can proceed with the customization steps. 62 | 63 | ### Installation 64 | 65 | ⚠️ **Warning:** Before customizing VSCode, it is highly recommended to make a backup of your current setup. This will allow you to revert back to your original configuration if needed. 66 | ##### on Mac OS: 67 | ```bash 68 | > cp "${userHome}/Library/Application Support/Code/User/" "${userHome}/Library/Application Support/Code/User.bak" 69 | ``` 70 | #### on Linux: 71 | ```bash 72 | >cp "$XDG_CONFIG_DIR/VSCode/User" "$XDG_CONFIG_DIR/VSCode/User.bak" 73 | ``` 74 | 75 | #### 1. Install the extensions 76 | To install the extensions, run the following command: 77 | ##### on Mac OS: 78 | ```bash 79 | > cat extensions.txt | xargs -L 1 code --install-extension 80 | ``` 81 | ##### on Linux: 82 | ```bash 83 | > cat extensions.txt | xargs -L 1 code --install-extension 84 | ``` 85 | This command installs each extension listed in the `extensions.txt` file using the `code --install-extension` command (code for the closed source version, codium for the open sourced, in Linux). 86 | 87 | #### 2. Copy/overwrite configuration files 88 | Now copy `keybindings.json`, `settings.json`, and `welcomePage.js` to your VSCode User folder: 89 | ##### on Mac OS: 90 | ```bash 91 | cp -i keybindings.json settings.json welcomePage.js "${userHome}/Library/Application Support/Code/User" 92 | ``` 93 | ##### on Linux: 94 | In Linux, several additional steps are required for this configuration to run properly. First, the [Custom UI Style extension](https://github.com/subframe7536/vscode-custom-ui-style) needs to be able to manipulate the files in the VSCode/Codium installation. Also, Linux users should edit the 'settings_linux.json' to ensure paths are correct for your distribution. 95 | 96 | ```bash 97 | cp keybindings.json welcomePage.js "$XDG_CONFIG_DIR/VSCode/User/" 98 | cp settings_linux.json "$XDG_CONFIG_DIR/VSCode/User/settings.json" 99 | ``` 100 | This command copies the mentioned files to the appropriate location in your VSCode User folder. 101 | 102 | #### 3. Reload/Restart VS Code 103 | Reload or restart VSCode and 104 | now you are done! You can enjoy this minimalist VSCode setup. 105 | 106 | ### Usage 107 | 108 | This table shows the current keybindings, editable in "keybindings.json".
109 | Click to view key commands 110 | 111 | | key | command | trigger | args | 112 | | ------------------ | -------------------------------------------- | -| -------- | 113 | | shift+cmd+t | -workbench.action.reopenClosedEditor | | | 114 | | shift+cmd+t | workbench.action.terminal.new | terminalProcessSupported | | 115 | | ctrl+shift+` | -workbench.action.terminal.new | terminalProcessSupported | | 116 | | cmd+[KeyM] | workbench.action.createTerminalEditor | | | 117 | | cmd+h | workbench.action.toggleActivityBarVisibility | | | 118 | | ctrl+` | -workbench.action.terminal.toggleTerminal | terminal.active | | 119 | | alt+f | eslint.executeAutofix | | | 120 | | ctrl+shift+g | editor.action.rename | editorHasRenameProvider && editorTextFocus && !editorReadonly | | 121 | | f2 | -editor.action.rename | editorHasRenameProvider && editorTextFocus && !editorReadonly | | 122 | | shift+cmd+g | workbench.action.tasks.runTask | | LazyGit | 123 | | ctrl+shift+g | -workbench.view.scm | !gitlens:disabled && config.gitlens.keymap == 'chorded' | | 124 | | shift+cmd+t | -extension.goToTest | editorTextFocus | | 125 | | shift+cmd+t | extension.splitTestFile | editorTextFocus | | 126 | | cmd+f1 | -extension.splitTestFile | editorTextFocus | | 127 | | cmd+[Comma] f | -testing.runCurrentFile | editorTextFocus | | 128 | | ctrl+t | runCurrentTest.run | | | 129 | | ctrl+f | runCurrentTest.runAndUpdateSnapshots | | | 130 | | ctrl+g | workbench.action.tasks.runTask | terminalProcessSupported | LazyGit | 131 | | cmd+8 | editor.action.marker.next | editorFocus | | 132 | | alt+f8 | -editor.action.marker.next | editorFocus | | 133 | | cmd+9 | editor.action.marker.nextInFiles | editorFocus | | 134 | | f8 | -editor.action.marker.nextInFiles | editorFocus | | 135 | | ctrl+alt+cmd+right | workbench.action.decreaseViewSize | | | 136 | | ctrl+alt+cmd+left | workbench.action.increaseViewSize | | | 137 | | ctrl+alt+cmd+up | workbench.action.evenEditorWidths | | | 138 | | cmd+t | -workbench.action.showAllSymbols | | | 139 | | cmd+t | workbench.action.createTerminalEditorSide | | | 140 | | ctrl+tab | extension.goToTest | | | 141 | | cmd+p | -extension.GoToAnything | | | 142 | | ctrl+cmd+p | searchEverywhere.search | | | 143 | | alt+cmd+p | -searchEverywhere.search | | | 144 | | shift+alt | fuzzySearch.activeTextEditor | | | 145 | | alt+cmd+p | projectManager.listProjects | | | 146 | | alt+cmd+p | -projectManager.listProjects | | | 147 | | cmd+u | -cursorUndo | textInputFocus | | 148 | | cmd+u | thunder-client.import-curl | | | 149 | | shift+cmd+c | -workbench.action.terminal.openNativeConsole | !terminalFocus | | 150 | | shift+cmd+c | vscode-chatgpt.view.focus | | | 151 | | shift+cmd+r | -rerunSearchEditorSearch | inSearchEditor | | 152 | | shift+cmd+r | -nodeReadme.showReadme | editorTextFocus | | 153 | | shift+cmd+r | vscode-chatgpt.optimize | | | 154 | | shift+cmd+t | vscode-chatgpt.addTests | | | 155 | | ctrl+j | workbench.action.terminal.toggleTerminal | | | 156 | | shift+alt+right | editor.action.inlineSuggest.showNext | | | 157 | | shift+alt+left | editor.action.inlineSuggest.showPrevious | | | 158 | | shift+alt+down | editor.action.inlineSuggest.trigger | | | 159 | | shift+cmd+a | copilot-labs.use-brush-picker | editorTextFocus | | 160 | | shift+alt+cmd+e | -copilot-labs.use-brush-picker | editorTextFocus | | 161 | | shift+cmd+t | chatgpt-vscode.addTests | editorHasSelection | | 162 | | cmd+k shift+cmd+1 | -chatgpt-vscode.addTests | editorHasSelection | | 163 | | shift+cmd+c | chatgpt-vscode.adhoc | editorHasSelection | | 164 | | cmd+k shift+cmd+7 | -chatgpt-vscode.adhoc | editorHasSelection | | 165 | | shift+cmd+c | chatgpt-vscode.freeText | | | 166 | | shift+cmd+m | workbench.action.toggleMaximizedPanel | | | 167 | | shift+cmd+g | -editor.action.previousMatchFindAction | editorFocus | | 168 | | shift+cmd+g | -workbench.action.terminal.findPrevious | terminalFindFocused && terminalHasBeenCreated \|\| terminalFindFocused && terminalProcessSupported \|\| terminalFocus && terminalHasBeenCreated \|\| terminalFocus && terminalProcessSupported | | 169 | | shift+cmd+f | find-it-faster.findWithinFiles | | | 170 | | shift+cmd+u | -find-it-faster.findWithinFiles | | | 171 | | shift+cmd+u | workbench.view.search | workbench.view.search.active && neverMatch =~ /doesNotMatch/ | | 172 | | shift+cmd+f | -workbench.view.search | workbench.view.search.active && neverMatch =~ /doesNotMatch/ | | 173 | | shift+cmd+r | chatgpt-vscode.optimize | editorHasSelection | | 174 | | cmd+k shift+cmd+3 | -chatgpt-vscode.optimize | editorHasSelection | | 175 | | shift+cmd+k | workbench.action.terminal.killAll | | | 176 | | shift+cmd+g | workbench.scm.focus | | | 177 | | ctrl+g | lazygit-vscode.toggle | | | 178 | | shift+cmd+l | -lazygit-vscode.toggle | | | 179 | | ctrl+p | binocular.customCommands | | pipeline | 180 | | ctrl+shift+p | binocular.customCommands | | | 181 | | shift+tab | workbench.action.previousEditorInGroup | | | 182 | | cmd+k alt+cmd+left | -workbench.action.previousEditorInGroup | | | 183 | | shift+tab | workbench.action.previousEditor | | | 184 | | ctrl+alt+cmd+5 | -workbench.action.previousEditor | | | 185 | | alt+cmd+left | -workbench.action.previousEditor | | || 186 | 187 |
188 | 189 | 190 | 191 | #### Toggle terminal (cmd+, cmd+t or ctrl+j) 192 | Press cmd+t to toggle the terminal on the side. 193 | Press cmd+, to open a full editor terminal. 194 | Press ctrl+j to open the integrated terminal. 195 | 196 | #### Git (ctrl+g) 197 | Press `ctrl+g` to open `lazygit`. 198 | With this tool, you can perform all your git operations using the keyboard only. 199 | 200 | Screenshot 201 | 202 | #### Search text (cmd+shift+f) 203 | Press `cmd+shift+f` to search for text in your project. 204 | This will trigger `find-it-faster` extension, which is a fzf-rigrep wrapper for VSCode. 205 | It has the advantage of showing a preview of the file where the text is found. 206 | 207 | Screenshot 208 | 209 | #### Search file (cmd+p) 210 | Press `cmd+p` to search for a file in your project. 211 | This will trigger the command palette, which has been redesigned. It is noticeably bigger and centered, so you don't have to look at the top of the screen to see the results. 212 | 213 | Screenshot 214 | 215 | #### The welcome page 216 | The welcome page has also been redesigned. 217 | You can modify the welcome page by editing the `welcomePage.js` file. 218 | 219 | Screenshot 220 | 221 | ### Contributing 222 | If you have any suggestions or improvements, feel free to open an issue or a pull request. 223 | Note that I am currently using Mac OS, so improvements for the documentation on other OSes are more than welcome. 224 | --------------------------------------------------------------------------------