vim-textobj-sentence


Ⅰ. 插件描述

Improving on Vim's native sentence text object and motion

Ⅱ. 基本信息

创建日期:  2014-01-27
使用用户:  219
Github星:  65
插件作者:  Reed Es

Ⅲ. 安装方法

使用Vundle管理器安装

在你的.vimrc下添加:
Plugin 'reedes/vim-textobj-sentence'
… 然后在Vim中运行以下命令:
:source %
:PluginInstall

对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。

使用NeoBundle管理器安装

在你的.vimrc下添加:
NeoBundle 'reedes/vim-textobj-sentence'
… 然后在Vim中运行以下命令:
:source %
:NeoBundleInstall

使用VimPlug管理器安装

在你的.vimrc下添加:
Plug 'reedes/vim-textobj-sentence'
… 然后在Vim中运行以下命令:
:source %
:PlugInstall

使用Pathogen管理器安装

在终端中运行以下命令:
cd ~/.vim/bundle
git clone https://github.com/reedes/vim-textobj-sentence

Ⅳ. 文档说明

# 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 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:

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:

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:

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:

  • vim-colors-pencil - color scheme for Vim inspired by IA Writer
  • vim-lexical - building on Vim’s spell-check and thesaurus/dictionary completion
  • vim-litecorrect - lightweight auto-correction for Vim
  • vim-one - make use of Vim’s +clientserver capabilities
  • vim-pencil - rethinking Vim as a tool for writers
  • vim-textobj-quote - extends Vim to support typographic (‘curly’) quotes
  • vim-thematic - modify Vim’s appearance to suit your task and environment
  • vim-wheel - screen-anchored cursor movement for Vim
  • vim-wordy - uncovering usage problems in writing
  • vim-wordchipper - power tool for shredding text in Insert mode

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.

<!-- vim: set tw=74 :-->

添加新评论