mirror of
https://github.com/preservim/vim-pencil.git
synced 2025-11-16 13:53:47 -05:00
clarified globals; protect other bufs from ve=onemore; misc improvements
This commit is contained in:
@@ -14,13 +14,15 @@ The _pencil_ plugin aspires to make Vim as powerful a tool for writers as
|
||||
it is for coders by focusing narrowly on the handful of tweaks needed to
|
||||
smooth the path to writing prose.
|
||||
|
||||
* For editing files in _text_, _markdown_, _textile_, and other prose-oriented file types
|
||||
* For editing files in _text_, _markdown_, _textile_, and other
|
||||
prose-oriented file types
|
||||
* Agnostic on soft line wrap _versus_ hard line breaks, supporting both
|
||||
* Auto-detects wrap mode via modeline and sampling
|
||||
* Adjusts navigation key mappings to suit the wrap mode
|
||||
* Creates undo points on common punctuation
|
||||
* When using hard line breaks, enables autoformat while inserting text
|
||||
* Buffer-scoped configuration (leaves your global settings alone)
|
||||
* Buffer-scoped configuration (with a few minor exceptions, _pencil_
|
||||
preserves your global settings)
|
||||
* Pure Vimscript with no dependencies
|
||||
|
||||
Need spell-check and other features? Vim is about customization. To
|
||||
@@ -29,15 +31,15 @@ its rich ecosystem of plugins.
|
||||
|
||||
## Why use Vim for writing?
|
||||
|
||||
With plenty of word processing apps available, including those that
|
||||
specifically cater to writers, why use a programmer’s editor like Vim for
|
||||
writing?
|
||||
With plenty of word processing applications available, including those
|
||||
that specifically cater to writers, why use a programmer’s editor like Vim
|
||||
for writing?
|
||||
|
||||
There are good reasons NOT to use Vim for writing:
|
||||
|
||||
* Primitive in certain respects (no WYSIWYG or proportionally spaced
|
||||
characters, e.g.)
|
||||
* A modal editor with a steep learning curve
|
||||
* A modal editor with a relatively steep learning curve
|
||||
* Time and effort to configure to your needs
|
||||
|
||||
But Vim offers a unique editing environment not matched by other writing
|
||||
@@ -54,9 +56,9 @@ tools:
|
||||
Install using Pathogen, Vundle, Neobundle, or your favorite Vim package
|
||||
manager.
|
||||
|
||||
_For those new to Vim: before installing this plugin, you should first
|
||||
work through one of the many tutorials available to get comfortable with
|
||||
the basics of Vim._
|
||||
_For those new to Vim: before installing this plugin, consider getting
|
||||
comfortable with the basics of Vim by working through one of the many
|
||||
tutorials available._
|
||||
|
||||
## Configuration
|
||||
|
||||
@@ -161,7 +163,7 @@ reformat paragraphs with standard Vim commands:
|
||||
* `ggVGgq` or `:g/^/norm gqq` - format all paragraphs in buffer
|
||||
* `:%norm vipJ` - unformat all paragraphs in buffer
|
||||
|
||||
Optionally, you can map these sequences to underutilized keys in your
|
||||
Optionally, you can map these operations to underutilized keys in your
|
||||
`.vimrc`:
|
||||
|
||||
```vim
|
||||
@@ -221,8 +223,8 @@ At the bottom of this document is a odd-looking code:
|
||||
<!-- vim: set tw=74 :-->
|
||||
```
|
||||
|
||||
This is an optional ‘modeline’ that tells Vim to run the following command
|
||||
upon loading the file into a buffer:
|
||||
This is an **optional** ‘modeline’ that tells Vim to run the following
|
||||
command upon loading the file into a buffer:
|
||||
|
||||
```vim
|
||||
:set textwidth=74
|
||||
|
||||
@@ -78,7 +78,7 @@ function! pencil#init(...) abort
|
||||
let l:wrap_arg = get(l:args, 'wrap', 'detect')
|
||||
|
||||
if (b:wrap_mode && l:wrap_arg ==# 'toggle') ||
|
||||
\ l:wrap_arg =~# '^\(off\|disable\|false\)$'
|
||||
\ l:wrap_arg =~# '^\(0\|off\|disable\|false\)$'
|
||||
let b:wrap_mode = s:WRAP_MODE_OFF
|
||||
elseif l:wrap_arg ==# 'hard'
|
||||
let b:wrap_mode = s:WRAP_MODE_HARD
|
||||
@@ -93,7 +93,7 @@ function! pencil#init(...) abort
|
||||
|
||||
" translate default(-1) to soft(1) or hard(2) or off(0)
|
||||
if b:wrap_mode == s:WRAP_MODE_DEFAULT
|
||||
if g:pencil#wrapModeDefault =~# '^\(off\|disable\|false\)$'
|
||||
if g:pencil#wrapModeDefault =~# '^\(0\|off\|disable\|false\)$'
|
||||
let b:wrap_mode = s:WRAP_MODE_OFF
|
||||
elseif g:pencil#wrapModeDefault ==# 'soft'
|
||||
let b:wrap_mode = s:WRAP_MODE_SOFT
|
||||
@@ -130,45 +130,48 @@ function! pencil#init(...) abort
|
||||
setlocal colorcolumn<
|
||||
endif
|
||||
|
||||
" global settings
|
||||
if b:wrap_mode
|
||||
setlocal autoindent " needed by fo=n
|
||||
setlocal nolist
|
||||
setlocal wrapmargin=0
|
||||
setlocal display+=lastline
|
||||
setlocal formatoptions+=1 " don't break line before 1 letter word
|
||||
setlocal formatoptions+=t
|
||||
setlocal formatoptions+=n " recognize numbered lists
|
||||
|
||||
if g:pencil#cursorwrap
|
||||
setlocal whichwrap+=<,>,h,l,[,]
|
||||
setlocal virtualedit+=onemore " could break other plugins
|
||||
set display+=lastline
|
||||
set backspace=indent,eol,start " via tpope/vim-sensible
|
||||
if g:pencil#joinspaces
|
||||
set joinspaces " two spaces after .!?
|
||||
else
|
||||
set nojoinspaces " only one space after a .!? (default)
|
||||
endif
|
||||
endif
|
||||
|
||||
" clean out stuff we likely don't want
|
||||
setlocal formatoptions-=2
|
||||
setlocal formatoptions-=v
|
||||
" because ve=onemore is relatively rare and could break
|
||||
" other plugins, restrict its presence to buffer
|
||||
" Better: restore ve to original setting
|
||||
if b:wrap_mode && g:pencil#cursorwrap
|
||||
set whichwrap+=<,>,h,l,[,]
|
||||
augroup pencil_cursorwrap
|
||||
autocmd BufEnter <buffer> set virtualedit+=onemore
|
||||
autocmd BufLeave <buffer> set virtualedit-=onemore
|
||||
augroup END
|
||||
else
|
||||
silent! autocmd! pencil_cursorwrap * <buffer>
|
||||
endif
|
||||
|
||||
" trailing whitespace continues paragraph
|
||||
" makes autoformat behave oddly where spaces aren't present
|
||||
setlocal formatoptions-=w
|
||||
" window/buffer settings
|
||||
if b:wrap_mode
|
||||
setlocal nolist
|
||||
setlocal wrapmargin=0
|
||||
setlocal autoindent " needed by formatoptions=n
|
||||
setlocal formatoptions+=n " recognize numbered lists
|
||||
setlocal formatoptions+=1 " don't break line before 1 letter word
|
||||
setlocal formatoptions+=t " autoformat of text, but not comments
|
||||
|
||||
" clean out stuff we likely don't want
|
||||
setlocal formatoptions-=2 " use indent of 2nd line for rest of paragraph
|
||||
setlocal formatoptions-=v " only break line at blank entered during insert
|
||||
setlocal formatoptions-=w " avoid erratic behavior if mixed spaces
|
||||
else
|
||||
setlocal autoindent< noautoindent<
|
||||
setlocal list< nolist<
|
||||
setlocal wrapmargin<
|
||||
setlocal display<
|
||||
setlocal formatoptions<
|
||||
setlocal whichwrap<
|
||||
setlocal virtualedit<
|
||||
endif
|
||||
|
||||
if b:wrap_mode
|
||||
if g:pencil#joinspaces
|
||||
setlocal joinspaces " two spaces after .!?
|
||||
else
|
||||
setlocal nojoinspaces " only one space after a .!? (default)
|
||||
endif
|
||||
else
|
||||
setlocal joinspaces< nojoinspaces<
|
||||
endif
|
||||
|
||||
if b:wrap_mode == s:WRAP_MODE_SOFT
|
||||
|
||||
Reference in New Issue
Block a user