clarified globals; protect other bufs from ve=onemore; misc improvements

This commit is contained in:
Reed Esau
2014-02-02 18:18:16 -07:00
parent daf4183a42
commit 5b57c3b06c
2 changed files with 55 additions and 50 deletions

View File

@@ -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 programmers editor like Vim for
writing?
With plenty of word processing applications available, including those
that specifically cater to writers, why use a programmers 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

View File

@@ -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