Untitled

 avatar
unknown
plain_text
22 days ago
3.5 kB
7
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