├── 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
4 |
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".
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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------