All Projects → preservim → vim-textobj-quote

preservim / vim-textobj-quote

Licence: other
Use ‘curly’ quote characters in Vim

Programming Languages

Vim Script
2826 projects
shell
77523 projects

Projects that are alternatives of or similar to vim-textobj-quote

vim-textobj-sentence
Improving on Vim's native sentence text object and motion
Stars: ✭ 92 (-17.86%)
Mutual labels:  vim-plugin, writing, prose, vim-textobj-user
vim-colors-pencil
Light (& dark) color scheme inspired by iA Writer
Stars: ✭ 564 (+403.57%)
Mutual labels:  vim-plugin, writing, prose
vim-wordy
Uncover usage problems in your writing
Stars: ✭ 677 (+504.46%)
Mutual labels:  vim-plugin, writing, prose
Vim Colors Pencil
Light (& dark) color scheme inspired by iA Writer
Stars: ✭ 498 (+344.64%)
Mutual labels:  vim-plugin, writing
Vim Pencil
Rethinking Vim as a tool for writing
Stars: ✭ 1,186 (+958.93%)
Mutual labels:  vim-plugin, writing
Vim Lexical
Build on Vim’s spell/thes/dict completion
Stars: ✭ 223 (+99.11%)
Mutual labels:  vim-plugin, writing
Vim Wordy
Uncover usage problems in your writing
Stars: ✭ 645 (+475.89%)
Mutual labels:  vim-plugin, writing
Vim Litecorrect
Lightweight auto-correction for Vim
Stars: ✭ 77 (-31.25%)
Mutual labels:  vim-plugin, writing
Nova Vim
Nova color scheme plugin for Vim
Stars: ✭ 211 (+88.39%)
Mutual labels:  vim-plugin
Vim Lsp Cxx Highlight
Vim plugin for C/C++/ObjC semantic highlighting using cquery, ccls, or clangd
Stars: ✭ 231 (+106.25%)
Mutual labels:  vim-plugin
8cc.vim
C Compiler written in Vim script
Stars: ✭ 205 (+83.04%)
Mutual labels:  vim-plugin
Lightline Ale
ALE indicator for the lightline vim plugin
Stars: ✭ 217 (+93.75%)
Mutual labels:  vim-plugin
Vim Vsnip
Snippet plugin for vim/nvim that supports LSP/VSCode's snippet format.
Stars: ✭ 224 (+100%)
Mutual labels:  vim-plugin
Validator.vim
Check syntax on the fly asynchronously.
Stars: ✭ 210 (+87.5%)
Mutual labels:  vim-plugin
Vim Ledger
Vim plugin for Ledger
Stars: ✭ 253 (+125.89%)
Mutual labels:  vim-plugin
Vim Thematic
Alter Vim's appearance to suit your task & environ
Stars: ✭ 204 (+82.14%)
Mutual labels:  vim-plugin
Kronos.vim
A simple task and time manager. Project moved here:
Stars: ✭ 205 (+83.04%)
Mutual labels:  vim-plugin
Nerdtree
A tree explorer plugin for vim.
Stars: ✭ 16,380 (+14525%)
Mutual labels:  vim-plugin
Lusty
LustyExplorer / LustyJuggler for Vim
Stars: ✭ 246 (+119.64%)
Mutual labels:  vim-plugin
Pathfinder.vim
Vim plugin to suggest better movements
Stars: ✭ 228 (+103.57%)
Mutual labels:  vim-plugin

vim-textobj-quote

Vader Vint

“Extending Vim to better support typographic (‘curly’) quote characters.”

While Vim is renowned for its text manipulation capabilities, it nevertheless retains a bias towards ASCII that stretches back to its vi roots on Unix. This can limit Vim’s appeal for those who prefer typographic characters like “curly quotes” over ASCII "straight quotes" in the prose and documentation they write.

Core features of this plugin:

Includes four additional features:

  • educate - automatic entry of ‘typographic quotes’ from the 'straight quote' keys
  • replace - transform quotes from straight to typographic, and vice versa
  • matchit - % matching for typographic quote pairs
  • surround - surround a word or visual selection with quotes

Requirements

Requires a recent version of Vim compiled with Unicode support.

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 you won't want typographic quotes in your code, the behavior of this plugin can be configured per file type. For example, to enable typographic quote support in markdown and textile files, place in your .vimrc:

set nocompatible
filetype plugin on       " may already be in your .vimrc

augroup textobj_quote
  autocmd!
  autocmd FileType markdown call textobj#quote#init()
  autocmd FileType textile call textobj#quote#init()
  autocmd FileType text call textobj#quote#init({'educate': 0})
augroup END

The last autocmd statement initializes the plugin for buffers of text file type, but disables the ‘educate’ feature by default. More on that below.

Motion commands

Motion commands on text objects are a powerful feature of Vim.

By default, for motion commands, q denotes an operation on “double” quotes. Q for ‘single’ quotes. For example, with the c change operator:

  • caq - change around “double” quotes - includes quote chars
  • ciq - change inside “double” quotes - excludes quote chars
  • caQ - change around ‘single’ quotes - includes quote chars
  • ciQ - change inside ‘single’ quotes - excludes quote chars

Apart from c for change, you can v for visual selection, d for deletion, y 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 . should work.

quote’s motion command is smart too, able to distinguish between an apostrophe and single closing quote, even though both are represented by the same glyph. For example, try out viQ on the following sentence:

