All Projects β†’ dkarter β†’ Bullets.vim

dkarter / Bullets.vim

Licence: other
πŸ”« Bullets.vim is a Vim/NeoVim plugin for automated bullet lists.

Projects that are alternatives of or similar to Bullets.vim

Hot Reload.vim
A (Neo)vim plugin for Flutter to automatically hot reload the project every time a file is saved
Stars: ✭ 33 (-83.42%)
Mutual labels:  neovim, vim-plugins
Kulfon
πŸ‘Ή 🐸 JavaScript static site generator with Org Mode & Markdown support (Ξ±) πŸ’₯
Stars: ✭ 112 (-43.72%)
Mutual labels:  markdown, org-mode
Awesome Handbooks
A curated list of awesome company handbooks
Stars: ✭ 51 (-74.37%)
Mutual labels:  markdown, lists
Context.vim
Vim plugin that shows the context of the currently visible buffer contents
Stars: ✭ 688 (+245.73%)
Mutual labels:  neovim, vim-plugins
Awesome Scientific Writing
⌨️ A curated list of awesome tools, demos and resources to go beyond LaTeX
Stars: ✭ 162 (-18.59%)
Mutual labels:  markdown, org-mode
Markdown Preview.vim
⚠️ PLEASE USE https://github.com/iamcco/markdown-preview.nvim INSTEAD
Stars: ✭ 764 (+283.92%)
Mutual labels:  markdown, neovim
Vim Follow My Lead
Vim plugin for showing all your <Leader> mappings in a readable table including the descriptions.
Stars: ✭ 100 (-49.75%)
Mutual labels:  neovim, vim-plugins
Evervim
A Modern, Powerful & Modular Vim Distribution
Stars: ✭ 568 (+185.43%)
Mutual labels:  neovim, vim-plugins
Vim Dadbod Completion
Database autocompletion powered by https://github.com/tpope/vim-dadbod
Stars: ✭ 163 (-18.09%)
Mutual labels:  neovim, vim-plugins
Targets.vim
Vim plugin that provides additional text objects
Stars: ✭ 2,114 (+962.31%)
Mutual labels:  neovim, vim-plugins
Alchemist.vim
Elixir Integration Into Vim
Stars: ✭ 632 (+217.59%)
Mutual labels:  neovim, vim-plugins
Visual Split.vim
Vim plugin to control splits with visual selections or text objects
Stars: ✭ 190 (-4.52%)
Mutual labels:  neovim, vim-plugins
Ox Hugo
A carefully crafted Org exporter back-end for Hugo
Stars: ✭ 591 (+196.98%)
Mutual labels:  markdown, org-mode
Nvim Completion Manager
⚠️ PLEASE USE https://github.com/ncm2/ncm2 INSTEAD
Stars: ✭ 950 (+377.39%)
Mutual labels:  markdown, neovim
Tagbar
Vim plugin that displays tags in a window, ordered by scope
Stars: ✭ 5,322 (+2574.37%)
Mutual labels:  neovim, vim-plugins
Neuron.vim
πŸ“ Manage your Zettelkasten in {n}vim.
Stars: ✭ 84 (-57.79%)
Mutual labels:  markdown, neovim
Vim Plugins Profile
πŸ•“ Profile Vim's plugins, generate awesome statistics and optimize (n)vim startup time
Stars: ✭ 508 (+155.28%)
Mutual labels:  neovim, vim-plugins
Vim Markdown Preview
A light Vim plugin for previewing markdown files in a browser - without leaving Vim.
Stars: ✭ 530 (+166.33%)
Mutual labels:  markdown, vim-plugins
Django Plus.vim
🎸 Improvements to the handling of Django related files in Vim
Stars: ✭ 145 (-27.14%)
Mutual labels:  neovim, vim-plugins
Markdown Preview.nvim
markdown preview plugin for (neo)vim
Stars: ✭ 2,858 (+1336.18%)
Mutual labels:  markdown, neovim

Bullets.vim

Build Status

All Contributors

Description

Bullets.vim is a Vim plugin for automated bullet lists.

Simple bullets:

demo

Wrapped text bullets: wrapped bullets

Renumbering lines: renumber demo

Installation

With VimPlug:

Plug 'dkarter/bullets.vim'

Then source your bundle file and run :PlugInstall.

Usage

In markdown or a text file start a bulleted list using - or *. Press return to go to the next line, a new list item will be created.

Configuration

Filetypes

You can choose which file types this plugin will work on:

" Bullets.vim
let g:bullets_enabled_file_types = [
    \ 'markdown',
    \ 'text',
    \ 'gitcommit',
    \ 'scratch'
    \]

You can disable this plugin for empty buffers (no filetype):

let g:bullets_enable_in_empty_buffers = 0 " default = 1

Enable/disable default key mappings:

