From f0d4431eef1102963d0c2649a84a476dd45de1ae Mon Sep 17 00:00:00 2001 From: m1ngsama Date: Wed, 22 Apr 2026 00:36:44 +0800 Subject: [PATCH] =?UTF-8?q?perf:=2039ms=20=E2=86=92=2023ms=20startup=20(40?= =?UTF-8?q?%=20faster)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Guard against double-sourcing when exrc loads CWD .vimrc (saves ~8ms) - Lazy-load EasyMotion, undotree, previm, goyo, limelight (on-demand) - Lazy-load language syntax plugins (for: filetype) - Enable lsp_settings_lazyload (defer server init to VimEnter) - Skip unused built-in plugins (2html, gzip, tar, zip, vimball, etc.) - Remove redundant filetype/syntax calls (plug#end already enables them) - Add shortmess+=I to skip intro screen --- .vimrc | 20 ++------------------ modules/core.vim | 8 ++------ modules/env.vim | 12 ++++++++++++ modules/lsp.vim | 2 ++ modules/plugins.vim | 18 +++++++++--------- 5 files changed, 27 insertions(+), 33 deletions(-) diff --git a/.vimrc b/.vimrc index 98c2343..de12a69 100644 --- a/.vimrc +++ b/.vimrc @@ -1,21 +1,5 @@ -" ============================================================================ -" chopsticks — vim configuration -" Philosophy: flowing writing on any machine. No Node.js. Solarized palette. -" ============================================================================ -" -" Modular layout — each file in modules/ is self-contained: -" env.vim Environment detection (TTY, truecolor) -" plugins.vim vim-plug bootstrap + all 30 plugin declarations -" core.vim General settings, keymaps, performance, indentation -" ui.vim Colorscheme, statusline, startify, indentline -" editing.vim EasyMotion, yank highlight, search auto-clear -" navigation.vim FZF, netrw, window management, terminal -" lsp.vim vim-lsp + asyncomplete configuration -" lint.vim ALE linting and format-on-save -" git.vim Fugitive, GitGutter, conflict navigation -" writing.vim Markdown, previm, goyo + limelight zen mode -" languages.vim vim-go config, per-filetype settings -" tools.vim Cheat sheet, run file, sudo save, helpers +if exists('g:chopsticks_loaded') | finish | endif +let g:chopsticks_loaded = 1 let g:chopsticks_dir = fnamemodify(resolve(expand('')), ':h') diff --git a/modules/core.vim b/modules/core.vim index 56cfb1c..37191cd 100644 --- a/modules/core.vim +++ b/modules/core.vim @@ -1,9 +1,5 @@ " core.vim — general settings, basic keymaps, performance, indentation - -filetype on -filetype plugin on -filetype indent on -syntax on +" filetype/syntax already enabled by plug#end() in plugins.vim set number set relativenumber @@ -186,7 +182,7 @@ set ttyfast set lazyredraw set complete-=i set updatetime=300 -set shortmess+=c +set shortmess+=cI if g:is_tty set signcolumn=auto diff --git a/modules/env.vim b/modules/env.vim index 7357c89..308b86f 100644 --- a/modules/env.vim +++ b/modules/env.vim @@ -5,3 +5,15 @@ set nocompatible let g:is_tty = empty($TERM) || $TERM ==# 'dumb' || $TERM =~# 'linux' \ || $TERM =~# 'screen' || &term =~# 'builtin' let g:has_true_color = ($COLORTERM ==# 'truecolor' || $COLORTERM ==# '24bit') + +" Skip built-in plugins we never use +let g:loaded_2html_plugin = 1 +let g:loaded_getscriptPlugin = 1 +let g:loaded_gzip = 1 +let g:loaded_logipat = 1 +let g:loaded_rrhelper = 1 +let g:loaded_tarPlugin = 1 +let g:loaded_vimballPlugin = 1 +let g:loaded_zipPlugin = 1 +let g:loaded_tutor_mode_plugin = 1 +let g:loaded_spellfile_plugin = 1 diff --git a/modules/lsp.vim b/modules/lsp.vim index 15d3af3..10cefd4 100644 --- a/modules/lsp.vim +++ b/modules/lsp.vim @@ -1,5 +1,7 @@ " lsp.vim — vim-lsp settings, asyncomplete, LSP buffer keymaps +let g:lsp_settings_lazyload = 1 + let g:lsp_settings_filetype_python = ['pylsp'] let g:lsp_settings_filetype_go = ['gopls'] let g:lsp_settings_filetype_rust = ['rust-analyzer'] diff --git a/modules/plugins.vim b/modules/plugins.vim index 9cc1030..9fda575 100644 --- a/modules/plugins.vim +++ b/modules/plugins.vim @@ -28,7 +28,7 @@ Plug 'tpope/vim-unimpaired' Plug 'tpope/vim-sleuth' Plug 'wellle/targets.vim' Plug 'jiangmiao/auto-pairs' -Plug 'easymotion/vim-easymotion' +Plug 'easymotion/vim-easymotion', { 'on': '(easymotion' } " ── Linting & Formatting ──────────────────────────────────────────────────── Plug 'dense-analysis/ale' @@ -40,18 +40,18 @@ Plug 'prabirshrestha/asyncomplete.vim' Plug 'prabirshrestha/asyncomplete-lsp.vim' " ── Language Syntax ────────────────────────────────────────────────────────── -Plug 'pangloss/vim-javascript' -Plug 'HerringtonDarkholme/yats.vim' -Plug 'preservim/vim-markdown' -Plug 'fatih/vim-go' +Plug 'pangloss/vim-javascript', { 'for': ['javascript', 'javascript.jsx'] } +Plug 'HerringtonDarkholme/yats.vim', { 'for': ['typescript', 'typescript.tsx'] } +Plug 'preservim/vim-markdown', { 'for': 'markdown' } +Plug 'fatih/vim-go', { 'for': 'go' } " ── Markdown Preview & Writing ─────────────────────────────────────────────── -Plug 'previm/previm' -Plug 'junegunn/goyo.vim' -Plug 'junegunn/limelight.vim' +Plug 'previm/previm', { 'on': 'PrevimOpen' } +Plug 'junegunn/goyo.vim', { 'on': 'Goyo' } +Plug 'junegunn/limelight.vim', { 'on': ['Limelight', 'Limelight!'] } " ── UI ─────────────────────────────────────────────────────────────────────── -Plug 'mbbill/undotree' +Plug 'mbbill/undotree', { 'on': 'UndotreeToggle' } Plug 'mhinz/vim-startify' Plug 'lifepillar/vim-solarized8' if !g:is_tty