mirror of
https://oauth2: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@github.com/m1ngsama/chopsticks.git
synced 2026-05-10 19:10:59 +08:00
Merge feature/ui-visibility: sidebar, statusline, toggle feedback
This commit is contained in:
commit
b1746c72b7
5 changed files with 93 additions and 16 deletions
|
|
@ -34,8 +34,8 @@ chopsticks gives you a production-ready Vim config in one command. Pure VimScrip
|
|||
|
||||
## What's in the box
|
||||
|
||||
| | |
|
||||
|-|-|
|
||||
| Feature | Description |
|
||||
|---------|-------------|
|
||||
| **LSP** | completion, go-to-def, hover, rename, code actions — pure VimScript ([vim-lsp](https://github.com/prabirshrestha/vim-lsp)) |
|
||||
| **Lint + format** | [ALE](https://github.com/dense-analysis/ale) runs black, prettier, gofmt, rustfmt on save |
|
||||
| **Fuzzy find** | files, buffers, grep, tags, marks, commands — [FZF](https://github.com/junegunn/fzf.vim) |
|
||||
|
|
|
|||
|
|
@ -127,16 +127,16 @@ nnoremap <M-k> :m .-2<CR>==
|
|||
vnoremap <M-j> :m '>+1<CR>gv=gv
|
||||
vnoremap <M-k> :m '<-2<CR>gv=gv
|
||||
|
||||
nnoremap <leader>ss :setlocal spell!<cr>
|
||||
nnoremap <silent> <leader>ss :setlocal spell!<CR>:echo 'Spell: ' . (&spell ? 'ON' : 'OFF')<CR>
|
||||
nnoremap <leader>sn ]s
|
||||
nnoremap <leader>sp [s
|
||||
nnoremap <leader>sa zg
|
||||
nnoremap <leader>s? z=
|
||||
|
||||
set pastetoggle=<F2>
|
||||
nnoremap <F3> :set invnumber<CR>
|
||||
nnoremap <F4> :set invrelativenumber<CR>
|
||||
nnoremap <F6> :set list!<CR>
|
||||
nnoremap <silent> <F2> :set paste!<CR>:echo 'Paste: ' . (&paste ? 'ON' : 'OFF')<CR>
|
||||
nnoremap <silent> <F3> :set invnumber<CR>:echo 'Line numbers: ' . (&number ? 'ON' : 'OFF')<CR>
|
||||
nnoremap <silent> <F4> :set invrelativenumber<CR>:echo 'Relative numbers: ' . (&relativenumber ? 'ON' : 'OFF')<CR>
|
||||
nnoremap <silent> <F6> :set list!<CR>:echo 'List chars: ' . (&list ? 'ON' : 'OFF')<CR>
|
||||
|
||||
nnoremap <space> za
|
||||
|
||||
|
|
|
|||
|
|
@ -4,13 +4,37 @@
|
|||
|
||||
let g:netrw_liststyle = 3
|
||||
let g:netrw_banner = 0
|
||||
let g:netrw_browse_split = 0
|
||||
let g:netrw_browse_split = 4
|
||||
let g:netrw_winsize = 25
|
||||
let g:netrw_altv = 1
|
||||
let g:netrw_list_hide = '\(^\|\s\s\)\zs\.\S\+'
|
||||
let g:netrw_list_hide .= ',\.pyc$,node_modules,\.git,__pycache__,\.DS_Store'
|
||||
|
||||
nnoremap <leader>e :Explore<CR>
|
||||
nnoremap <leader>E :Vexplore<CR>
|
||||
function! s:ToggleSidebar(...) abort
|
||||
let l:dir = a:0 ? a:1 : getcwd()
|
||||
if getbufvar(winbufnr(1), '&filetype') ==# 'netrw' && getwinvar(1, '&winfixwidth')
|
||||
let l:cur = winnr()
|
||||
1wincmd w
|
||||
close
|
||||
if l:cur > 1
|
||||
execute (l:cur - 1) . 'wincmd w'
|
||||
endif
|
||||
return
|
||||
endif
|
||||
execute 'topleft vertical 30new'
|
||||
execute 'Explore ' . fnameescape(l:dir)
|
||||
setlocal winfixwidth
|
||||
setlocal bufhidden=wipe
|
||||
wincmd p
|
||||
endfunction
|
||||
|
||||
nnoremap <silent> <leader>e :call <SID>ToggleSidebar()<CR>
|
||||
nnoremap <silent> <leader>E :call <SID>ToggleSidebar(expand('%:p:h'))<CR>
|
||||
|
||||
augroup ChopstickNetrw
|
||||
autocmd!
|
||||
autocmd FileType netrw setlocal bufhidden=wipe
|
||||
augroup END
|
||||
|
||||
" ── FZF ─────────────────────────────────────────────────────────────────────
|
||||
|
||||
|
|
@ -78,9 +102,11 @@ function! s:ToggleMaximize() abort
|
|||
if exists('t:maximize_session')
|
||||
execute t:maximize_session
|
||||
unlet t:maximize_session
|
||||
echo 'Window: restored'
|
||||
else
|
||||
let t:maximize_session = winrestcmd()
|
||||
resize | vertical resize
|
||||
echo 'Window: MAXIMIZED'
|
||||
endif
|
||||
endfunction
|
||||
nnoremap <silent> <leader>z :call <SID>ToggleMaximize()<CR>
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ function! s:CheatSheet() abort
|
|||
\ '',
|
||||
\ 'FILES & SEARCH',
|
||||
\ ' Ctrl+p Fuzzy find file (git-aware)',
|
||||
\ ' ,e / ,E File browser / vertical split',
|
||||
\ ' ,e / ,E Toggle tree sidebar (cwd / file dir)',
|
||||
\ ' ,b Search open buffers',
|
||||
\ ' ,rg Search project contents (ripgrep)',
|
||||
\ ' ,rG Ripgrep word under cursor',
|
||||
|
|
|
|||
|
|
@ -79,15 +79,29 @@ if exists('g:plugs["vim-startify"]')
|
|||
let g:startify_files_number = 8
|
||||
let g:startify_padding_left = 4
|
||||
|
||||
function! s:SetupDirView() abort
|
||||
if argc() != 1 || !isdirectory(argv()[0]) || exists('s:std_in')
|
||||
return
|
||||
endif
|
||||
let l:dir = fnameescape(argv()[0])
|
||||
execute 'cd ' . l:dir
|
||||
vertical rightbelow vnew
|
||||
if exists(':Startify') == 2
|
||||
Startify
|
||||
else
|
||||
enew
|
||||
endif
|
||||
wincmd h
|
||||
vertical resize 30
|
||||
setlocal winfixwidth
|
||||
wincmd l
|
||||
endfunction
|
||||
|
||||
if !g:is_tty
|
||||
augroup ChopstickStartup
|
||||
autocmd!
|
||||
autocmd StdinReadPre * let s:std_in = 1
|
||||
autocmd VimEnter *
|
||||
\ if argc() == 1 && isdirectory(argv()[0]) && !exists('s:std_in') |
|
||||
\ exe 'cd ' . fnameescape(argv()[0]) |
|
||||
\ if exists(':Startify') == 2 | Startify | else | enew | endif |
|
||||
\ endif
|
||||
autocmd VimEnter * nested call <SID>SetupDirView()
|
||||
augroup END
|
||||
endif
|
||||
|
||||
|
|
@ -144,14 +158,51 @@ function! SLAle() abort
|
|||
return printf(' E:%d W:%d ', l:e, l:w)
|
||||
endfunction
|
||||
|
||||
function! SLBufCount() abort
|
||||
let l:n = len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
|
||||
return l:n > 1 ? ' ' . l:n . ' bufs ' : ''
|
||||
endfunction
|
||||
|
||||
function! SLFlags() abort
|
||||
let l:f = ''
|
||||
if &paste | let l:f .= ' PASTE' | endif
|
||||
if &spell | let l:f .= ' SPELL' | endif
|
||||
if exists('t:maximize_session') | let l:f .= ' MAX' | endif
|
||||
return empty(l:f) ? '' : l:f . ' '
|
||||
endfunction
|
||||
|
||||
function! SLLsp() abort
|
||||
if !exists('*lsp#get_server_names') | return '' | endif
|
||||
let l:servers = lsp#get_server_names()
|
||||
if empty(l:servers) | return '' | endif
|
||||
let l:status = lsp#get_server_status(l:servers[0])
|
||||
if l:status ==# 'running'
|
||||
return ' ' . l:servers[0] . ' '
|
||||
elseif l:status ==# 'starting' || l:status ==# 'not running'
|
||||
return ' ' . l:servers[0] . '… '
|
||||
endif
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
function! SLEncoding() abort
|
||||
let l:enc = &fileencoding !=# '' ? &fileencoding : &encoding
|
||||
let l:fmt = &fileformat
|
||||
if l:enc ==? 'utf-8' && l:fmt ==# 'unix' | return '' | endif
|
||||
return ' ' . l:enc . '[' . l:fmt . '] '
|
||||
endfunction
|
||||
|
||||
function! SLBuild() abort
|
||||
let [l:label, l:hl] = SLMode()
|
||||
let l:s = '%#' . l:hl . '#' . l:label
|
||||
let l:s .= '%#SLBody# %f '
|
||||
let l:s .= '%#SLFlag#%m%r'
|
||||
let l:s .= '%#SLFlag#' . SLFlags()
|
||||
let l:s .= '%#SLBody#%='
|
||||
let l:s .= '%#SLBody#' . SLBufCount()
|
||||
let l:s .= '%#SLFlag#' . SLAle()
|
||||
let l:s .= '%#SLRight#' . SLLsp()
|
||||
let l:s .= '%#SLGit#' . SLGit()
|
||||
let l:s .= '%#SLRight#' . SLEncoding()
|
||||
let l:s .= '%#SLFtype# %y '
|
||||
let l:s .= '%#SLRight# %l:%c %P '
|
||||
return l:s
|
||||
|
|
|
|||
Loading…
Reference in a new issue