diff --git a/vim/.vim/bundle/pencil/LICENSE b/vim/.vim/bundle/pencil/LICENSE deleted file mode 100644 index 44fe50a..0000000 --- a/vim/.vim/bundle/pencil/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -License: The MIT License (MIT) - -Copyright (c) 2013,2014 Reed Esau - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - diff --git a/vim/.vim/bundle/pencil/README.markdown b/vim/.vim/bundle/pencil/README.markdown deleted file mode 100644 index 0fc4309..0000000 --- a/vim/.vim/bundle/pencil/README.markdown +++ /dev/null @@ -1,696 +0,0 @@ -# vim-pencil - -> Rethinking Vim as a tool for writers - -
- -- - - -![demo](http://i.imgur.com/0KYl5vU.gif) -- - - - -# Features - -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 prose-oriented file types such as _text_, _markdown_, - _mail_, _rst_, _tex_, _textile_, and _asciidoc_ -* 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 during Insert mode, including - deletion via line `` and word `` -* Buffer-scoped configuration (with a few minor exceptions, _pencil_ preserves - your global settings) -* Support for Vim’s Conceal feature to hide markup defined by Syntax plugins - (e.g., `_` and `*` markup for styled text in \_*Markdown*\_) -* Support for display of mode indicator (`␍` and `⤸`, e.g.) in the status line -* Pure Vimscript with no dependencies - -In addition, when using hard line break mode: - -* Makes use of Vim’s powerful autoformat while inserting text, except for - tables and code blocks where you won’t want it. -* *NEW* Optional key mapping to suspend autoformat for the Insert. - -Need spell-check, distraction-free editing, and other features? Vim is about -customization. To complete your editing environment, learn to configure Vim and -draw upon its rich ecosystem of plugins. - -# Why use Vim for writing? - -With plenty of word processing applications available, including those -that specifically cater to writers, why use a modal editor like Vim? -Several reasons have been offered: - -* Your hands can rest in a neutral ‘home’ position, only rarely straying - to reach for mouse, track pad, or arrow keys -* Minimal chording, with many mnemonic-friendly commands -* Sophisticated capabilities for navigating and manipulating text -* Highly configurable, enabling you to build a workflow that suits your - needs, with many great plugins available -* No proprietary format lock-in - -But while such reasons might be sound, they remain scant justification to -switch away from the familiar word processor. Instead, you need -a compelling reason—one that can appeal to a writer’s love for language -and the tools of writing. - -You can find that reason in Vim's mysterious command sequences. Take `cas` -for instance. You might see it as a mnemonic for _Change Around Sentence_ -to replace an existing sentence. But dig a bit deeper to discover that -such commands have a grammar of their own, comprised of nouns, verbs, and -modifiers. Think of them as the composable building blocks of a _domain -specific language_ for manipulating text, one that can become a powerful -tool in expressing yourself. For more details on vi-style editing, see... - -* [Learn to speak vim – verbs, nouns, and modifiers!][ls] (December 2011) -* [Your problem with Vim is that you don't grok vi][gv] (December 2011) -* [Intro to Vim's Grammar][ig] (January 2013) -* [Why Atom Can’t Replace Vim, Learning the lesson of vi][wa] (March 2014) -* [Language of Vim/Neovim][lovn] (January 2015) - -[ls]: http://yanpritzker.com/2011/12/16/learn-to-speak-vim-verbs-nouns-and-modifiers/ -[gv]: http://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim/1220118#1220118 -[ig]: http://takac.github.io/2013/01/30/vim-grammar/ -[wa]: https://medium.com/p/433852f4b4d1 -[lovn]: http://allsyed.com/language-of-vim-neovim/ - -# Installation - -_pencil_ is best installed using a Vim package manager, such as -[Vundle][vnd], [Plug][plg], [NeoBundle][nbn], or [Pathogen][pth]. - -_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._ - -[vnd]: https://github.com/gmarik/Vundle.vim -[plg]: https://github.com/junegunn/vim-plug -[nbn]: https://github.com/Shougo/neobundle.vim -[pth]: https://github.com/tpope/vim-pathogen - -#### Vundle - -Add to your `.vimrc` and save: - -```vim -Plugin 'reedes/vim-pencil' -``` - -…then run the following in Vim: - -```vim -:source % -:PluginInstall -``` - -#### Plug - -Add to your `.vimrc` and save: - -```vim -Plug 'reedes/vim-pencil' -``` - -…then run the following in Vim: - -```vim -:source % -:PlugInstall -``` - -#### NeoBundle - -Add to your `.vimrc` and save: - -```vim -NeoBundle 'reedes/vim-pencil' -``` - -…then run the following in Vim: - -```vim -:source % -:NeoBundleInstall -``` - -#### Pathogen - -Run the following in a terminal: - -```bash -cd ~/.vim/bundle -git clone https://github.com/reedes/vim-pencil -``` - -# Configuration - -## Initializing by command - -You can manually enable, disable, and toggle _pencil_ as a command: - -* `Pencil` - initialize _pencil_ with auto-detect for the current buffer -* `NoPencil` (or `PencilOff`) - removes navigation mappings and restores buffer to global settings -* `TogglePencil` (or `PencilToggle`) - if on, turns off; if off, initializes with auto-detect - -Because auto-detect might not work as intended, you can invoke a command -to set the behavior for the current buffer: - -* `SoftPencil` (or `PencilSoft`) - initialize _pencil_ with soft line wrap mode -* `HardPencil` (or `PencilHard`) - initialize _pencil_ with hard line break mode (and Vim’s autoformat) - -## Initializing by file type - -Initializing _pencil_ by file type is _optional_, though doing so will -automatically set up your buffers for editing prose. - -Add support for your desired file types to your `.vimrc`: - -```vim -set nocompatible -filetype plugin on " may already be in your .vimrc - -augroup pencil - autocmd! - autocmd FileType markdown,mkd call pencil#init() - autocmd FileType text call pencil#init() -augroup END -``` - -You can initialize several prose-oriented plugins together: - -```vim -augroup pencil - autocmd! - autocmd FileType markdown,mkd call pencil#init() - \ | call lexical#init() - \ | call litecorrect#init() - \ | call textobj#quote#init() - \ | call textobj#sentence#init() -augroup END -``` - -For a list of other prose-oriented plugins, consult the [See -also](#see-also) section below. - -## Hard line breaks or soft line wrap? - -Coders will have the most experience with the former, and writers the -latter. But whatever your background, chances are that you must contend -with both conventions. This plugin doesn't force you to choose a side—you -can configure each buffer independently. - -In most cases you can set a default to suit your preference and let -auto-detection figure out what to do. - -```vim -let g:pencil#wrapModeDefault = 'soft' " default is 'hard' - -augroup pencil - autocmd! - autocmd FileType markdown,mkd call pencil#init() - autocmd FileType text call pencil#init({'wrap': 'hard'}) -augroup END -``` - -In the example above, for buffers of type `markdown` this plugin will -auto-detect the line wrap approach, with soft line wrap as the default. - -For buffers of type `text`, it will initialize with hard line breaks, -even if auto-detect might suggest soft line wrap. - -## Automatic formatting - -_The ‘autoformat’ feature affects *HardPencil* (hard line break) mode -only._ - -When inserting text while in *HardPencil* mode, Vim’s powerful autoformat -feature will be _enabled_ by default and can offer many of the same -benefits as soft line wrap. - -To set the default behavior in your `.vimrc`: - -```vim -let g:pencil#autoformat = 1 " 0=disable, 1=enable (def) -``` - -You can override this default during initialization, as in: - -```vim -augroup pencil - autocmd! - autocmd FileType markdown call pencil#init({'wrap': 'hard', 'autoformat': 1}) - autocmd FileType text call pencil#init({'wrap': 'hard', 'autoformat': 0}) - ... -augroup END -``` - -...where buffers of type `markdown` and `text` will use hard line breaks, -but `text` buffers will have autoformat disabled. - -## Suspend automatic formatting for the Insert - -There are two useful exceptions where autoformat (when enabled for the -buffer) will be _temporarily disabled_ for the current Insert: - -First is _pencil’s_ 'blacklisting' feature: if used with popular -prose-oriented syntax plugins, _pencil_ will suspend autoformat when you -enter Insert mode from inside a code block or table. - -[**NEW**] Second, where blacklisting falls short, you can optionally map -a buffer-scoped ‘modifier’ key to suspend autoformat during the next -Insert: - -```vim -let g:pencil#map#suspend_af = 'K' " default is no mapping -``` - -Using the above mapping, with `Ko` you’ll enter Insert mode with the -cursor on a new line, but autoformat will suspend for that Insert. Using -`o` by itself will retain autoformat. - -(See the advanced section below for details on how blacklisting is -implemented and configured). - -## Manual formatting - -Note that you need not rely on Vim’s autoformat exclusively and can -manually reformat paragraphs with standard Vim commands: - -* `gqap` - format current paragraph (see `:help gq` for details) -* `vapJgqap` - merge two paragraphs (current and next) and format -* `ggVGgq` or `:g/^/norm gqq` - format all paragraphs in buffer - -Optionally, you can map these operations to underutilized keys in your -`.vimrc`: - -```vim -nnoremap Q gqap -xnoremap Q gq -nnoremap Q vapJgqap -``` - -Or you may wish to ‘unformat’, (i.e., remove hard line breaks) when using -soft line wrap. - -* `vipJ` - join all lines in current paragraph -* `:%norm vipJ` - unformat all paragraphs in buffer - -## Default textwidth - -You can configure the textwidth to be used in **Hard Pencil** mode when no -textwidth is set globally, locally, or available via modeling. It -defaults to `74`, but you can change that value in your `.vimrc`: - -```vim -let g:pencil#textwidth = 74 -``` - -## Sentence spacing - -By default, when formatting text (through `gwip`, e.g.) only one space -will be inserted after a period(`.`), exclamation point(`!`), or question -mark(`?`). You can change this default: - -```vim -let g:pencil#joinspaces = 0 " 0=one_space (def), 1=two_spaces -``` - -## Cursor wrap - -By default, `h`/`l` and the left/right cursor keys will move to the -previous/next line after reaching first/last character in a line with -a hard break. If you wish to retain the default Vim behavior, set the -`cursorwrap` value to `0` in your `.vimrc`: - -```vim -let g:pencil#cursorwrap = 1 " 0=disable, 1=enable (def) -``` - -## Concealing \_\_markup\_\_ - -_pencil_ enables Vim's powerful Conceal feature, although support among -Syntax and Colorscheme plugins is currently spotty. - -You can change _pencil’s_ default settings for conceal in your `.vimrc`: - -```vim -let g:pencil#conceallevel = 3 " 0=disable, 1=one char, 2=hide char, 3=hide all (def) -let g:pencil#concealcursor = 'c' " n=normal, v=visual, i=insert, c=command (def) -``` - -For more details on Vim’s Conceal feature, see: - -```vim -:help conceallevel -:help concealcursor -``` - -### Concealing styled text in Markdown - -Syntax plugins such as [tpope/vim-markdown][tm] support concealing the -markup characters when displaying \_*italic*\_, \*\*__bold__\*\*, and -\*\*\*___bold italic___\*\*\* styled text. - -To use Vim’s Conceal feature with Markdown, you will need to install: - -1. [tpope/vim-markdown][tm] as it’s currently the only Markdown syntax - plugin that supports conceal. - -2. A monospaced font (such as [Cousine][co]) featuring the _italic_, - **bold**, and ***bold italic*** style variant for styled text. - -3. A colorscheme (such as [reedes/vim-colors-pencil][cp]) which supports - the Markdown-specific highlight groups for styled text. - -You should then only see the `_` and `*` markup for the cursor line and in -visual selections. - -**Terminal users:** consult your terminal’s documentation to configure your -terminal to support **bold** and _italic_ styles. - -[co]: http://www.google.com/fonts/specimen/Cousine -[tm]: http://github.com/tpope/vim-markdown - -## Status line indicator - -Your status line can reflect the wrap mode for _pencil_ buffers. For -example, `␍` to represent `HardPencil` (hard line break) mode. To -configure your status line and ruler, add to your `.vimrc`: - -```vim -set statusline=%<%f\ %h%m%r%w\ \ %{PencilMode()}\ %=\ col\ %c%V\ \ line\ %l\,%L\ %P -set rulerformat=%-12.(%l,%c%V%)%{PencilMode()}\ %P -``` - -or if using [bling/vim-airline][va]: - -```vim -let g:airline_section_x = '%{PencilMode()}' -``` - -The default indicators now include ‘auto’ for when Vim’s autoformat is -active in hard line break mode. (If autoformat is suspended for the -Insert, it’ll show the ‘hard’ indicator.) - -```vim -let g:pencil#mode_indicators = {'hard': 'H', 'auto': 'A', 'soft': 'S', 'off': '',} -``` - -If Unicode is detected, the default indicators are: - -```vim -let g:pencil#mode_indicators = {'hard': '␍', 'auto': 'ª', 'soft': '⤸', 'off': '',} -``` - -If you don’t like the default indicators, you can specify your own in -your `.vimrc`. - -Note that `PencilMode()` will return blank for buffers in which _pencil_ -has not been initialized. - -[va]: http://github.com/bling/vim-airline - -## Advanced pencil - -### Advanced initialization - -You may want to refactor initialization statements into a function in -your `.vimrc` to set up a buffer for writing: - -```vim -function! Prose() - call pencil#init() - call lexical#init() - call litecorrect#init() - call textobj#quote#init() - call textobj#sentence#init() - - " manual reformatting shortcuts - nnoremap Q gqap - xnoremap Q gq - nnoremap Q vapJgqap - - " force top correction on most recent misspelling - nnoremap [s1z= - inoremap u[s1z=`]Au - - " replace common punctuation - iabbrev -- – - iabbrev --- — - iabbrev << « - iabbrev >> » - - " open most folds - setlocal foldlevel=6 -endfunction - -" automatically initialize buffer by file type -autocmd FileType markdown,mkd,text call Prose() - -" invoke manually by command for other file types -command! -nargs=0 Prose call Prose() -``` - -For highly-granular control, you can override _pencil_ and other configuration -settings when initializing buffers by file type: - -```vim -augroup pencil - autocmd! - autocmd FileType markdown,mkd call pencil#init() - \ | call litecorrect#init() - \ | setl spell spl=en_us fdl=4 noru nonu nornu - \ | setl fdo+=search - autocmd Filetype git,gitsendemail,*commit*,*COMMIT* - \ call pencil#init({'wrap': 'hard', 'textwidth': 72}) - \ | call litecorrect#init() - \ | setl spell spl=en_us et sw=2 ts=2 noai - autocmd Filetype mail call pencil#init({'wrap': 'hard', 'textwidth': 60}) - \ | call litecorrect#init() - \ | setl spell spl=en_us et sw=2 ts=2 noai nonu nornu - autocmd Filetype html,xml call pencil#init({'wrap': 'soft'}) - \ | call litecorrect#init() - \ | setl spell spl=en_us et sw=2 ts=2 -augroup END -``` - -Configurable options for `pencil#init()` include: `autoformat`, -`concealcursor`, `conceallevel`, `cursorwrap`, `joinspaces`, `textwidth`, -and `wrap`. These are detailed above. - -### Autoformat manual control - -_The ‘autoformat’ feature affects *HardPencil* (hard line break) mode -only._ - -To suspend autoformat for the next Insert, see above. - -When you need to manually enable/disable autoformat for the current -buffer, you can do so with a command: - -* `PFormat` - enable autoformat for buffer (can still be disabled via blacklisting) -* `PFormatOff` - disable autoformat for buffer -* `PFormatToggle` - toggle to enable if disabled, etc. - -You can map a key in your `.vimrc` to toggle Vim's autoformat: - -```vim -noremap :PFormatToggle -inoremap :PFormatToggle -``` - -### Autoformat blacklisting (and whitelisting) - -_The ‘autoformat’ feature affects *HardPencil* (hard line break) mode -only._ - -When editing formatted text, such as a table or code block, Vim’s -autoformat will wreak havoc with the formatting. In these cases you will -want autoformat suspended for the duration of the Insert. - -When entering Insert mode, _pencil_ will determine the highlight group at -the cursor position. If that group has been blacklisted, _pencil_ will -suspend autoformat for the Insert. For example, if editing a buffer of -type ‘markdown’, autoformat will be suspended if you invoke Insert mode -from inside a `markdownFencedCodeBlock` highlight group. - -Blacklists are now declared by file type. The default blacklists (and -whitelists) are declared in the `plugin/pencil.vim` module. Here’s an -excerpt showing the configuration for the ‘markdown’ file type: - -```vim - let g:pencil#autoformat_config = { - \ 'markdown': { - \ 'black': [ - \ 'htmlH[0-9]', - \ 'markdown(Code|H[0-9]|Url|IdDeclaration|Link|Rule|Highlight[A-Za-z0-9]+)', - \ 'markdown(FencedCodeBlock|InlineCode)', - \ 'mkd(Code|Rule|Delimiter|Link|ListItem|IndentCode)', - \ 'mmdTable[A-Za-z0-9]*', - \ ], - \ 'white': [ - \ 'markdown(Code|Link)', - \ ], - \ }, - [snip] - \ } -``` - -The whitelist will override the blacklist and enable Vim’s autoformat if -text that would normally be blacklisted doesn’t dominate the entire line. -This allows autoformat to work with `inline` code and links. - -### Auto-detecting wrap mode - -If you didn't explicitly specify a wrap mode during initialization, -_pencil_ will attempt to detect it. - -It will first look for a `textwidth` (or `tw`) specified in a modeline. -Failing that, _pencil_ will then sample lines from the start of the -buffer. - -#### Detect via modeline - -Will the wrap mode be detected accurately? Maybe. But you can improve its -chances by giving _pencil_ an explicit hint. - -At the bottom of this document is a odd-looking code: - -```html - -``` - -This is an **optional** ‘modeline’ that tells Vim to run the following -command upon loading the file into a buffer: - -```vim -:set textwidth=73 -``` - -It tells _pencil_ to assume hard line breaks, regardless of whether or -not soft line wrap is the default editing mode for buffers of type -‘markdown’. - -You explicitly specify soft wrap mode by specifying a textwidth of `0`: - -```html - -``` - -Note that if the modelines feature is disabled (such as for security -reasons) the textwidth will still be set by this plugin. - -#### Detect via sampling - -If no modeline with a textwidth is found, _pencil_ will sample the -initial lines from the buffer, looking for those excessively-long. - -There are two settings you can add to your `.vimrc` to tweak this behavior. - -The maximum number of lines to sample from the start of the buffer: - -```vim -let g:pencil#softDetectSample = 20 -``` - -Set that value to `0` to disable detection via line sampling. - -When the number of bytes on a sampled line per exceeds this next value, -then _pencil_ assumes soft line wrap. - -```vim -let g:pencil#softDetectThreshold = 130 -``` - -If no such lines found, _pencil_ falls back to the default wrap mode. - -# See also - -* [To Vim][tv] - Writer and psychologist Ian Hocking on using Vim for writing -* [Vim Training Class - Basic motions and commands][tc] - video tutorial by Shawn Biddle -* [Vim for Writers][vw] - guide to the basics geared to writers - -Bloggers and developers discuss _pencil_ and its brethern: - -* [Reed Esau's growing list of Vim plugins for writers][regl] (2014) - by @pengwynn -* [Distraction Free Writing in Vim][dfwiv] (2014) - by @tlattimore -* [Safari Blog: Turning vim into an IDE through vim plugins][tviai] (2014) - by @jameydeorio -* [Quick tops for writing prose with Vim][qtfwp] (2014) - by @benoliver999 -* [UseVim: Reed Esau's Writing Plugins][rewp] (2015) - by @alexyoung -* [Tomasino Labs: Vim in Context][vic] (2015) - by @jamestomasino -* [Writing with Vim][wwv] (2015) - by Pat Ambrosio - -Other plugins of specific interest to writers: - -* [danielbmarques/vim-ditto][vd] - highlight repeated words -* [tpope/vim-abolish][ab] - search for, substitute, and abbr. multiple variants of a word -* [tommcdo/vim-exchange][ex] - easy text exchange operator for Vim -* [junegunn/limelight.vim][jl] - focus mode that brightens current paragraph -* [junegunn/goyo.vim][jg] - distraction-free editing mode - -[vd]: https://github.com/danielbmarques/vim-ditto -[qtfwp]: http://benoliver999.com/technology/2014/12/06/vimforprose/ -[wwv]: https://lilii.co/aardvark/writing-with-vim -[vic]: https://labs.tomasino.org/vim-in-context.html -[rewp]: http://usevim.com/2015/05/27/reedes/ -[tviai]: https://www.safaribooksonline.com/blog/2014/11/23/way-vim-ide/ -[regl]: http://wynnnetherland.com/journal/reed-esau-s-growing-list-of-vim-plugins-for-writers/ -[dfwiv]: http://tlattimore.com/blog/distraction-free-writing-in-vim/ -[ab]: http://github.com/tpope/vim-abolish -[ex]: http://github.com/tommcdo/vim-exchange -[jl]: http://github.com/junegunn/limelight.vim -[jg]: http://github.com/junegunn/goyo.vim - -Markdown syntax plugins - -* [tpope/vim-markdown][tvm] - the latest version of the syntax plugin that ships with Vim -* [plasticboy/vim-markdown][pvm] -* [gabrielelana/vim-markdown][gvm] -* [mattly/vim-markdown-enhancements][mvme] - highlighting for tables and footnotes - -[tvm]: http://github.com/tpope/vim-markdown -[pvm]: http://github.com/plasticboy/vim-markdown -[gvm]: http://github.com/gabrielelana/vim-markdown -[mvme]: http://github.com/mattly/vim-markdown-enhancements - -If you find the _pencil_ plugin useful, check out these others by [@reedes][re]: - -* [vim-colors-pencil][cp] - color scheme for Vim inspired by IA Writer -* [vim-lexical][lx] - building on Vim’s spell-check and thesaurus/dictionary completion -* [vim-litecorrect][lc] - lightweight auto-correction for Vim -* [vim-one][vo] - make use of Vim’s _+clientserver_ capabilities -* [vim-textobj-quote][qu] - extends Vim to support typographic (‘curly’) quotes -* [vim-textobj-sentence][ts] - improving on Vim's native sentence motion command -* [vim-thematic][th] - modify Vim’s appearance to suit your task and environment -* [vim-wheel][wh] - screen-anchored cursor movement for Vim -* [vim-wordy][wo] - uncovering usage problems in writing - -Unimpressed by _pencil_? [vim-pandoc][vp] offers prose-oriented features -with its own Markdown variant. - -[cp]: http://github.com/reedes/vim-colors-pencil -[lc]: http://github.com/reedes/vim-litecorrect -[lx]: http://github.com/reedes/vim-lexical -[qu]: http://github.com/reedes/vim-textobj-quote -[re]: http://github.com/reedes -[tc]: https://www.youtube.com/watch?v=Nim4_f5QUxA -[th]: http://github.com/reedes/vim-thematic -[ts]: http://github.com/reedes/vim-textobj-sentence -[tv]: http://ianhocking.com/2013/11/17/to-vim/ -[vo]: http://github.com/reedes/vim-one -[vw]: http://therandymon.com/woodnotes/vim-for-writers/vimforwriters.html -[wh]: http://github.com/reedes/vim-wheel -[wo]: http://github.com/reedes/vim-wordy -[vp]: http://github.com/vim-pandoc/vim-pandoc - -# Future development - -If you’ve spotted a problem or have an idea on improving _pencil_, please -report it as an issue, or better yet submit a pull request. - -``` - -``` diff --git a/vim/.vim/bundle/pencil/autoload/pencil.vim b/vim/.vim/bundle/pencil/autoload/pencil.vim deleted file mode 100644 index bf5beda..0000000 --- a/vim/.vim/bundle/pencil/autoload/pencil.vim +++ /dev/null @@ -1,514 +0,0 @@ -" ============================================================================ -" File: pencil.vim -" Description: autoload functions for vim-pencil plugin -" Maintainer: Reed Esau -" Created: December 28, 2013 -" License: The MIT License (MIT) -" ============================================================================ -if exists("autoloaded_pencil") | fini | en -let autoloaded_pencil = 1 - -let s:WRAP_MODE_DEFAULT = -1 -let s:WRAP_MODE_OFF = 0 -let s:WRAP_MODE_HARD = 1 -let s:WRAP_MODE_SOFT = 2 - -" Wrap-mode detector -" Scan lines at end and beginning of file to determine the wrap mode. -" Modelines has priority over long lines found. -fun! s:detect_wrap_mode() abort - - let b:max_textwidth = -1 " assume no relevant modeline - call s:doModelines() - - if b:max_textwidth > 0 - " modelines(s) found with positive textwidth, so hard line breaks - return s:WRAP_MODE_HARD - en - - if b:max_textwidth ==# 0 || g:pencil#wrapModeDefault ==# 'soft' - " modeline(s) found only with zero textwidth, so it's soft line wrap - " or, the user wants to default to soft line wrap - return s:WRAP_MODE_SOFT - en - - " attempt to rule out soft line wrap - " scan initial lines in an attempt to detect long lines - for l:line in getline(1, g:pencil#softDetectSample) - if len(l:line) > g:pencil#softDetectThreshold - return s:WRAP_MODE_SOFT - en - endfo - - " punt - return s:WRAP_MODE_DEFAULT -endf - -fun! s:imap(preserve_completion, key, icmd) abort - if a:preserve_completion - exe ":ino " . a:key . " pumvisible() ? \"" . a:key . "\" : \"" . a:icmd . "\"" - el - exe ":ino " . a:key . " " . a:icmd - en -endf - -fun! s:maybe_enable_autoformat() abort - " don't enable autoformat if in a blacklisted code block or table, - " allowing for reprieve via whitelist in certain cases - - " a flag to suspend autoformat for the Insert - if b:pencil_suspend_af - let b:pencil_suspend_af = 0 " clear the flag - return - en - - let l:ft = get(g:pencil#autoformat_aliases, &ft, &ft) - let l:af_cfg = get(g:pencil#autoformat_config, l:ft, {}) - let l:black = get(l:af_cfg, 'black', []) - let l:white = get(l:af_cfg, 'white', []) - let l:has_black_re = len(l:black) > 0 - let l:has_white_re = len(l:white) > 0 - let l:black_re = l:has_black_re ? '\v(' . join( l:black, '|') . ')' : '' - let l:white_re = l:has_white_re ? '\v(' . join( l:white, '|') . ')' : '' - let l:enforce_previous_line = get(l:af_cfg, 'enforce-previous-line', 0) - - let l:okay_to_enable = 1 - let l:line = line('.') - let l:col = col('.') - let l:last_col = col('$') - let l:stack = [] - let l:found_empty = 0 - " at end of line there may be no synstack, so scan back - while l:col > 0 - let l:stack = synstack(l:line, l:col) - if l:stack != [] - break - en - " the last column will always be empty, so ignore it - if l:col < l:last_col - let l:found_empty = 1 - en - let l:col -= 1 - endw - " if needed, scan towards end of line looking for highlight groups - if l:stack == [] - let l:col = col('.') + 1 - while l:col <= l:last_col - let l:stack = synstack(l:line, l:col) - if l:stack != [] - break - en - " the last column will always be empty, so ignore it - if l:col < l:last_col - let l:found_empty = 1 - en - let l:col += 1 - endw - en - " enforce blacklist by scanning for syntax matches - if l:has_black_re - for l:sid in l:stack - if match(synIDattr(l:sid, 'name'), l:black_re) >= 0 - let l:okay_to_enable = 0 - "echohl WarningMsg - "echo 'hit blacklist line=' . l:line . ' col=' . l:col . - " \ ' name=' . synIDattr(l:sid, 'name') - "echohl NONE - break - en - endfo - en - " enforce whitelist by detecting inline `markup` for which we DO want - " autoformat to be enabled (e.g., tpope's markdownCode) - if l:has_white_re && !l:okay_to_enable - " one final check for an empty stack at the start and end of line, - " either of which greenlights a whitelist check - if !l:found_empty - if synstack(l:line, 1) == [] || - \ (l:last_col > 1 && synstack(l:line, l:last_col-1) == []) - let l:found_empty = 1 - en - en - if l:found_empty - for l:sid in l:stack - if match(synIDattr(l:sid, 'name'), l:white_re) >= 0 - let l:okay_to_enable = 1 - break - en - endfo - en - en - " disallow enable if start of previous line is in blacklist, - if l:has_black_re && l:enforce_previous_line && l:okay_to_enable && l:line > 1 - let l:prev_stack = synstack(l:line - 1, 1) - for l:sid in l:prev_stack - if len(l:sid) > 0 && - \ match(synIDattr(l:sid, 'name'), l:black_re) >= 0 - let l:okay_to_enable = 0 - break - en - endfo - en - if l:okay_to_enable - set formatoptions+=a - en -endf - -fun! pencil#setAutoFormat(af) abort - " 1=enable, 0=disable, -1=toggle - if !exists('b:last_autoformat') - let b:last_autoformat = 0 - en - let l:nu_af = a:af ==# -1 ? !b:last_autoformat : a:af - let l:is_hard = - \ exists('b:pencil_wrap_mode') && - \ b:pencil_wrap_mode ==# s:WRAP_MODE_HARD - if l:nu_af && l:is_hard - aug pencil_autoformat - au InsertEnter call s:maybe_enable_autoformat() - au InsertLeave set formatoptions-=a - aug END - el - sil! au! pencil_autoformat * - if l:nu_af && !l:is_hard - echohl WarningMsg - echo "autoformat can only be enabled in hard line break mode" - echohl NONE - return - en - en - let b:last_autoformat = l:nu_af -endf - -" Create mappings for word processing -" args: -" 'wrap': 'detect|off|hard|soft|toggle' -fun! pencil#init(...) abort - let l:args = a:0 ? a:1 : {} - - " flag to suspend autoformat for the next Insert - let b:pencil_suspend_af = 0 - - if !exists('b:pencil_wrap_mode') - let b:pencil_wrap_mode = s:WRAP_MODE_OFF - en - if !exists("b:max_textwidth") - let b:max_textwidth = -1 - en - - " If user explicitly requested wrap_mode thru args, go with that. - let l:wrap_arg = get(l:args, 'wrap', 'detect') - - if (b:pencil_wrap_mode && l:wrap_arg ==# 'toggle') || - \ l:wrap_arg =~# '^\(0\|off\|disable\|false\)$' - let b:pencil_wrap_mode = s:WRAP_MODE_OFF - elsei l:wrap_arg ==# 'hard' - let b:pencil_wrap_mode = s:WRAP_MODE_HARD - elsei l:wrap_arg ==# 'soft' - let b:pencil_wrap_mode = s:WRAP_MODE_SOFT - elsei l:wrap_arg ==# 'default' - let b:pencil_wrap_mode = s:WRAP_MODE_DEFAULT - el - " this can return s:WRAP_MODE_ for soft, hard or default - let b:pencil_wrap_mode = s:detect_wrap_mode() - en - - " translate default(-1) to soft(1) or hard(2) or off(0) - if b:pencil_wrap_mode ==# s:WRAP_MODE_DEFAULT - if g:pencil#wrapModeDefault =~# '^\(0\|off\|disable\|false\)$' - let b:pencil_wrap_mode = s:WRAP_MODE_OFF - elsei g:pencil#wrapModeDefault ==# 'soft' - let b:pencil_wrap_mode = s:WRAP_MODE_SOFT - el - let b:pencil_wrap_mode = s:WRAP_MODE_HARD - en - en - - " autoformat is only used in Hard mode, and then only during - " Insert mode - call pencil#setAutoFormat( - \ b:pencil_wrap_mode ==# s:WRAP_MODE_HARD && - \ get(l:args, 'autoformat', g:pencil#autoformat)) - - if b:pencil_wrap_mode ==# s:WRAP_MODE_HARD - if &modeline ==# 0 && b:max_textwidth > 0 - " Compensate for disabled modeline - exe 'setl textwidth=' . b:max_textwidth - elsei &textwidth ==# 0 - exe 'setl textwidth=' . - \ get(l:args, 'textwidth', g:pencil#textwidth) - el - setl textwidth< - en - setl nowrap - - " flag to suspend autoformat for next Insert - " optional user-defined mapping - if exists('g:pencil#map#suspend_af') && - \ g:pencil#map#suspend_af != '' - exe 'no ' . g:pencil#map#suspend_af . ' :let b:pencil_suspend_af=1' - en - - elsei b:pencil_wrap_mode ==# s:WRAP_MODE_SOFT - setl textwidth=0 - setl wrap - - if has('linebreak') - setl linebreak - " TODO breakat not working yet with n and m-dash - setl breakat-=* " avoid breaking footnote* - setl breakat-=@ " avoid breaking at email addresses - en - - if exists('&colorcolumn') - setl colorcolumn=0 " doesn't align as expected - en - el - setl textwidth< - setl wrap< nowrap< - - if has('linebreak') - setl linebreak< nolinebreak< - setl breakat< - en - - if exists('&colorcolumn') - setl colorcolumn< - en - en - - if ( v:version > 704 || - \ (v:version ==# 704 && has('patch-7.4.338'))) - if b:pencil_wrap_mode ==# s:WRAP_MODE_SOFT - setl breakindent - el - setl breakindent< - en - en - - " global settings - if b:pencil_wrap_mode - set display+=lastline - set backspace=indent,eol,start - if get(l:args, 'joinspaces', g:pencil#joinspaces) - set joinspaces " two spaces after .!? - el - set nojoinspaces " only one space after a .!? (default) - en - en - - " because ve=onemore is relatively rare and could break - " other plugins, restrict its presence to buffer - " Better: restore ve to original setting - if has('virtualedit') - if b:pencil_wrap_mode && get(l:args, 'cursorwrap', g:pencil#cursorwrap) - set whichwrap+=<,>,b,s,h,l,[,] - aug pencil_cursorwrap - au BufEnter set virtualedit+=onemore - au BufLeave set virtualedit-=onemore - aug END - el - sil! au! pencil_cursorwrap * - en - en - - " Because syntax for fenced code blocks will mess with the - " definition of a word (via iskeyword) we'll impose a prose- - " oriented definition. - " e.g., let g:markdown_fenced_languages = ['sh',] " adds '.' - " - " Support $20 30% D&D #40 highest-rated O'Toole Mary's - " TODO how to separate quote from apostrophe use? - if b:pencil_wrap_mode - aug pencil_iskeyword - au BufEnter setl isk& | setl isk-=_ | setl isk+=$,%,&,#,-,',+ - aug END - el - sil! au! pencil_iskeyword * - en - - " window/buffer settings - if b:pencil_wrap_mode - setl nolist - setl wrapmargin=0 - setl autoindent " needed by formatoptions=n - setl indentexpr= - if has('smartindent') - setl nosmartindent " avoid c-style indents in prose - en - if has('cindent') - setl nocindent " avoid c-style indents in prose - en - - setl formatoptions+=n " recognize numbered lists - setl formatoptions+=1 " don't break line before 1 letter word - setl formatoptions+=t " autoformat of text (vim default) - "setl formatoptions+=2 " preserve indent based on 2nd line for rest of paragraph - - " clean out stuff we likely don't want - setl formatoptions-=v " only break line at blank entered during insert - setl formatoptions-=w " avoid erratic behavior if mixed spaces - setl formatoptions-=a " autoformat will turn on with Insert in HardPencil mode - setl formatoptions-=2 " doesn't work with with fo+=n, says docs - - " plasticboy/vim-markdown sets these to handle bullet points - " as comments. Not changing for now. - "setl formatoptions-=o " don't insert comment leader - "setl formatoptions-=c " no autoformat of comments - "setl formatoptions+=r " don't insert comment leader - - if has('conceal') && v:version >= 703 - exe ':setl conceallevel=' . - \ get(l:args, 'conceallevel', g:pencil#conceallevel) - exe ':setl concealcursor=' . - \ get(l:args, 'concealcursor', g:pencil#concealcursor) - en - el - if has('smartindent') - setl smartindent< nosmartindent< - en - if has('cindent') - setl cindent< nocindent< - en - if has('conceal') - setl conceallevel< - setl concealcursor< - en - - setl indentexpr< - setl autoindent< noautoindent< - setl list< nolist< - setl wrapmargin< - setl formatoptions< - en - - if b:pencil_wrap_mode ==# s:WRAP_MODE_SOFT - nn $ g$ - nn 0 g0 - vn $ g$ - vn 0 g0 - no g - no g - - " preserve behavior of home/end keys in popups - call s:imap(1, '', 'g') - call s:imap(1, '' , 'g' ) - el - sil! nun $ - sil! nun 0 - sil! vu $ - sil! vu 0 - sil! nun - sil! nun - sil! iu - sil! iu - en - - if b:pencil_wrap_mode - nn j gj - nn k gk - vn j gj - vn k gk - no gk - no gj - - " preserve behavior of up/down keys in popups - call s:imap(1, '' , 'g' ) - call s:imap(1, '', 'g') - el - sil! nun j - sil! nun k - sil! vu j - sil! vu k - sil! unm - sil! unm - - sil! iu - sil! iu - en - - " set undo points around common punctuation, - " line and word deletions - if b:pencil_wrap_mode - ino . .u - ino ! !u - ino ? ?u - ino , ,u - ino ; ;u - ino : :u - ino u - ino u - - " map only if not already mapped - if empty(maparg('', 'i')) - ino u - let b:pencil_cr_mapped = 1 - el - let b:pencil_cr_mapped = 0 - en - el - sil! iu . - sil! iu ! - sil! iu ? - sil! iu , - sil! iu ; - sil! iu : - sil! iu - sil! iu - - " unmap only if we mapped it ourselves - if exists('b:pencil_cr_mapped') && b:pencil_cr_mapped - sil! iu - en - en -endf - -" attempt to find a non-zero textwidth, etc. -fun! s:doOne(item) abort - let l:matches = matchlist(a:item, '^\([a-z]\+\)=\([a-zA-Z0-9_\-.]\+\)$') - if len(l:matches) > 1 - if l:matches[1] =~ 'textwidth\|tw' - let l:tw = str2nr(l:matches[2]) - if l:tw > b:max_textwidth - let b:max_textwidth = l:tw - en - en - en -endf - -" attempt to find a non-zero textwidth, etc. -fun! s:doModeline(line) abort - let l:matches = matchlist(a:line, '\%(\S\@=]\?\)\([0-9]\+\)\?\)\|\sex\):\s*\%(set\s\+\)\?\([^:]\+\):\S\@!') - if len(l:matches) > 0 - for l:item in split(l:matches[3]) - call s:doOne(l:item) - endfo - en - let l:matches = matchlist(a:line, '\%(\S\@=]\?\)\([0-9]\+\)\?\)\|\sex\):\(.\+\)') - if len(l:matches) > 0 - for l:item in split(l:matches[3], '[ \t:]') - call s:doOne(l:item) - endfo - en -endf - -" sample lines for detection, capturing both -" modeline(s) and max line length -" Hat tip to https://github.com/ciaranm/securemodelines -fun! s:doModelines() abort - if line("$") > &modelines - let l:lines={ } - call map(filter(getline(1, &modelines) + - \ getline(line("$") - &modelines, "$"), - \ 'v:val =~ ":"'), 'extend(l:lines, { v:val : 0 } )') - for l:line in keys(l:lines) - call s:doModeline(l:line) - endfo - el - for l:line in getline(1, "$") - call s:doModeline(l:line) - endfo - en -endf - -" vim:ts=2:sw=2:sts=2 diff --git a/vim/.vim/bundle/pencil/plugin/pencil.vim b/vim/.vim/bundle/pencil/plugin/pencil.vim deleted file mode 100644 index d157214..0000000 --- a/vim/.vim/bundle/pencil/plugin/pencil.vim +++ /dev/null @@ -1,198 +0,0 @@ -" ============================================================================ -" File: pencil.vim -" Description: vim-pencil plugin -" Maintainer: Reed Esau -" Created: December 28, 2013 -" License: The MIT License (MIT) -" ============================================================================ -" -if exists('g:loaded_pencil') || &cp | fini | en -let g:loaded_pencil = 1 - -" Save 'cpoptions' and set Vim default to enable line continuations. -let s:save_cpo = &cpo -set cpo&vim - -let s:WRAP_MODE_DEFAULT = -1 -let s:WRAP_MODE_OFF = 0 -let s:WRAP_MODE_HARD = 1 -let s:WRAP_MODE_SOFT = 2 - -fun! s:unicode_enabled() - retu &encoding ==# 'utf-8' -endf - -" helper for statusline -" -" Note that it shouldn't be dependent on init(), which -" won't have been called for non-prose modules. -fun! PencilMode() - if exists('b:pencil_wrap_mode') - if b:pencil_wrap_mode ==# s:WRAP_MODE_SOFT - return get(g:pencil#mode_indicators, 'soft', 'S') - elsei b:pencil_wrap_mode ==# s:WRAP_MODE_HARD - if &fo =~ 'a' - return get(g:pencil#mode_indicators, 'auto', 'A') - el - return get(g:pencil#mode_indicators, 'hard', 'H') - en - el - return get(g:pencil#mode_indicators, 'off', '') - en - else - return '' " should be blank for non-prose modes - en -endf - -if !exists('g:pencil#wrapModeDefault') - " user-overridable default, if detection fails - " should be 'soft' or 'hard' or 'off' - let g:pencil#wrapModeDefault = 'hard' -en - -if !exists('g:pencil#textwidth') - " textwidth used when in hard linebreak mode - let g:pencil#textwidth = 74 -en - -if !exists('g:pencil#autoformat') - " by default, automatically format text when in Insert mode - " with hard wrap. - let g:pencil#autoformat = 1 -en - -if !exists('g:pencil#autoformat_config') - " Do not activate autoformat if entering Insert mode when - " the cursor is inside any of the following syntax groups. - " - " markdown* (tpope/vim-markdown) - " mkd*, htmlH[0-9] (plasticboy/vim-markdown) - " markdownFencedCodeBlock, markdownInlineCode, markdownRule, markdownH[0-9] (gabrielelana/vim-markdown) - " mmdTable[A-Za-z0-9]* (mattly/vim-markdown-enhancements) - " txtCode (timcharper/textile.vim) - " rst*,tex*,asciidoc* (syntax file shipped with vim) - let g:pencil#autoformat_config = { - \ 'markdown': { - \ 'black': [ - \ 'htmlH[0-9]', - \ 'markdown(Code|H[0-9]|Url|IdDeclaration|Link|Rule|Highlight[A-Za-z0-9]+)', - \ 'markdown(FencedCodeBlock|InlineCode)', - \ 'mkd(Code|Rule|Delimiter|Link|ListItem|IndentCode)', - \ 'mmdTable[A-Za-z0-9]*', - \ ], - \ 'white': [ - \ 'markdown(Code|Link)', - \ ], - \ }, - \ 'asciidoc': { - \ 'black': [ - \ 'asciidoc(AttributeList|AttributeEntry|ListLabel|Literal|SideBar|Source|Sect[0-9])', - \ 'asciidoc[A-Za-z]*(Block|Macro|Title)', - \ ], - \ 'white': [ - \ 'asciidoc(AttributeRef|Macro)', - \ ], - \ 'enforce-previous-line': 1, - \ }, - \ 'rst': { - \ 'black': [ - \ 'rst(CodeBlock|Directive|LiteralBlock|Sections)', - \ ], - \ }, - \ 'tex': { - \ 'black': [ - \ 'tex(BeginEndName|Delimiter|DocType|InputFile|Math|RefZone|Statement|Title)', - \ 'texSection$', - \ ], - \ 'enforce-previous-line': 1, - \ }, - \ 'textile': { - \ 'black': [ - \ 'txtCode', - \ ], - \ }, - \ } -en -if !exists('g:pencil#autoformat_aliases') - " Aliases used exclusively for autoformat config. - " Pencil will NOT modify the filetype setting. - let g:pencil#autoformat_aliases = { - \ 'md': 'markdown', - \ 'mkd': 'markdown', - \ } -en - -if !exists('g:pencil#joinspaces') - " by default, only one space after full stop (.) - let g:pencil#joinspaces = 0 -en - -if !exists('g:pencil#cursorwrap') - " by default, h/l and cursor keys will wrap around hard - " linebreaks. Set to 0 if you don't want this behavior - let g:pencil#cursorwrap = 1 -en - -if !exists('g:pencil#conceallevel') - " by default, concealing capability in your syntax plugin - " will be enabled. See tpope/vim-markdown for example. - " 0=disable, 1=onechar, 2=hidecust, 3=hideall - let g:pencil#conceallevel = 3 -en -if !exists('g:pencil#concealcursor') - " n=normal, v=visual, i=insert, c=command - let g:pencil#concealcursor = 'c' -en - -if !exists('g:pencil#softDetectSample') - " if no modeline, read as many as this many lines at - " start of file in attempt to detect at least one line - " whose byte count exceeds g:pencil#softDetectThreshold - let g:pencil#softDetectSample = 20 -en - -if !exists('g:pencil#softDetectThreshold') - " if the byte count of at least one sampled line exceeds - " this number, then pencil assumes soft line wrapping - let g:pencil#softDetectThreshold = 130 -en - -if !exists('g:pencil#mode_indicators') - " used to set PencilMode() for statusline - if s:unicode_enabled() - let g:pencil#mode_indicators = {'hard': '␍', 'auto': 'ª', 'soft': '⤸', 'off': '',} - el - let g:pencil#mode_indicators = {'hard': 'H', 'auto': 'A', 'soft': 'S', 'off': '',} - en -en - -" Commands - -com -nargs=0 Pencil call pencil#init({'wrap': 'on' }) -com -nargs=0 PencilOff call pencil#init({'wrap': 'off' }) -com -nargs=0 NoPencil call pencil#init({'wrap': 'off' }) -com -nargs=0 HardPencil call pencil#init({'wrap': 'hard'}) -com -nargs=0 PencilHard call pencil#init({'wrap': 'hard'}) -com -nargs=0 SoftPencil call pencil#init({'wrap': 'soft'}) -com -nargs=0 PencilSoft call pencil#init({'wrap': 'soft'}) -com -nargs=0 PencilToggle call pencil#init({'wrap': 'toggle'}) -com -nargs=0 TogglePencil call pencil#init({'wrap': 'toggle'}) -com -nargs=0 PFormat call pencil#setAutoFormat(1) -com -nargs=0 PFormatOff call pencil#setAutoFormat(0) -com -nargs=0 PFormatToggle call pencil#setAutoFormat(-1) - -" NOTE: legacy commands have been disabled by default as of 31-Dec-15 -if !exists('g:pencil#legacyCommands') - let g:pencil#legacyCommands = 0 -en -if g:pencil#legacyCommands - com -nargs=0 DropPencil call pencil#init({'wrap': 'off' }) - com -nargs=0 AutoPencil call pencil#setAutoFormat(1) - com -nargs=0 ManualPencil call pencil#setAutoFormat(0) - com -nargs=0 ShiftPencil call pencil#setAutoFormat(-1) -en - -let &cpo = s:save_cpo -unlet s:save_cpo - -" vim:ts=2:sw=2:sts=2 diff --git a/vim/.vim/bundle/pencil/screenshots/demo.gif b/vim/.vim/bundle/pencil/screenshots/demo.gif deleted file mode 100644 index d9977d8..0000000 Binary files a/vim/.vim/bundle/pencil/screenshots/demo.gif and /dev/null differ diff --git a/vim/.vim/bundle/pencil/screenshots/demo.txt b/vim/.vim/bundle/pencil/screenshots/demo.txt deleted file mode 100644 index 092dfc7..0000000 --- a/vim/.vim/bundle/pencil/screenshots/demo.txt +++ /dev/null @@ -1,7 +0,0 @@ - -Captured with Quicktime. - -Processed with: - -$ ffmpeg -i four.mov -s 700x242 -pix_fmt rgb24 -vf "lutyuv=y=val*1.3" -r 10 -f gif - | \ - gifsicle --optimize=3 --delay=3 > out.gif