Untitled
unknown
plain_text
3 months ago
3.5 kB
9
Indexable
" ============================
" Vim Configuration for Writing
" ============================
" ----------------------------
" Leader Key
" ----------------------------
" Set leader key to space for easy access
let mapleader = " "
" ----------------------------
" Plugin Manager (vim-plug)
" ----------------------------
call plug#begin('~/.vim/plugged')
" Distraction-free writing
Plug 'junegunn/goyo.vim' " Zen mode: centers text, hides UI
Plug 'junegunn/limelight.vim' " Focus: dims everything except current paragraph
Plug 'reedes/vim-pencil' " Smart prose editing: wrapping, reflow, cursor movement
" Statusline
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
" File explorer
Plug 'preservim/nerdtree'
call plug#end()
" ----------------------------
" Airline: Word Count in Statusline
" ----------------------------
let g:airline#extensions#wordcount#enabled = 1
let g:airline#extensions#wordcount#filetypes = '\vnotes|help|markdown|rst|org|text|asciidoc|tex|mail'
" ----------------------------
" Writer Mode Settings (Markdown/Prose)
" ----------------------------
augroup writer_settings
autocmd!
" Apply writer-friendly setup to prose filetypes
autocmd FileType markdown,text,asciidoc,org,tex call s:setup_writer()
augroup END
function! s:setup_writer() abort
" Enable spell check
setlocal spell spelllang=en_us
" Color column at 80 chars as reference
setlocal colorcolumn=80
" Vim-pencil settings
let g:pencil#wrapMode = 'soft' " soft wrap (no hard newlines)
let g:pencil#cursorMove = 'screen' " j/k move by screen lines
setlocal textwidth=80 " max width for reflow (gq)
" Limelight defaults
let g:limelight_paragraph_mode = 0 " 0 = sentence mode, 1 = paragraph mode
endfunction
" ----------------------------
" Goyo Auto-Center
" ----------------------------
augroup center_cursor
autocmd!
" Center the cursor line when entering/exiting Goyo
autocmd User GoyoEnter normal! zz
autocmd User GoyoLeave normal! zz
augroup END
" ----------------------------
" Convenience Mappings
" ----------------------------
" <leader>w → Toggle Goyo + Limelight + spellcheck
nnoremap <leader>w :<C-u>call ToggleWriterMode()<CR>
function! ToggleWriterMode() abort
if exists(':Goyo') && !exists('g:goyo_active')
Goyo
let g:goyo_active = 1
Limelight
if &filetype =~# 'markdown\|text\|asciidoc\|org\|tex'
setlocal spell spelllang=en_us
endif
else
Goyo!
Limelight!
unlet g:goyo_active
endif
endfunction
" <leader>r → Toggle vim-pencil wrap mode (soft/hard)
nnoremap <leader>r :<C-u>call ToggleWrapMode()<CR>
function! ToggleWrapMode() abort
if get(g:, 'pencil#wrapMode', 'soft') ==# 'soft'
let g:pencil#wrapMode = 'hard'
echo "Pencil wrap mode: HARD"
else
let g:pencil#wrapMode = 'soft'
echo "Pencil wrap mode: SOFT"
endif
endfunction
" <leader>n → Toggle NERDTree
nnoremap <leader>n :NERDTreeToggle<CR>
" ----------------------------
" Optional Manuscript Ruler (72 chars)
" ----------------------------
highlight ColorColumn ctermbg=235 guibg=#2E2E2E
set colorcolumn=72
" ----------------------------
" Spellcheck Toggle
" ----------------------------
" Press <leader>s (space + s) to toggle spellcheck on/off
" Works only in the current buffer
nnoremap <leader>s :setlocal spell!<CR>
" Optional: display ON/OFF message when toggling
" nnoremap <leader>s :setlocal spell!<CR>:echo "Spellcheck: " . (&spell ? "ON" : "OFF")<CR>
Editor is loading...
Leave a Comment