let g:bullets_set_mappings = 0 " default = 1

Add a leader key before default mappings:

let g:bullets_mapping_leader = '<M-b>' " default = ''

Enable/disable deleting the last empty bullet when hitting <cr> (insert mode) or o (normal mode):

let g:bullets_delete_last_bullet_if_empty = 0 " default = 1

Line spacing between bullets (1 = no blank lines, 2 = one blank line, etc.):

let g:bullets_line_spacing = 2 " default = 1

Don't/add extra padding between the bullet and text when bullets are multiple characters long:

let g:bullets_pad_right = 1 " default = 1
" I. text
" II. text
" III. text
" IV.  text
" V.   text
"     ^ extra spaces to align the text with the longest bullet

let g:bullets_pad_right = 0
" I. text
" II. text
" III. text
" IV. text
"    ^ no extra space between bullet and text

Maximum number of alphabetic characters to use for bullets:

let g:bullets_max_alpha_characters = 2 " default = 2
" ...
" y. text
" z. text
" aa. text
" ab. text

let g:bullets_max_alpha_characters = 1
" ...
" y. text
" z. text
" text

Nested outline bullet levels:

let g:bullets_outline_levels = ['ROM', 'ABC', 'num', 'abc', 'rom', 'std-', 'std*', 'std+'] " default
" Ordered list containing the heirarchical bullet levels, starting from the outer most level.
" Available bullet level options (cannot use the same marker more than once)
" ROM/rom = upper/lower case Roman numerals (e.g., I, II, III, IV)
" ABC/abc = upper/lower case alphabetic characters (e.g., A, B, C)
" std[-/*/+] = standard bullets using a hyphen (-), asterisk (*), or plus (+) as the marker.
" chk = checkbox (- [ ])

let g:bullets_outline_levels = ['num', 'abc', 'std*']
" Example [keys pressed to get this bullet]:
" 1. first parent
"   a. child bullet [ <cr><C-t> ]
"     - unordered bullet [ <cr><C-t> ]
"   b. second child bullet [ <cr><C-d> ]
" 2. second parent [ <cr><C-d> ]

Enable/disable automatically renumbering the current ordered bullet list when changing the indent level of bullets or inserting a new bullet:

let g:bullets_renumber_on_change = 1 " default = 1
" Example 1:
" 1. first existing bullet
"   a. second existing bullet [ hit <C-t> ]
" 2. third existing bullet [ this got renumbered 3 -> 2 when bullet 2 got demoted ]
"
" Example 2:
" 1. first existing bullet
" 2. second existing bullet [ use <cr>/o to add a new bullet below this ]
" 3. new bullet
" 4. third existing bullet [ this got renumbered 3 -> 2 when bullet 2 got demoted ]

let g:bullets_renumber_on_change = 0
" Example:
" 1. first existing bullet
"   a. second existing bullet [ hit <C-t> ]
" 3. third existing bullet [ no renumbering so this bullet remained `3` ]
"
" Example 2:
" 1. first existing bullet
" 2. second existing bullet [ use <cr>/o to add a new bullet below this ]
" 3. new bullet
" 3. third existing bullet [ no renumbering so this bullet remained `3` ]

Enable/disable toggling parent and child checkboxes to indicate "completion" of child checkboxes:

let g:bullets_nested_checkboxes = 1 " default = 1
" Example:
" - [ ] first bullet
"   - [ ] child bullet  [ type <leader>x ]
"     - [ ] sub-child
"   - [ ] child bullet
" 
" Result:
" - [o] first bullet   [ <- indicates partial completion of sub-tasks ]
"   - [X] child bullet
"     - [X] sub-child  [ <- children get checked when parents get checked ]
"   - [ ] child bullet

Define the checkbox markers to use to indicate unchecked, checked, and "partially" checked. When only two marker characters are defined, the use of partial completion markers will be disabled. If more than two markers are defined, each character between the first and last characters will be used to indicate a percentage of the child checkboxes that are checked. Each marker corresponds to 1/n, where n is the number of partial completion markers. By default, there are three partial completion markers, ., o, and O, corresponding to 33%, 66%, and up to but less than 100%, respectively. Note that unchecked ([ ]) and checked ([x] or [X]) statuses using the default markers are always valid, even if you set custom markers for unchecked and checked.

let g:bullets_checkbox_markers = ' .oOX'
" Example:
" - [o] parent bullet  [ <- `o` indicates 66% - 99% of children are checked ]
"   - [ ] child bullet
"   - [.] child bullet [ <- partial completions don't count as complete ]
"     - [ ] sub-child bullet [ <- 1/4 of children checked so parent is `.` ]
"     - [ ] sub-child bullet
"     - [ ] sub-child bullet
"     - [X] sub-child bullet
"   - [X] child bullet
"   - [X] child bullet
"
" You can use fancy markers:
" let g:bullets_checkbox_markers = 'βœ—β—‹β—β—βœ“'
" - [βœ—] unchecked
" - [β—‹] partial
"   - [βœ“] checked
"   - [βœ—] unchecked
"   - [βœ—] unchecked
"   - [βœ—] unchecked

