# vim-textobj-sentence
**Repository Path**: spf13_vim/vim-textobj-sentence
## Basic Information
- **Project Name**: vim-textobj-sentence
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2018-11-25
- **Last Updated**: 2024-06-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# vim-textobj-sentence
> Improving on Vim's native sentence text object and motion
Detecting sentences can be tricky, esp. when the words and punctuation of
a sentence are interspersed with abbreviations, “quotations,”
(parentheses), [brackets], the \_\_markup\_\_ from \*\*lightweight\*\*
markup languages, and hard
line
breaks.
While Vim’s native sentence text object is quite capable, its behavior
remains hard-coded and cannot be extended. Thus arises the need for
a specialized text object offered by this plugin.
Features of this plugin:
* Sophisticated sentence text object, supporting selection, motion, and jump
* Implemented with regular expressions via the [vim-textobj-user][vt] plugin
* Supports sentences containing common abbreviations (configurable)
* Support for sentences containing typographical characters, incl. quotes, em dash, etc.
* Support for lightweight markup languages (markdown, e.g.)
* Buffer scoped configuration
## Requirements
May require a recent version of Vim.
## Installation
Install using Pathogen, Vundle, Neobundle, or your favorite Vim package
manager.
This plugin has an essential dependency that you will need to install:
* [kana/vim-textobject-user][vt] - a Vim plugin to create your own text objects without pain
[vt]: https://github.com/kana/vim-textobj-user
## Configuration
Because prose benefits more than code from a sentence text object, the
behavior of this plugin can be configured per file type. For example, to
enable sentence in `markdown` and `textile` files, place in your
`.vimrc`:
```vim
set nocompatible " this may already be in your .vimrc
filetype plugin indent on " ...and this too
augroup textobj_sentence
autocmd!
autocmd FileType markdown call textobj#sentence#init()
autocmd FileType textile call textobj#sentence#init()
augroup END
```
### Decimal numbers and abbreviations
Though the period `.` glyph/character will normally terminate a sentence,
it also has other uses. For example, the same glyph is used in
abbreviations like ‘M.D.’ for Medical Doctor. These abbreviations, however,
should be tolerated when detecting the boundaries of a sentence. The
following should be considered one text object, rather than four:
```
Magnum, P.I. lives at Robin’s Nest, located at 11435 18th Ave., Oahu, HI.
```
This plugin detects decimal numbers and common abbreviations. By default,
the following abbreviations will be recognized:
```
let g:textobj#sentence#abbreviations = [
\ '[ABCDIMPSUabcdegimpsv]',
\ 'l[ab]', '[eRr]d', 'Ph', '[Ccp]l', '[Lli]n', '[cn]o',
\ '[Oe]p', '[DJMSh]r', '[MVv]s', '[CFMPScfpw]t',
\ 'alt', '[Ee]tc', 'div', 'es[pt]', '[Ll]td', 'min',
\ '[MD]rs', '[Aa]pt', '[Aa]ve?', '[Ss]tr?',
\ '[Aa]ssn', '[Bb]lvd', '[Dd]ept', 'incl', 'Inst', 'Prof', 'Univ',
\ ]
```
Note that you can override/modify the above defaults in your `.vimrc`, but
be sure to include the declaration before your call to
`textobj#sentence#init()`.
### Motion commands
Motion commands on text objects are a powerful feature of Vim.
This plugin overrides Vim’s native commands for sentence selection:
* `as` - select ‘_around_’ sentence with trailing whitespace
* `is` - select ‘_inside_’ sentence without trailing whitespace
* `(` - move to start of previous sentence
* `)` - move to start of next sentence
This plugin adds:
* `g)` - jump to end of current sentence
* `g(` - jump to end of previous sentence
You can manipulate text just as with Vim’s original `as` and `is`
commands, such as `cis` for change, `vas` for visual selection, `das` for
deletion, `yas` for yanking to clipboard, etc.. Note that count isn’t
supported at present (due to limitations of the underlying
vim-textobj-user) but repeat with `.` does work.
If you prefer to retain the native commands, you can assign other
key mappings via your `.vimrc`:
```vim
let g:textobj#sentence#select = 's'
let g:textobj#sentence#move_p = '('
let g:textobj#sentence#move_n = ')'
```
## See also
If you find this 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-pencil][pn] - rethinking Vim as a tool for writers
* [vim-textobj-quote][qu] - extends Vim to support typographic (‘curly’) quotes
* [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
[cp]: http://github.com/reedes/vim-colors-pencil
[lc]: http://github.com/reedes/vim-litecorrect
[lx]: http://github.com/reedes/vim-lexical
[vo]: http://github.com/reedes/vim-one
[pn]: http://github.com/reedes/vim-pencil
[qu]: http://github.com/reedes/vim-textobj-quote
[re]: http://github.com/reedes
[th]: http://github.com/reedes/vim-thematic
[wh]: http://github.com/reedes/vim-wheel
[wo]: http://github.com/reedes/vim-wordy
## Future development
If you’ve spotted a problem or have an idea on improving this plugin,
please post it to the github project issue page. Pull requests that add
new regression tests (even failing ones that demonstrate a bug!) are
welcome too.