Ⅰ. 插件描述
Vim plugin: Create your own text objectsⅡ. 基本信息
|
Ⅲ. 安装方法
使用Vundle管理器安装
在你的.vimrc下添加:Plugin 'kana/textobj-user'
… 然后在Vim中运行以下命令:
:source %
:PluginInstall
对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。
使用NeoBundle管理器安装
在你的.vimrc下添加:NeoBundle 'kana/textobj-user'
… 然后在Vim中运行以下命令:
:source %
:NeoBundleInstall
使用VimPlug管理器安装
在你的.vimrc下添加:Plug 'kana/textobj-user'
… 然后在Vim中运行以下命令:
:source %
:PlugInstall
使用Pathogen管理器安装
在终端中运行以下命令:cd ~/.vim/bundle
git clone https://github.com/kana/vim-textobj-user
Ⅳ. 文档说明
# vim-textobj-user - Create your own text objects
vim-textobj-user is a Vim plugin to create your own text objects without pain.
It is hard to create text objects, because there are many pitfalls to deal
- This plugin hides such details and provides a declarative way to define
- You can use regular expressions to define simple text objects,
or use functions to define complex ones.
Examples
Simple text objects defined by a pattern
Define ad
/id
to select a date such as 2013-03-16
, and
define at
/it
to select a time such as 22:04:21
:
call textobj#user#plugin('datetime', {
\ 'date': {
\ 'pattern': '\<\d\d\d\d-\d\d-\d\d\>',
\ 'select': ['ad', 'id'],
\ },
\ 'time': {
\ 'pattern': '\<\d\d:\d\d:\d\d\>',
\ 'select': ['at', 'it'],
\ },
\ })
Simple text objects surrounded by a pair of patterns
Define aA
to select text from <<
to the matching >>
, and
define iA
to select text inside <<
and >>
:
call textobj#user#plugin('braces', {
\ 'angle': {
\ 'pattern': ['<<', '>>'],
\ 'select-a': 'aA',
\ 'select-i': 'iA',
\ },
\ })
Complex text objects defined by functions
Define al
to select the current line, and
define il
to select the current line without indentation:
call textobj#user#plugin('line', {
\ '-': {
\ 'select-a-function': 'CurrentLineA',
\ 'select-a': 'al',
\ 'select-i-function': 'CurrentLineI',
\ 'select-i': 'il',
\ },
\ })
function! CurrentLineA()
normal! 0
let head_pos = getpos('.')
normal! $
let tail_pos = getpos('.')
return ['v', head_pos, tail_pos]
endfunction
function! CurrentLineI()
normal! ^
let head_pos = getpos('.')
normal! g_
let tail_pos = getpos('.')
let non_blank_char_exists_p = getline('.')[head_pos[2] - 1] !~# '\s'
return
\ non_blank_char_exists_p
\ ? ['v', head_pos, tail_pos]
\ : 0
endfunction
Text objects for a specific filetype
Define a(
to select text from \left(
to the matching \right)
, and
define i(
to select text inside \left(
to the matching \right)
,
but only for tex files:
call textobj#user#plugin('tex', {
\ 'paren-math': {
\ 'pattern': ['\\left(', '\\right)'],
\ 'select-a': [],
\ 'select-i': [],
\ },
\ })
augroup tex_textobjs
autocmd!
autocmd FileType tex call textobj#user#map('tex', {
\ 'paren-math': {
\ 'select-a': '<buffer> a(',
\ 'select-i': '<buffer> i(',
\ },
\ })
augroup END
Further reading
You can define your own text objects like the above examples. See also
the reference manual
for more details.
There are many text objects written with vim-textobj-user.
If you want to find useful ones, or to know how they are implemented,
see [a list of text objects implemented with
vim-textobj-user](https://github.com/kana/vim-textobj-user/wiki).
<!-- vim: set expandtab shiftwidth=4 softtabstop=4 textwidth=78 : -->