Define whether toggling partially complete checkboxes sets the checkbox to checked or unchecked:

" Example 1:
let g:bullets_checkbox_partials_toggle = 1 " default = 1
" - [o] partially checked  [ type <leader>x ]
"   - [x] sub bullet
"   - [ ] sub bullet
" 
" Result:
" - [x] checked
"   - [x] sub bullet
"   - [x] sub bullet
" 
" Example 2:
let g:bullets_checkbox_partials_toggle = 0
" - [o] partially checked  [ type <leader>x ]
"   - [x] sub bullet
"   - [ ] sub bullet
" 
" Result:
" - [ ] checked
"   - [ ] sub bullet
"   - [ ] sub bullet

Mappings

  • Insert new bullet in INSERT mode: <cr> (Return key)
  • Same as in case you want to unmap in INSERT mode (compatibility depends on your terminal emulator): <C-cr>
  • Insert new bullet in NORMAL mode: o
  • Renumber current visual selection: gN
  • Renumber entire bullet list containing the cursor in NORMAL mode: gN
  • Toggle a checkbox in NORMAL mode: <leader>x
  • Demote a bullet (indent it, decrease bullet level, and make it a child of the previous bullet):
    • NORMAL mode: >>
    • INSERT mode: <C-t>
    • VISUAL mode: >
  • Promote a bullet (unindent it and increase the bullet level):
    • NORMAL mode: <<
    • INSERT mode: <C-d>
    • VISUAL mode: >

Disable default mappings:

let g:bullets_set_mappings = 0

Add a leader key before default mappings:

let g:bullets_mapping_leader = '<M-b>' 
" Set <M-b> to the leader before all default mappings:
" Example: renumbering becomes `<M-b>gN` instead of just `gN`

Just add above to your .vimrc

Documentation

:h bullets

Testing

The test suite is written using vimrunner. It is known to run on macOS with MacVim installed, and on travis. Your vim must have +clientserver and either have its own GUI or in a virtual X11 window.

On your mac run:

bundle install
bundle exec rspec

On linux:

bundle install
xvfb-run bundle exec rspec

You should see a Vim window open which will run each test, same general idea as Capybara integration testing. ❀️

TODO

  • [x] eliminate trailing bullet on previous line if user pressed twice
  • [x] allow indenting while in insert mode (C-l: indent right, C-h: indent left)
  • [x] scope the keybindings and functions to markdown and perhaps text
  • [x] allow GFM-style checkbox auto bullet
  • [x] prefix shortcuts and allow disabling them
  • [x] add numbered list
  • [x] reset numbers (user selects numbered bullets 3-5 and copies to middle of document, then reselects and resets them to 1-3)
  • [x] check if plugin initialized and don't load if it did
  • [x] allow for return without creating a bullet (only possible in GuiVim unfortunately)
  • [x] check if user is at EOL before appending auto-bullet - they may just want to
  • [x] attempt to keep the same total bullet width even as number width varies (right padding)
  • [x] detect lists that have multiline bullets (should have no empty lines between lines).
  • [x] add alphabetic list
  • [x] support for intelligent alphanumeric indented bullets e.g. 1. \t a. \t 1.
  • [x] change nested outline levels in visual mode
  • [x] support renumbering of alphabetical, roman numerals, and nested lists
  • [x] update documentation for nested bullets
  • [x] support nested bullets with child and partial completion
  • [ ] support for nested numerical bullets, e.g., 1. -> 1.1 -> 1.1.1, 1.1.2
  • [ ] add option to turn non-bullet lines into new bullets with <C-t>/>>/>

About

Hashrocket logo

Bullets.vim is kindly supported by Hashrocket, a multidisciplinary design and development consultancy. If you'd like to work with us or join our team, don't hesitate to get in touch.

Contributors ✨

Thanks goes to these wonderful people (emoji key):


Dorian Karter

πŸ’» ⚠️ πŸ“– 🚧

Cormac Relf

πŸ’» πŸ›

Keith Miyake

πŸ’» πŸ“– πŸ€” 🚧

Chayoung You

πŸ’» πŸ“–

Adriaan Zonnenberg

πŸ’»

eater

πŸ’»

hut

πŸ’» πŸ“–

mykoza

πŸ’» πŸ€”

noodlor

πŸ’»

Harshad Srinivasan

πŸ’» πŸ›

Erick A. ChacΓ³n MontalvΓ‘n

πŸ€”

Sam Griesemer

πŸ’» πŸ›

This project follows the all-contributors specification. Contributions of any kind welcome!

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].