‘Really, I’d rather not relive the ’70s,’ said zombie Elvis.

You can change these key mappings from their defaults in your .vimrc:

let g:textobj#quote#doubleMotion = 'q'
let g:textobj#quote#singleMotion = 'Q'

Additional features

The four additional features of this plugin include: educate, matchit, replace, and surround.

Educate

This plugin will ‘educate’ quotes, meaning that while in Insert mode, your straight quote key presses (" or ') will be dynamically transformed into the appropriate typographic quote characters.

For example, entering the following sentence without the educate feature using the straight quote keys:

"It's Dr. Evil. I didn't spend six years in Evil Medical
School to be called 'mister,' thank you very much."

As expected all the quotes are straight ones. But with the educate feature, the straight quotes are transformed into the typographic equivalent as you type:

“It’s Dr. Evil. I didn’t spend six years in Evil Medical
School to be called ‘mister,’ thank you very much.”

You can configure the default settings for the educate feature in your .vimrc:

let g:textobj#quote#educate = 1       " 0=disable, 1=enable (def)

You can change educating behavior with the following commands:

  • Educate
  • NoEducate
  • ToggleEducate

As seen above, educating behavior can be configured as a parameter in the textobj#quote#init() call.

Entering straight quotes

In some cases, straight (ASCII) quotes are needed, such as:

“print "Hello World!"” is a simple program you can write in Python.

To insert a straight quote while educating, enter «Ctrl-V» (mnemonic is verbatim) before the quote key:

  • «Ctrl-V» " - straight double quote
  • «Ctrl-V» ' - straight single quote

Note that for units of measurement you’ll want to use the prime symbol(s) rather than straight quotes, as in:

Standing at 7′3″ (2.21 m), Hasheem Thabeet of the Oklahoma City Thunder
is the tallest player in the NBA.

Matchit support

matchit enables jumping to matching typographic quotes.

  • % - jump to the matching typographic (curly) quote character

You can configure this feature in your .vimrc:

let g:textobj#quote#matchit = 1       " 0=disable, 1=enable (def)

Replace support

You can replace straight quotes in existing text with curly quotes, and visa versa. Add key mappings of your choice to your .vimrc:

map <silent> <leader>qc <Plug>ReplaceWithCurly
map <silent> <leader>qs <Plug>ReplaceWithStraight

Both Normal and Visual modes are supported by this feature. (In Normal mode, quotes in the current paragraph are replaced.)

To transform all quotes in a document, use Visual mode to select the entire document.

Surround support

By default there are no key mappings for surround support.

Basic support

This feature supports basic surround capabilities. Add to your .vimrc key mappings of your choice:

" NOTE: remove these mappings if using the tpope/vim-surround plugin!
map <silent> Sq <Plug>SurroundWithDouble
map <silent> SQ <Plug>SurroundWithSingle

Then you can use ‘motion commands’ to surround text with quotes:

(an asterisk is used to denote the cursor position)

  • visSq - My senten*ce. => “My sentence.”
  • visSQ - My senten*ce. => ‘My sentence.’

Using Tim Pope’s vim-surround

Using Tim Pope’s vim-surround plugin your text object key mappings should be available. For example,

  • cs'q - 'Hello W*orld' => “Hello World”
  • cs"q - "Hello W*orld" => “Hello World”
  • cs(q - (Hello W*orld) => “Hello World”
  • cs(Q - (Hello W*orld) => ‘Hello World’

Entering special characters

Sometimes you must enter special characters (like typographic quotes) manually, such as in a search expression. You can do so through Vim’s digraphs or via your operating system’s keyboard shortcuts.

Glyph Vim Digraph OS X Description
'6 Opt-] left single quotation mark
'9 Shift-Opt-] right single quotation mark
"6 Opt-[ left double quotation mark
"9 Shift-Opt-[ right double quotation mark
.9 single low-9 quote
:9 Shift-Opt-w double low-9 quote
1< Opt-\ left pointing single quotation mark
1> Shift-Opt-\ right pointing single quotation mark
« << Opt-\ left pointing double quotation mark
» >> Shift-Opt-\ right pointing double quotation mark
1' single prime
2' double prime
-N Opt-hyphen en dash
-M Shift-Opt-hyphen em dash
,. Opt-; horizontal ellipsis
  NS non-breaking space
ï i: Opt-U i lowercase i, umlaut
æ ae Opt-' lowercase ae

For example, to enter left double quotation mark , precede the digraph code "6 with Ctrl-K, like

  • «Ctrl-K» "6

Alternatively, if you’re on OS X, you can use Opt-[ to enter this character.

For more details, see:

  • :help digraphs

International support

Many international keyboards feature keys to allow you to input typographic quote characters directly. In such cases, you won’t need to change the behavior of the straight quote keys.

But if you do, you can override the defaults. For example, those users editing most of their prose in German could change those defaults to:

let g:textobj#quote#doubleDefault = '„“'     " „doppel“
let g:textobj#quote#singleDefault = '‚‘'     " ‚einzel‘

Or on a file type initialization...

augroup textobj_quote
  autocmd!
  autocmd FileType markdown call textobj#quote#init({ 'double':'„“', 'single':'‚‘' })
  ...
augroup END

Or in a key mapping...

nnoremap <silent> <leader>qd :call textobj#quote#init({ 'double':'„“', 'single':'‚‘' })<cr>

See also

If you find this plugin useful, check out these others originally by @reedes:

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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].