mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-24 05:40:05 +08:00
1834 lines
85 KiB
Plaintext
1834 lines
85 KiB
Plaintext
|
*VimOrganizer.txt* for Vim versions with folding and tabs
|
|||
|
A clone of Emacs' Org-mode for Vim
|
|||
|
|
|||
|
Author: Herbert Sitz <hesitz@gmail.com>
|
|||
|
Version: 0.30, 2011 Nov 02
|
|||
|
|
|||
|
Copyright: (c) 2010, 2011 by Herbert Sitz
|
|||
|
The VIM LICENSE applies to code in the VimOrganizer project,
|
|||
|
unless otherwise indicated.
|
|||
|
(See Vim's |copyright| and substitute 'VimOrganizer' for 'Vim'.)
|
|||
|
NO WARRANTY, EXPRESS OR IMPLIED. USE AT-YOUR-OWN-RISK.
|
|||
|
==============================================================================
|
|||
|
CONTENTS *VimOrganizer* *vimorg*
|
|||
|
|
|||
|
Contents.....................................: |VimOrganizer|
|
|||
|
VimOrganizer Overview........................: |vimorg-overview|
|
|||
|
Document Structure...........................: |vimorg-document-structure|
|
|||
|
File compatibility with Org-mode.............: |vimorg-org-compatibility|
|
|||
|
Vimorg / Emacs Interaction ..................: |vimorg-emacs-interaction|
|
|||
|
Vimorg / Org-mode Conversion.................: |vimorg-org-conversion|
|
|||
|
Vimorg Metadata .............................: |vimorg-metadata|
|
|||
|
|vimorg-tag-metadata|
|
|||
|
|vimorg-todo-metadata|
|
|||
|
|vimorg-property-metadata|
|
|||
|
|vimorg-date-metadata|
|
|||
|
|vimorg-categories|
|
|||
|
|
|||
|
Vimorg Commands .............................: |vimorg-commands|
|
|||
|
|
|||
|
Modifying view of the outline structure |vimorg-view-commands|
|
|||
|
Adding new headings |vimorg-new-headings|
|
|||
|
Heading Navigation |vimorg-navigation|
|
|||
|
Editing Document Structure |vimorg-structure-editing|
|
|||
|
Character formatting |vimorg-character-formatting|
|
|||
|
Footnotes |vimorg-footnotes|
|
|||
|
Capture |vimorg-capture-buffer|
|
|||
|
Refiling |vimorg-refile-heading|
|
|||
|
Mark |vimorg-mark|
|
|||
|
Gather |vimorg-gather|
|
|||
|
Hyperlinks |vimorg-hyperlinks|
|
|||
|
Narrowing Regions |vimorg-narrowing|
|
|||
|
Tables in VimOrganizer |vimorg-tables-editing|
|
|||
|
Clocking |vimorg-clocking|
|
|||
|
|
|||
|
Colorschemes and highlighting |vimorg-colors|
|
|||
|
Code and spreadsheet evaluation in Emacs.....: |vimorg-code-eval|
|
|||
|
|vimorg-spreadsheet-eval|
|
|||
|
|
|||
|
Searches and the Agenda .....................: |vimorg-agenda|
|
|||
|
agenda
|
|||
|
Setting the agenda files
|
|||
|
sparse tree
|
|||
|
custom searches |vimorg-agenda-custom-searches|
|
|||
|
block agendas |vimorg-agenda-blocks|
|
|||
|
agenda window position |vimorg-agenda-window-position|
|
|||
|
clocktables in agenda |vimorg-agenda-include-clocktable|
|
|||
|
|
|||
|
Navigating agenda files |vimorg-files-navigating|
|
|||
|
|
|||
|
Column view..................................: |vimorg-column-view|
|
|||
|
Exporting and Printing.......................: |vimorg-export|
|
|||
|
|
|||
|
Feedback.....................................: |vimorg-feedback|
|
|||
|
|
|||
|
==============================================================================
|
|||
|
VIMORGANIZER OVERVIEW *vimorg-overview*
|
|||
|
|
|||
|
VimOrganizer is a Vim filetype plugin that attempts to clone Emacs' Org-mode.
|
|||
|
It is currently (September 2011) in an alpha-stage, both in terms of (1) the
|
|||
|
breadth and depth of Org-mode features it clones and (2) its level of polish
|
|||
|
and presence of bugs. It's nevertheless very usable in its current state.
|
|||
|
|
|||
|
Org-mode, and thus VimOrganizer, is a text-editor add-on/application that can
|
|||
|
be used for (1) keeping notes, (2) maintaining TODO lists, (3) planning
|
|||
|
projects, and/or (4) authoring and publishing documents, including support for
|
|||
|
literate programming. Like Org-mode, VimOrganizer does this by implementing a
|
|||
|
flexible plain-text system using a lightly structured document format.
|
|||
|
Org-mode has been in constant development for seven or eight years, and
|
|||
|
continues to be developed. Work on VimOrganizer is likewise ongoing, but
|
|||
|
VimOrganizer is at present a much smaller and less ambitious project than
|
|||
|
Org-mode.
|
|||
|
|
|||
|
VimOrganizer also allows Vim users to make use of Org-babel, a subproject of
|
|||
|
Org-mode that allows execution of source-code blocks in org-format
|
|||
|
documents. Uses for Org-babel range from writing technical research papers to
|
|||
|
simply using a VimOrganizer document as a "language-scratchpad". Over
|
|||
|
twenty languages are supported, including C, R, Lisp, Python, Perl, Ruby,
|
|||
|
and others. VimOrganizer calls out to a running Emacs server for Org-babel
|
|||
|
processing; functionality and speed are basically the same as
|
|||
|
when editing with Org-mode in Emacs.
|
|||
|
|
|||
|
VimOrganizer doesn't have much documentation yet. The best way to learn how
|
|||
|
to use VimOrganizer is to learn the basics of Emacs' Org-mode. VimOrganizer
|
|||
|
uses the same basic concepts but implements them within the context of Vim
|
|||
|
and with a reduced feature set. (Parts of this help file were
|
|||
|
copied from Org-mode's documentation.) Org-mode's main documentation and
|
|||
|
support newsgroup are found here:
|
|||
|
Org-mode Main Manual: http://orgmode.org/manual/index.html
|
|||
|
Org-mode Compact Guide: http://orgmode.org/guide/index.html
|
|||
|
Org-mode support newsgroup: http://news.gmane.org/gmane.emacs.orgmode
|
|||
|
Org-babel information: http://orgmode.org/worg/org-contrib/babel/
|
|||
|
|
|||
|
File formats and basic workflows for VimOrganizer and Org-mode are very
|
|||
|
similar, and VimOrganizer actually calls out to an Emacs' Org-mode server to
|
|||
|
implement important features, e.g., exporting to html and pdf formats.
|
|||
|
Thus, to make full use of VimOrganizer you will often want to have an Emacs'
|
|||
|
server running alongside. In most cases this requires little knowledge of
|
|||
|
Emacs other than how to start it up and add a few lines to the '.emacs' file,
|
|||
|
Emacs' counterpart to Vim's '.vimrc'. (You can even edit the .emacs file in
|
|||
|
Vim.)
|
|||
|
|
|||
|
===============================================================================
|
|||
|
VIMORGANIZER DOCUMENT STRUCTURE *vimorg-document-structure*
|
|||
|
|
|||
|
VimOrganizer documents (an "Org document") are organized around a basic
|
|||
|
outline structure. Headlines define the structure of an outline tree. The
|
|||
|
headlines in an Org document start with one or more stars, which must start on
|
|||
|
the leftmost column. For example:
|
|||
|
|
|||
|
------ sample Org-format outline below --------------------------------
|
|||
|
>
|
|||
|
* Top level headline
|
|||
|
** Second level
|
|||
|
*** 3rd level
|
|||
|
some text
|
|||
|
*** 3rd level
|
|||
|
more text
|
|||
|
* Another top level headline
|
|||
|
more text
|
|||
|
------ sample Org-format outline above --------------------------------
|
|||
|
|
|||
|
An overview of this structure is achieved by folding (hiding) large parts of
|
|||
|
the document to show only the general document structure and the parts
|
|||
|
currently being worked on. VimOrganizer simplifies the use of outlines by
|
|||
|
compressing the entire show/hide functionality of a heading and its subtree
|
|||
|
into a simple "cycle" operation, which is bound to the <TAB> key. A user can
|
|||
|
cycle through several views, from fully folded to unfolded, by repeated
|
|||
|
presses of <TAB>. While <TAB> operates on the structure of a single heading,
|
|||
|
<shift-TAB> performs an analogous cycle operation on the document as a whole.
|
|||
|
|
|||
|
Because all of the folds in VimOrganizer are ordinary Vim folds, users can
|
|||
|
also manipulate folds with the usual array of Vim fold commands: zc, zv, zo,
|
|||
|
etc. (see |fold.txt|)
|
|||
|
|
|||
|
===============================================================================
|
|||
|
VIMORGANIZER FILE COMPATIBILITY WITH ORG-MODE *vimorg-org-compatiblity*
|
|||
|
|
|||
|
VimOrganizer's file format is nearly identical to Org-mode. There are
|
|||
|
currently a couple of differences:
|
|||
|
|
|||
|
-------------------------------------------------------------------------------
|
|||
|
METADATA-BLOCKS *vimorg-metadata-format*
|
|||
|
|
|||
|
In VimOrganizer lines in a heading's metadata must (1) immediately follow
|
|||
|
the heading line, and (2) all begin with a colon followed by a
|
|||
|
non-whitespace character.
|
|||
|
|
|||
|
Blocks of metadata typically follow a heading in Org-mode documents, but
|
|||
|
Org-mode doesn't require this. That is, the metadata can be anywhere in the
|
|||
|
text block of a heading. Also, in Org-mode some, but not all (e.g., dates),
|
|||
|
metadata lines are preceded by a colon (:) character. E.g.,
|
|||
|
|
|||
|
------ sample Org-format outline below ----------
|
|||
|
>
|
|||
|
* Top level headline
|
|||
|
DEADLINE:<2011-11-13 Thu>
|
|||
|
:PROPERTIES:
|
|||
|
:SOMEPROP:SomePropValue
|
|||
|
:END:
|
|||
|
One or more lines of text for heading here. . . .
|
|||
|
SCHEDULED:<2011-11-12 Wed>
|
|||
|
One or more lines of text for heading here. . . .
|
|||
|
** subheading
|
|||
|
** another subheading
|
|||
|
------ sample Org-format outline above ---------
|
|||
|
|
|||
|
The sample above should be formatted like this in
|
|||
|
VimOrganizer, with the SCHEDULED date moved above
|
|||
|
PROPERTIES and colons preceding the date lines:
|
|||
|
|
|||
|
------ sample VimOrganizer-format outline below -----
|
|||
|
>
|
|||
|
* Top level headline
|
|||
|
:DEADLINE:<2011-11-13 Thu>
|
|||
|
:SCHEDULED:<2011-11-12 Wed>
|
|||
|
:PROPERTIES:
|
|||
|
:SOMEPROP:SomePropValue
|
|||
|
:END:
|
|||
|
One or more lines of text for heading here. . . .
|
|||
|
** subheading
|
|||
|
** another subheading
|
|||
|
------ sample VimOrganizer-format outline above ----
|
|||
|
|
|||
|
------------------------------------------------------------------------------
|
|||
|
TAG FORMAT IN VIMORGANIZER *vimorg-tag-format*
|
|||
|
|
|||
|
The second major difference between VimOrganizer and Org-mode is in the
|
|||
|
format of tag data. In Org-mode tags are included on heading lines as
|
|||
|
following the end of the heading. In VimOrganizer tags are included as part
|
|||
|
of the metadata block and must be on the first line following a heading.
|
|||
|
|
|||
|
For example, tags in Org-mode look like this:
|
|||
|
|
|||
|
------ sample Org-format tags below ----------
|
|||
|
>
|
|||
|
* Top level headline :tagone:tagtwo:tagthree:
|
|||
|
:PROPERTIES:
|
|||
|
:SOMEPROP:SomePropValue
|
|||
|
:END:
|
|||
|
One or more lines of text for heading here. . . .
|
|||
|
------ sample Org-format tags above ---------
|
|||
|
|
|||
|
The same tags in VimOrganizer would look like this:
|
|||
|
|
|||
|
------ sample VimOrganizer-format tags below ----------
|
|||
|
>
|
|||
|
* Top level headline
|
|||
|
:tagone:tagtwo:tagthree:
|
|||
|
:PROPERTIES:
|
|||
|
:SOMEPROP: SomePropValue
|
|||
|
:END:
|
|||
|
One or more lines of text for heading here. . . .
|
|||
|
------ sample VimOrganizer-format tags above ---------
|
|||
|
|
|||
|
In practice the difference is less visible, since for folded headings the
|
|||
|
default settings in VimOrganizer can show the tags on the same line as the
|
|||
|
heading text. (See |vimorg-column-view|)
|
|||
|
|
|||
|
==============================================================================
|
|||
|
|
|||
|
VIMORGANIZER AND EMACS INTERACTION *vimorg-emacs-interaction*
|
|||
|
*vimorg-emacs-setup*
|
|||
|
|
|||
|
CALLING AN EMACS CLIENT FROM VIMORGANIZER *vimorg-invoking-emacs*
|
|||
|
|
|||
|
For features where Vim/VimOrganizer call out to an Emacs client, setup
|
|||
|
must be configured to properly invoke the Emacs client. This differs depending
|
|||
|
on whether the user is running Windows or a Linux/OS X OS.
|
|||
|
|
|||
|
First, of course, Emacs must be installed and Org-mode must be set up
|
|||
|
properly. Recent Emacs installs include Org-mode and should work without any
|
|||
|
more configuration than a basic install. A '.org' file should be opened in
|
|||
|
Emacs to confirm this. Emacs can be obtained from a link at
|
|||
|
http://www.gnu.org/software/emacs.
|
|||
|
|
|||
|
a. On WINDOWS. The variable, g:org_command_for_emacsclient, must be
|
|||
|
assigned in your vimrc file with a command that will open an emacs client
|
|||
|
on your system. On Windows the associated exe file is emacsclientw.exe
|
|||
|
in Emacs' bin directory. By default Emacs is installed with
|
|||
|
a path that includes spaces in a directory name (viz., '/program files/).
|
|||
|
The complex command that VimOrganizer constructs to call
|
|||
|
Emacs won't work if the command invoking Emacs itself
|
|||
|
includes a space. There are two ways to work around this: 1. Create a
|
|||
|
"symbolic link" to the Emacs client executable that doesn't have a space and
|
|||
|
include that link as value of g:org_command_for_emacs, e.g.,
|
|||
|
>
|
|||
|
let g:org_command_for_emacsclient = c:\users\george\emacsclientw
|
|||
|
|
|||
|
On Windows7 or Vista, the link can be created with Windows' MKLINK command line utility:
|
|||
|
>
|
|||
|
mklink c:\users\george\emacsclientw c:\program files(x86)\Emacs\emacs\bin\emacsclientw.exe
|
|||
|
|
|||
|
Alternatively, rather than create a symbolic link having a path with no
|
|||
|
spaces, a user can add the directory to the environment's path variable, so
|
|||
|
that the emacsclient can be invoked simply by issuing the command
|
|||
|
'emacsclientw', without including any element of its path. In that case you
|
|||
|
would include this assignment in your vimrc:
|
|||
|
>
|
|||
|
let g:org_command_for_emacsclient = emacsclientw.exe
|
|||
|
|
|||
|
|
|||
|
b. ON LINUX/OS X. On Linux the executable to start an Emacs client is
|
|||
|
named emacsclient. In general all you need to do is put this line
|
|||
|
in your vimrc:
|
|||
|
>
|
|||
|
let g:org_command_for_emacsclient = emacsclient
|
|||
|
|
|||
|
NOTE: Unlike the Emacs client on Windows, emacsclient on Linux will NOT start
|
|||
|
up an Emacs server if one is not running, the emacsclient command will simply
|
|||
|
fail.
|
|||
|
Thus, at least for the time being, the user must manually start Emacs before
|
|||
|
using Emacs features from VimOrganizer, and in the running Emacs instance must
|
|||
|
issue the server-start command, either by putting it in the .emacs file or by
|
|||
|
issuing the command manually within Emacs (alt-x server-start).
|
|||
|
|
|||
|
----------------------------------------------------------------------------
|
|||
|
|
|||
|
CONVERSION BETWEEN ORG-MODE AND VIMORGANIZER *vimorg-orgmode-conversion*
|
|||
|
|
|||
|
In practice nothing may go drastically wrong if you don't have perfect
|
|||
|
formatting, either in VimOrganizer or Org-mode, but VimOrganizer by default is
|
|||
|
set to convert Org-mode documents to its own format upon opening. Also, it is
|
|||
|
recommended to put a "hook" function in your .emacs file to convert
|
|||
|
VimOrganizer-format documents to Org-mode format upon opening. Once set up in
|
|||
|
this way you shouldn't need to worry about formatting differences. The
|
|||
|
code to add to your .emacs file is below:
|
|||
|
|
|||
|
--------- elisp code for .emacs ---------------------
|
|||
|
>
|
|||
|
(defun vimorg-tag-adjust ()
|
|||
|
(interactive)
|
|||
|
(while (re-search-forward "^*.*?\n[ \t]+:[^ \t]+:" nil t)
|
|||
|
(if (not (string-match "\\(PROPERTIES\\|LOGBOOK\\)" (thing-at-point 'line)))
|
|||
|
(join-line))))
|
|||
|
|
|||
|
(defun vimorg-set-unmodified ()
|
|||
|
(interactive)
|
|||
|
(set-buffer-modified-p nil))
|
|||
|
|
|||
|
(add-hook 'org-mode-hook
|
|||
|
(lambda () (interactive)(replace-regexp "\\(\\s-*\\):\\(DEADLINE\\|CLOSED\\|SCHEDULED\\|CLOCK\\|<[0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} \\)" "\\1\\2")
|
|||
|
(beginning-of-buffer)(vimorg-tag-adjust)
|
|||
|
(beginning-of-buffer) ))
|
|||
|
-----------------------------------------------------
|
|||
|
|
|||
|
==============================================================================
|
|||
|
METADATA *vimorg-metadata*
|
|||
|
|
|||
|
Org-mode has different kinds of metadata: tags, todos, properties, dates, and
|
|||
|
categories. Here is how to set up and edit them.
|
|||
|
------------------------------------------------------------------------
|
|||
|
TODOS *vimorg-todo-metadata*
|
|||
|
|
|||
|
*Todos* are single_words that can appear in a heading after the last asterisk
|
|||
|
and immediately before the first word of the heading. By default the todos
|
|||
|
are: (1) TODO and (2) DONE, to identify headings that are tasks that need to
|
|||
|
be done, and headlines that are done tasks.
|
|||
|
|
|||
|
A user can cycle between todo states by pressing <s-enter> in Normal mode
|
|||
|
with the cursor on a headline. Here is how the todos would cycle with the
|
|||
|
default setup of TODO and DONE todos:
|
|||
|
>
|
|||
|
* Work on final report
|
|||
|
* TODO Work on final report (after user presses <s-enter>)
|
|||
|
* DONE Work on final report (after second press of <s-enter>)
|
|||
|
* Work on final report (after third press of <s-enter>)
|
|||
|
|
|||
|
The global default for todos setup is in g:org_todo_setup. If you want to
|
|||
|
change the todo states you can reassign g:org_todo_setup in your vimrc. For
|
|||
|
example, the line below would add a 'STARTED' state to indicate todos that
|
|||
|
had been started but were not yet finished:
|
|||
|
>
|
|||
|
let g:org_todo_setup='TODO STARTED | DONE'
|
|||
|
|
|||
|
Per-file defaults can be set by including a config line in a particular .org
|
|||
|
file. For example, the config line below would add a CANCELLED keyword to
|
|||
|
the todo cycle in a specific document:
|
|||
|
>
|
|||
|
#+TODO: TODO STARTED | DONE CANCELLED
|
|||
|
|
|||
|
Please see the Org-mode documentation for more info on todos. It should be
|
|||
|
helpful, even though not all Org-mode todo features are implemented yet in
|
|||
|
VimOrganizer: http://orgmode.org/manual/TODO-Items.html.
|
|||
|
-------------------------------------------------------------------------
|
|||
|
TAGS *vimorg-tag-metadata*
|
|||
|
|
|||
|
Tags offer a way of attaching multiple labels or contexts to a single heading.
|
|||
|
Tags are added to a heading by putting them on the line immediately after
|
|||
|
the heading, with each tag preceded and followed by a single colon. E.g.,
|
|||
|
here is a heading with two tags:
|
|||
|
>
|
|||
|
* Example heading
|
|||
|
:work:urgent:
|
|||
|
|
|||
|
You can add whatever tags you wish by editing the tag line directly, however
|
|||
|
it's usually preferable to use VimOrganizer's system for setting up and
|
|||
|
editing tags. Global tags setup is held in the variable, g:org_tag_setup,
|
|||
|
which by default holds the setup string '{home(h) work(w)}'. You can override
|
|||
|
the global setup by including a config line in a particular file. E.g.,:
|
|||
|
>
|
|||
|
#+TAGS: { work(w) home(h) tennisclub(t) } laptop(l) pc(p)
|
|||
|
|
|||
|
The braces in the example above indicate that the tags inside are mutually
|
|||
|
exclusive, so choosing one will automatically delete any other. The letters
|
|||
|
in parentheses provide single-key selection when using VimOrganizer's
|
|||
|
tag editing menu. (Single-key letters will be assigned automatically if
|
|||
|
not explicitly assigned in the tag setup string.
|
|||
|
|
|||
|
The tag editing menu can be opened by choosing 'Edit Tags' from the Org
|
|||
|
menu, or by pressing ',et' in Normal mode.
|
|||
|
|
|||
|
Although not all Org-mode tag functionality is present in VimOrganizer, it
|
|||
|
may be helpful to review the Org-mode tag docs at:
|
|||
|
http://orgmode.org/manual/Tags.html#Tags
|
|||
|
|
|||
|
-------------------------------------------------------------------------
|
|||
|
PROPERTIES *vimorg-property-metadata*
|
|||
|
|
|||
|
Properties offer a way to attach key/value pairs to headings in a document.
|
|||
|
These pairs must be included, one per line, in between a :PROPERTIES: and
|
|||
|
an :END: marker beneath a heading. For example:
|
|||
|
>
|
|||
|
* Example heading
|
|||
|
:PROPERTIES:
|
|||
|
:Title: Goldberg Variations
|
|||
|
:Composer: J.S. Bach
|
|||
|
:Artist: Glen Gould
|
|||
|
:Publisher: Deutsche Grammophon
|
|||
|
:NDisks: 1
|
|||
|
:END:
|
|||
|
|
|||
|
For more information on how properties work, please refer to the Org-mode
|
|||
|
documentation:
|
|||
|
http://orgmode.org/manual/Properties-and-Columns.html#Properties-and-Columns
|
|||
|
|
|||
|
-------------------------------------------------------------------------
|
|||
|
DATES *vimorg-date-metadata*
|
|||
|
|
|||
|
Dates are another form of metadata that can be associated with a heading.
|
|||
|
The following commands may be issued anywhere within a headline and will
|
|||
|
enter or edit the corresponding date for the headline. One date of
|
|||
|
each type may be defined per headline (i.e, 'DEADLINE', 'SCHEDULED',
|
|||
|
'CLOSED', and 'timestamp'). You can enter more dates anywhere you want, but
|
|||
|
this editing mechanism is currently restricted to dealing with only these
|
|||
|
"primary" dates.
|
|||
|
|
|||
|
Command Result
|
|||
|
,dd enter DEADLINE date for headline
|
|||
|
,ds enter SCHEDULED date for headline
|
|||
|
,dc enter CLOSED date for headline
|
|||
|
,dt enter timestamp date (i.e., no indicator) for headline
|
|||
|
,dg set date at cursor
|
|||
|
|
|||
|
The command-line prompt and calendar that appear when you execute a ',d_'
|
|||
|
command operate nearly the same as the date-time prompt in Emacs'
|
|||
|
Org-mode. Some options are not yet implemented (e.g., the 'w'eek
|
|||
|
options), but most should work just the same. For documentation
|
|||
|
on Org-mode's date-time prompt see:
|
|||
|
http://orgmode.org/manual/The-date_002ftime-prompt.html#The-date_002ftime-prompt
|
|||
|
|
|||
|
Except when using the 'set date at cursor' option, the date will be located
|
|||
|
beneath the heading, immediately after any tag line, and immediately before
|
|||
|
any PROPERTIES block. Dates added in other locations will be searched
|
|||
|
when using VimOrganizer's searches, but they aren't strictly speaking part
|
|||
|
of the 'metadata block' that immediately follows a heading.
|
|||
|
-------------------------------------------------------------------------
|
|||
|
CATEGORIES *vimorg-categories*
|
|||
|
|
|||
|
Categories are yet another form of metadata in Org files. Categories
|
|||
|
are useful because a heading's 'Category' is displayed as the first column
|
|||
|
of data in a heading line in Agenda results. (Remember that there
|
|||
|
is limited space for display, try to keep category names less than
|
|||
|
10 characters.) By default a heading's Category will be its file name.
|
|||
|
However you can change this in several ways.
|
|||
|
|
|||
|
First, you can establish a new category for an entire document by
|
|||
|
placing a category config line at the top of the document. All
|
|||
|
headings in the document will inherit it as their default. Like
|
|||
|
all config lines, it must begin in the leftmost column of the buffer,
|
|||
|
e.g.,:
|
|||
|
>
|
|||
|
#+CATEGORY: MyCategory
|
|||
|
|
|||
|
All headings in the document would now display that as the first column
|
|||
|
when they are part of an agenda result.
|
|||
|
|
|||
|
Second, you can override a document's default category by giving a
|
|||
|
heading a category property, like this:
|
|||
|
------------------------
|
|||
|
>
|
|||
|
* Heading One
|
|||
|
:PROPERTIES:
|
|||
|
:CATEGORY: NewCategory
|
|||
|
:END:
|
|||
|
** Subheading One
|
|||
|
** Subheading TWo
|
|||
|
* Heading Two
|
|||
|
------------------------
|
|||
|
In the snippet above, Heading One's category would be 'NewCategory'.
|
|||
|
Categories are inherited by subheadings, so Subheading One and Sub-
|
|||
|
heading Two would also be 'NewCategory'. Heading Two, on the other
|
|||
|
hand, would inherit the category from a config line, if any, or its
|
|||
|
category would be the file name (excluding the . and extension).
|
|||
|
|
|||
|
You can read more about how categories work here:
|
|||
|
http://orgmode.org/manual/Categories.html#Categories
|
|||
|
NOTE: Although Org-mode still supports multiple category config
|
|||
|
lines in a document, each affecting text occurring after it (and
|
|||
|
before another category config line), VimOrganizer does not
|
|||
|
support this. You can put one CATEGORY config line in a document and
|
|||
|
it will be inherited by any heading that does not have a CATEGORY
|
|||
|
property (or inherit a CATEGORY property from an ancestor heading).
|
|||
|
|
|||
|
=============================================================================
|
|||
|
VIMORGANIZER COMMANDS *vimorg-commands*
|
|||
|
|
|||
|
VimOrganizer commands are listed below, along with the normal-mode
|
|||
|
keystrokes to invoke them. (<localleader> in VimOrganizer documents
|
|||
|
is by default the comma (",") character, which accounts for the commas
|
|||
|
in the commands below):
|
|||
|
|
|||
|
---------------------------------------------------------------------
|
|||
|
MODIFYING VIEW OF THE OUTLINE STRUCTURE *vimorg-view-commands*
|
|||
|
|
|||
|
View Document Structure Show entire document with headings
|
|||
|
,,N expanded to outline level N.
|
|||
|
where N is for level 1-9
|
|||
|
|
|||
|
View Subtree Structure Show current subtree with headings
|
|||
|
,N expanded to outline level N.
|
|||
|
where N is for level 1-9
|
|||
|
---------------------------------------------------------------------
|
|||
|
ADDING NEW HEADINGS *vimorg-new-headings*
|
|||
|
|
|||
|
New headings can of course be added by normal Vim text editing. Create
|
|||
|
a new line and put one or more asterisks starting flush with the left
|
|||
|
column. Normal mode commands below are shortcuts to do the same thing.
|
|||
|
|
|||
|
|
|||
|
new heading same level Insert a new heading of current level
|
|||
|
<CR> in normal mode after current heading's subtree.
|
|||
|
<S-CR> in insert mode
|
|||
|
|
|||
|
new subhead Insert a new heading that is a
|
|||
|
<C-CR> sub-heading of the current heading
|
|||
|
|
|||
|
new parent head Insert a new heading that is at
|
|||
|
<S-C-CR> the level of current subhead's parent
|
|||
|
|
|||
|
-----------------------------------------------------------------------
|
|||
|
HEADING NAVIGATION *vimorg-navigation*
|
|||
|
|
|||
|
VimOrganizer has commands that let you navigate a document by outline
|
|||
|
node. Some outline navigation commands are not mapped to keys but are
|
|||
|
available on the menu.
|
|||
|
|
|||
|
Up to parent Move cursor to parent heading.
|
|||
|
<a-left-arrow>
|
|||
|
|
|||
|
Previous sibling Move cursor to previous heading
|
|||
|
<a-up-arrow> of same level in current subtree.
|
|||
|
|
|||
|
Next sibling Move cursor to next heading of
|
|||
|
<a-down-arrow> same level in current subtree
|
|||
|
|
|||
|
First child Move cursor to first child heading
|
|||
|
<a-right-arrow> of current heading.
|
|||
|
|
|||
|
Last child Move cursor to last child heading
|
|||
|
of current heading.
|
|||
|
|
|||
|
Next heading . . . to next heading of any kind
|
|||
|
|
|||
|
Previous heading . . . to previous heading of any kind
|
|||
|
|
|||
|
Next heading same level . . . to next heading of same level
|
|||
|
regardless of whether it is in
|
|||
|
current subtree
|
|||
|
|
|||
|
Previous heading same level . . . to next heading of same level
|
|||
|
regardless of whether it is in
|
|||
|
current subtree
|
|||
|
----------------------------------------------------------------------
|
|||
|
EDITING DOCUMENT STRUCTURE *vimorg-structure-editing*
|
|||
|
|
|||
|
These commands let you move entire sections of a document based on its
|
|||
|
outline structure.
|
|||
|
|
|||
|
Move subtree up Move current subtree to position
|
|||
|
<c-a-uparrow> before previous subtree.
|
|||
|
|
|||
|
Move subtree down Move current subtree to position
|
|||
|
<c-a-downarrow> after next subtree.
|
|||
|
|
|||
|
Promote subtree Move entire subtree to be at parent
|
|||
|
<c-a-leftarrow> heading's level and position after
|
|||
|
parent subtree.
|
|||
|
|
|||
|
Demote subtree Move entire subtree to be child
|
|||
|
<c-a-rightarrow> of previous heading of same level.
|
|||
|
--------------------------------------------------------------
|
|||
|
CHARACTER FORMATTING *vimorg-character-formatting*
|
|||
|
|
|||
|
These commands automatically add the markup Org-mode uses to print
|
|||
|
documents with specially formatted text. Text can be selected
|
|||
|
prior to issuing command to wrap text in markup or just issue
|
|||
|
the command then add text between the markup delimiters.
|
|||
|
|
|||
|
NOTE: these delimiters do NOT format phrases that span
|
|||
|
over a line break, they are for the same line only. If you
|
|||
|
want to format over two or more lines you need to apply
|
|||
|
to each word in the lines (for safety when reformatting)
|
|||
|
or to the begin and end of each line (which will pose
|
|||
|
problems upon reformatting).
|
|||
|
|
|||
|
Bold text uses * delimiters
|
|||
|
,cb
|
|||
|
|
|||
|
Italic text uses / delimiters
|
|||
|
,ci
|
|||
|
|
|||
|
Underline text uses _ delimiters
|
|||
|
,cu
|
|||
|
|
|||
|
Code text uses = delimiters to specify
|
|||
|
,cc monospaced unformatted text
|
|||
|
|
|||
|
----------------------------------------------------
|
|||
|
FOOTNOTES *vimorg-footnotes*
|
|||
|
|
|||
|
VimOrganizer has no special support for footnotes yet. However footnotes can
|
|||
|
still be easily included, and upon export will be properly positioned
|
|||
|
formatted (and linked, depending on the output format). The special support
|
|||
|
that will be added consists mostly of automatically assembling footnote text
|
|||
|
in a separate portion of the document.
|
|||
|
|
|||
|
You can add footnotes in any of the following ways:
|
|||
|
|
|||
|
[fn::text of footnote here] This inline method will make the
|
|||
|
text into a footnote and add a
|
|||
|
proper footnote reference at the
|
|||
|
position of the reference.
|
|||
|
|
|||
|
[fn:name:text of footnote here] This inline method allows the same
|
|||
|
note to be referenced by another
|
|||
|
note reference of this form:
|
|||
|
[fn:name]
|
|||
|
|
|||
|
[fn:name] This creates a reference point in
|
|||
|
the document that will be numbered
|
|||
|
and linked to the footnote text with
|
|||
|
the same name. The text of the foot-,
|
|||
|
note is entered in a separate
|
|||
|
paragraph of its own, located
|
|||
|
anywhere in the document but always
|
|||
|
beginning in column 0, like this:
|
|||
|
|
|||
|
[fn:name] This paragraph (text to next blank line) is the note
|
|||
|
for the footnote reference: name. Upon export numbers will be
|
|||
|
substituted for all of the footnote names in the document.
|
|||
|
|
|||
|
See the Org-mode documentation for more complete information
|
|||
|
on footnotes. Remember, you can use them in VimOrganizer, the
|
|||
|
main thing missing is automatic gathering of all the note
|
|||
|
text at a common point in the document:
|
|||
|
http://orgmode.org/manual/Footnotes.html#Footnotes
|
|||
|
|
|||
|
----------------------------------------------------
|
|||
|
CAPTURE BUFFER *vimorg-capture-buffer*
|
|||
|
*OrgCapture*
|
|||
|
*g:org_capture_file*
|
|||
|
|
|||
|
The "capture buffer" is a buffer that can be opened
|
|||
|
wherever you are in Vim. It provides a quick and
|
|||
|
simple way to "capture" a note in a "capture file"
|
|||
|
that you can review later and refile items to
|
|||
|
whatever end location is appropriate. "Capturing"
|
|||
|
in essence lets you quickly save a note without having
|
|||
|
to worry about identifying or opening the file it
|
|||
|
will eventually end up in. Later you can open your
|
|||
|
capture file and focus on refiling all of your notes
|
|||
|
to the appropriate spot in one of your .org files.
|
|||
|
|
|||
|
The capture buffer opens with a simple
|
|||
|
Org template of a single level 1 heading with no text
|
|||
|
and a generic datetime marking the date of creation.
|
|||
|
E.g., >
|
|||
|
|
|||
|
*
|
|||
|
:<2012-01-08 Sun 16:00>
|
|||
|
|
|||
|
The buffer is opened in insert mode with the cursor positioned
|
|||
|
one space to the right of the asterisk, where you can
|
|||
|
enter the heading text, then enter the content of the note
|
|||
|
below the timestamp.
|
|||
|
|
|||
|
When in the capture buffer the write command (:w) will
|
|||
|
(1) save the contents of the capture buffer to the capture file,
|
|||
|
then (2) close the capture buffer.
|
|||
|
|
|||
|
When in a capture buffer the quit command (:q) will abandon any changes
|
|||
|
and close the buffer without confirmation.
|
|||
|
|
|||
|
A "capture buffer" can be opened by choosing "Open
|
|||
|
Capture Buffer" from the menu in gvim or with with the command
|
|||
|
:OrgCapture. The :OrgCapture command should be defined in
|
|||
|
your vimrc and is part of the sample vimrc of the VimOrganizer
|
|||
|
project. This ensures that the command is enabled regardless
|
|||
|
of whether you have opened a .org file in your Vim session.
|
|||
|
|
|||
|
The command :OpenCaptureFile will open your capture file
|
|||
|
into a Vim buffer, so you can then refile each of the items
|
|||
|
in it to the appropriate location.
|
|||
|
|
|||
|
----------------------------------------------------
|
|||
|
REFILING *vimorg-refile-heading*
|
|||
|
*vimorg-jump-to-headng*
|
|||
|
|
|||
|
Refiling involves moving a subtree structure
|
|||
|
to a new location, either in the current document or
|
|||
|
another document. (The user interface for
|
|||
|
this is currently barebones and not optimal, like many other
|
|||
|
things it will be revised. . . .)
|
|||
|
|
|||
|
Open refile dashboard
|
|||
|
,r Open the refiling dashboard. Type an action's
|
|||
|
character to perform it, or <Esc> to cancel and
|
|||
|
close the menu.
|
|||
|
|
|||
|
Refile to point
|
|||
|
,rr Move current subtree to be subchild
|
|||
|
of heading at a different location.
|
|||
|
Invoking this command first presents
|
|||
|
you with a 'Target file:' prompt, at
|
|||
|
which you can use <Tab> to choose the
|
|||
|
file target. Then press <Enter> to
|
|||
|
get a list of top-level headings in
|
|||
|
the selected file. If you want to
|
|||
|
select a lower-level heading then add
|
|||
|
a '/' and press <Tab> to get list of
|
|||
|
direct subheadings of the heading, or
|
|||
|
'*' and <Tab> to get list of all levels
|
|||
|
of subheads of selected heading. Finally,
|
|||
|
<Enter> to choose the heading to refile to,
|
|||
|
or <Esc> to cancel the refile.
|
|||
|
|
|||
|
Refile, jump to point
|
|||
|
,rj Uses same prompt as 'Refile to point' command,
|
|||
|
but instead of moving subtree there simply
|
|||
|
moves cursor to that point (which may involve
|
|||
|
moving to a different buffer if chosen point
|
|||
|
is not in current buffer).
|
|||
|
|
|||
|
Refile, set persistent
|
|||
|
refile point
|
|||
|
,rs Same prompt as for 'Refile to point' command,
|
|||
|
but instead of refiling it saves the
|
|||
|
chosen file and heading to be used as
|
|||
|
target of subsequent 'Refile to Persistent
|
|||
|
Point' command.
|
|||
|
|
|||
|
Refile to persistent
|
|||
|
refile point
|
|||
|
,rp Move current subtree to location defined
|
|||
|
by the persistent refile point.
|
|||
|
|
|||
|
Refile, jump to
|
|||
|
persistent point
|
|||
|
,rx Move cursor to file/heading that is persistent
|
|||
|
refile point.
|
|||
|
|
|||
|
Refile to last
|
|||
|
refile point
|
|||
|
,rl Refile the current subtree to the previously
|
|||
|
used location
|
|||
|
|
|||
|
Refile, jump to last
|
|||
|
refile point
|
|||
|
,rz Move cursor to the previously used refile
|
|||
|
location
|
|||
|
|
|||
|
Items may be refiled to an archive file. The archive has the same path
|
|||
|
and name as the originating file with '_archive' appended. Archived
|
|||
|
subtrees are appended to the end. Additional properties are added like
|
|||
|
the archival date and time.
|
|||
|
|
|||
|
Refile to archive
|
|||
|
,ra Refile to the end of the archive file
|
|||
|
associated with the current org file
|
|||
|
|
|||
|
Jump to archive
|
|||
|
,rv Open the archive file in a new tab.
|
|||
|
|
|||
|
|
|||
|
------------------------------------------------------------------------
|
|||
|
MARK *vimorg-mark*
|
|||
|
|
|||
|
Headings may be toggled to a "marked" state in either an .org buffer
|
|||
|
or in the agenda.
|
|||
|
Note that the keymap to mark a heading is different depending on
|
|||
|
whether you're in an .org buffer or in the Agenda:
|
|||
|
|
|||
|
In an .org buffer: ,<space>
|
|||
|
In the Agenda: <space>
|
|||
|
|
|||
|
In the Agenda certain operations will work on all marked headings --
|
|||
|
if any are marked -- otherwise only on current heading:
|
|||
|
|
|||
|
Date edits
|
|||
|
Todo edits
|
|||
|
Refiling
|
|||
|
|
|||
|
In an .org buffer these operations will operate on all marked
|
|||
|
headings:
|
|||
|
|
|||
|
Refiling
|
|||
|
Gathering
|
|||
|
|
|||
|
When operating on multiple marked headlines, the above operations will
|
|||
|
operate on all marks in any open .org buffer. I.e., they are not restricted
|
|||
|
to marks in the current .org buffer.
|
|||
|
|
|||
|
Also, when the operation is complete the headlines will all be toggled
|
|||
|
to an 'unmarked' state.
|
|||
|
|
|||
|
All 'marked' headlines may be toggled to 'unmarked' by choosing
|
|||
|
'Unmark all' from the 'Mark/Gather/Sort' menu in gvim, or with
|
|||
|
key combination of:
|
|||
|
,<c-space> in an .org buffer, or
|
|||
|
<c-space> in Agenda
|
|||
|
|
|||
|
'gathered' headings are normally placed after the last subhead of
|
|||
|
the heading from where 'gather' command is issued, but they will
|
|||
|
always be placed at top of subheads if g:org_reverse_note_order = 1
|
|||
|
|
|||
|
------------------------------------------------------------------------
|
|||
|
GATHERING *vimorg-gather*
|
|||
|
*vimorg-gather-sort*
|
|||
|
|
|||
|
'Gathering' refers to a process whereby all 'marked' headings are
|
|||
|
moved to be subheads of the current heading in an .org buffer.
|
|||
|
(Gather is not available from or to the Agenda buffer.)
|
|||
|
|
|||
|
A simple gather dashboard is accessed by pressing: ,g
|
|||
|
|
|||
|
'gather' can be thought of as a different way of doing 'refiling'.
|
|||
|
In refiling you mark all headings to be refiled to the same spot,
|
|||
|
then choose a refile operation to select a target heading to move them to.
|
|||
|
With 'gather' you mark all the headings, then simply move to the target
|
|||
|
heading and issue the 'gather' command.
|
|||
|
|
|||
|
The 'gather' operation can be accessed from the 'Mark/Gather/Sort'
|
|||
|
menu in gvim or by the key command: ,gh
|
|||
|
|
|||
|
------------------------------------------------------------------------
|
|||
|
GATHER AND SORT *vimorg-sort*
|
|||
|
|
|||
|
The 'sort' operation reorders subheadings of the current heading to
|
|||
|
be in alphabetical or reverse-alphabetical order. Normal order
|
|||
|
is (case-sensitive) alphabetical, reverse is used if the variable,
|
|||
|
g:org_reverse_note_order is equal to 1.
|
|||
|
|
|||
|
|
|||
|
------------------------------------------------------------------------
|
|||
|
KEYBINDINGS *vimorg-keybindings*
|
|||
|
|
|||
|
Keybindings are still a moving target. I'm happy to hear from people
|
|||
|
who think they've found better command bindings. You can look up bindings
|
|||
|
(1) in this help file, (2) in the menu in g(raphical)vim, which lists
|
|||
|
binding next to command you choose, and/or in the vimorg-main-mappings.vim
|
|||
|
and vimorg-agenda-mappings.vim scripts in the ftplugin directory. A few
|
|||
|
mappings, mostly agenda stuff, are also made in the main org.vim ftplugin
|
|||
|
file. The keybindings are messy and will be cleaned up at some point.
|
|||
|
|
|||
|
*vimorg-keybindings-terminal*
|
|||
|
TERMINAL KEYBINDINGS. It's important to understand that many of the
|
|||
|
default bindings are NOT available in many or all versions of vim running
|
|||
|
on terminals. This is the fault of the terminal for not handling the
|
|||
|
particular key combination. Here's a link to an Org-mode webpage listing
|
|||
|
common key combinations that are not available in terminals, with suggested
|
|||
|
Emacs alternatives. Vim keybindings are of course different (no crazy
|
|||
|
chord combinations), but the suggestions there might give you ideas for
|
|||
|
mappings you want to do for yourself:
|
|||
|
http://orgmode.org/manual/TTY-keys.html#TTY-keys
|
|||
|
|
|||
|
Below are the alternate mappings already in VimOrganizer for the most
|
|||
|
commonly-used key combinations that aren't available in terminals. They
|
|||
|
are found at the bottom of the file, vimorg-main-mappings.vim in the
|
|||
|
ftplugin folder:
|
|||
|
|
|||
|
,<tab> GlobalCycle (same as <shift-TAB> in gvim)
|
|||
|
(note default for ,<tab> is now to toggle between org buffer/Agenda buffer)
|
|||
|
gk Node navigate up (same as <alt-up>... )
|
|||
|
gj Node Navigate down (same as <alt-down>... )
|
|||
|
gh Node navigate left (same as <alt-left>... )
|
|||
|
gl Node navigate right (same as <alt-right>... )
|
|||
|
<< Promote heading tree (same as <ctrl-alt-left>... )
|
|||
|
>> Demote headng tree (same as <ctrl-alt-right>...)
|
|||
|
<, Move heading tree up (same as <ctrl-alt-up>... )
|
|||
|
>. Move headng tree down (same as <ctrl-alt-down>... )
|
|||
|
<localleader>np Add new heading node below at parent's level (<c-s-enter>)
|
|||
|
<localleader>ns Add new heading node below at subhead level (<c-enter>)
|
|||
|
|
|||
|
|
|||
|
------------------------------------------------------------------------
|
|||
|
HYPERLINKS *vimorg-hyperlinks* *vimorg-links*
|
|||
|
|
|||
|
VimOrganizer uses the same hyperlink markup style as Org-mode, but doesn't
|
|||
|
support as many types of links. You can read about the Org-mode link
|
|||
|
format here: http://orgmode.org/manual/Hyperlinks.html#Hyperlinks .
|
|||
|
|
|||
|
While you can add and edit links with VimOrganizer without it, to follow
|
|||
|
external links you must have the "Universal Text Linking" Vim plugin (UTL)
|
|||
|
installed. You can find it here:
|
|||
|
http://www.vim.org/scripts/script.php?script_id=293 .
|
|||
|
UTL itself does not use Org-mode compatible links, but it is used by
|
|||
|
VimOrganizer behind the scenes to follow links.
|
|||
|
|
|||
|
In general, an Org-mode formatted link looks like this:
|
|||
|
>
|
|||
|
[[link_specification][descriptive_link_name]
|
|||
|
|
|||
|
You can also use a link with no descriptive name:
|
|||
|
>
|
|||
|
[[link_specification]]
|
|||
|
|
|||
|
Here is an example that links to the Yahoo home page:
|
|||
|
>
|
|||
|
[[http://www.yahoo.com][Yahoo home page]]
|
|||
|
|
|||
|
If using a Vim version that has the 'conceal' feature, VimOrganizer allows
|
|||
|
you to set your display so that the brackets and the link specification
|
|||
|
are hidden, and you see only the highlighted *descriptive_link_name* .
|
|||
|
(If the link has a link-specification only, no descriptive name, then
|
|||
|
just the brackets will be hidden in conceal mode.)
|
|||
|
|
|||
|
|
|||
|
Add/edit link Allows you to edit a link in the command line.
|
|||
|
,le You are first prompted for the link
|
|||
|
specification, then press <Enter> and you
|
|||
|
will be prompted for a link name.
|
|||
|
|
|||
|
Follow link Will "follow" a link. With web URLs this
|
|||
|
,lf will open a browser, with files it will
|
|||
|
(or just press <Enter> open the file in an appropriate app if a
|
|||
|
cursor on the link) handler app has been defined. (UTL setup
|
|||
|
has default set of handlers and can be
|
|||
|
changed.) Internal links will move to
|
|||
|
associated spot within a vimorg document.
|
|||
|
|
|||
|
NOTE: The Org-mode format requires that
|
|||
|
the 'http://' prefix be included when specifying
|
|||
|
web urls. Links will fail if you don't
|
|||
|
include 'http://'.
|
|||
|
|
|||
|
Next link Moves to next link in the document.
|
|||
|
,ln
|
|||
|
|
|||
|
Previous link Moves to previous link in the document.
|
|||
|
,lp
|
|||
|
|
|||
|
Perma-compress links There are three types of link "compression".
|
|||
|
,lc All work only in Vim version 7.3 or later
|
|||
|
Auto-compress links that is compiled with the conceal feature.
|
|||
|
,la Perma-compress will keep the link com-
|
|||
|
Do not compress links pressed using Vim's conceal feature unless
|
|||
|
,lx you are Insert mode. (You can always edit
|
|||
|
a link directly in Insert mode as well as
|
|||
|
using the 'Add/edit link' function.)
|
|||
|
Auto-compress keeps link ends concealed
|
|||
|
in Normal mode except it automatically expands
|
|||
|
all links on the same line as the cursor.
|
|||
|
'Do not compress' option sets things to always
|
|||
|
show the entire link text (and is the only
|
|||
|
option that works in Vim versions prior to 7.3).
|
|||
|
|
|||
|
------------------------------------------------------------------------
|
|||
|
NARROWING REGIONS *vimorg-narrowing*
|
|||
|
|
|||
|
VimOrganizer uses Christian Brabandt's NrwRgn plugin to edit subsections
|
|||
|
of an outline in separate window. For outline sections this function is
|
|||
|
sometimes called "hoisting". There are two different kinds of narrowing: (1)
|
|||
|
narrowing of a subtree, and (2) narrowing of a code block.
|
|||
|
|
|||
|
Narrow heading tree ,na is the keysequence to narrow a region.
|
|||
|
,na If within a code block then the code block
|
|||
|
-- or -- will be chosen as the region to be narrowed.
|
|||
|
Narrow code block If not in a code block, then the current
|
|||
|
,na heading will be used to determine the
|
|||
|
narrowed region, with the heading and its
|
|||
|
entire subtree opened in the new window.
|
|||
|
If region is a code block, in most cases
|
|||
|
the language of the code block will be recognized
|
|||
|
and the new window will treat it as the
|
|||
|
appropriate filetype, with correct syntax
|
|||
|
highlighting and indenting.
|
|||
|
|
|||
|
When editing a narrowed region in a separate window, the main buffer will
|
|||
|
be uneditable and the region that was narrowed will be highlighted within it.
|
|||
|
The narrowed region in the separate window is in a buffer that is different
|
|||
|
from the buffer from the main document, so changes made in it are not
|
|||
|
immediately reflected in the original buffer. To save changes use the *write*
|
|||
|
command, *wq* to write and quit, or just *q* to abandon unsaved changes and
|
|||
|
return to original buffer. See help for |NarrowRegion| for more information.
|
|||
|
|
|||
|
|
|||
|
------------------------------------------------------------------------
|
|||
|
TABLES IN VIMORGANIZER *vimorg-tables-editing*
|
|||
|
|
|||
|
Tables in VimOrganizer work very much like they work in Org-mode.
|
|||
|
VimOrganizer uses some of the table code from the excellent VimWiki project.
|
|||
|
Other major parts of the table functionality come from calling directly
|
|||
|
to Org-mode in Emacs to evaluate or manipulate a table.
|
|||
|
|
|||
|
Regardless of the editing functionality available in VimOrganizer,
|
|||
|
the behavior of tables in export will be identical to what it is
|
|||
|
in Org-mode, since exports are in fact done by Org-mode.
|
|||
|
|
|||
|
Table operations are accessed through the Table Dashboard. You can open
|
|||
|
the dashboard with the command :OrgTableDashboard or the key sequence
|
|||
|
,b. The table dashboard is context-sensitive. Operations accessible
|
|||
|
on the table dashboard are as follows:
|
|||
|
|
|||
|
1. When cursor is on a blank line You are prompted to create
|
|||
|
a new table, which you can do
|
|||
|
by specifying rows and columns.
|
|||
|
|
|||
|
2. When cursor is on non-table text You will be prompted to create a
|
|||
|
table from the block of text you
|
|||
|
are on. The block is defined as
|
|||
|
the area between the previous
|
|||
|
blank line and the next blank
|
|||
|
line. This operation calls out
|
|||
|
to Org-mode and processes the
|
|||
|
text block with the elisp
|
|||
|
function 'org-convert-table-region'.
|
|||
|
The text will be split into a
|
|||
|
table based on the following rules:
|
|||
|
|
|||
|
a. If every line contains at least
|
|||
|
one TAB character, the function
|
|||
|
assumes that the material is tab
|
|||
|
separated.
|
|||
|
b. If every line contains a comma,
|
|||
|
comma-separated values (CSV) are
|
|||
|
assumed.
|
|||
|
c. If neither of above apply, lines
|
|||
|
are split at whitespace into fields.
|
|||
|
|
|||
|
3. When cursor is on a table. In this case a full dashboard is shown.
|
|||
|
All user options call out to Org-mode
|
|||
|
in Emacs to process the table. This is
|
|||
|
done even for relatively simple options,
|
|||
|
since the #+TBLFM line may change. See
|
|||
|
Org-mode documenation regading these
|
|||
|
options and how tables and spreadsheet
|
|||
|
functionality works:
|
|||
|
http://orgmode.org/manual/Tables.html#Tables
|
|||
|
|
|||
|
Dashboard operations: All of these operations depend on the
|
|||
|
position of the cusor within the table.
|
|||
|
|
|||
|
'COLUMN' operatons: l -- move column left
|
|||
|
r -- move column right
|
|||
|
e -- delete column
|
|||
|
o -- insert column
|
|||
|
|
|||
|
'ROW' operations d -- move row down
|
|||
|
u -- move row up
|
|||
|
x -- delete row
|
|||
|
i -- insert row
|
|||
|
|
|||
|
Insert horiontal line h -- insert a line below cursor
|
|||
|
|
|||
|
'RowSort' operations: All of the row sort operations operate
|
|||
|
on the current 'row-region' of the table.
|
|||
|
A row region is the range of rows
|
|||
|
including the cursor row up to (1)
|
|||
|
beginning-of-table or a horizontal line
|
|||
|
above, and down to (2) the end-of-table
|
|||
|
or a horizontal line below.
|
|||
|
|
|||
|
Available sorts are
|
|||
|
a -- alphabetical, a to z
|
|||
|
A -- reverse alphabetical, z-a
|
|||
|
n -- numeric, low to high
|
|||
|
N -- numeric, high to low
|
|||
|
|
|||
|
------------------------------------------------------------------------
|
|||
|
TABLE EVALUATION *vimorg-table-evaluation*
|
|||
|
|
|||
|
Spreadsheet functionality is supported by calling out to Org-mode
|
|||
|
in Emacs. You cause this by putting the cursor in a table and
|
|||
|
choosing '(T)able, E(v)aluate Table' from the menu in gvim, or
|
|||
|
by pressing |,v|. Evaluation will do two things:
|
|||
|
|
|||
|
(1) If cursor is in a table cell with a valid row/col
|
|||
|
formula, it will be moved into the #+TBLFM string.
|
|||
|
(2) Formulas defined in the TBLFM string will be
|
|||
|
evaluated and results will be placed in appropriate
|
|||
|
cells in the table.
|
|||
|
|
|||
|
Since the table is evaluated in Emacs, all of the spreadsheet
|
|||
|
formulas are evaluated as specified in the Org-mode manual:
|
|||
|
http://orgmode.org/manual/The-spreadsheet.html#The-spreadsheet
|
|||
|
|
|||
|
NOTE: Be sure to note that the default evaluation does _NOT_
|
|||
|
follow the rule of equal precedence of multiplication
|
|||
|
and division. Instead, division has lower precedence
|
|||
|
than multiplication:
|
|||
|
|
|||
|
2/3*4 == 2 / (3 * 4)
|
|||
|
|
|||
|
See: http://orgmode.org/manual/Formula-syntax-for-Calc.html#Formula-syntax-for-Calc
|
|||
|
|
|||
|
------------------------------------------------------------------------
|
|||
|
CLOCKING *vimorg-clocking*
|
|||
|
|
|||
|
Clocking means to record the amount time you spend on tasks.
|
|||
|
|
|||
|
,ci Clock in *vimorg-clock-in*
|
|||
|
|
|||
|
When you start work on an item, position the cursor on its headline and
|
|||
|
press ,ci. A property :CLOCK: with the current timestamp is added, to
|
|||
|
record the start time and to mark it as "open".
|
|||
|
|
|||
|
,co Clock out *vimorg-clock-out*
|
|||
|
|
|||
|
When you stop working on the current task, press ,co. You don't have to
|
|||
|
be positioned on the item. The currently open task will be searched in
|
|||
|
the current file or in all Agenda files (see |vimorg-agenda-files|). The
|
|||
|
end time will be recorded. The start time, end time and duration will be
|
|||
|
recorded in a :LOGBOOK: drawer like this:
|
|||
|
|
|||
|
:LOGBOOK:
|
|||
|
:CLOCK: [2010-07-11 Sun 20:30]--[2010-07-11 Sun 22:26] -> 1:56
|
|||
|
:END:
|
|||
|
|
|||
|
You can clock the same task multiple times and multiple :CLOCK: lines
|
|||
|
will accumulate in the logbook.
|
|||
|
|
|||
|
|
|||
|
========================================================================
|
|||
|
COLORS AND HIGHLIGHTING IN VIMORGANIZER *vimorg-colors*
|
|||
|
*vimorg-colorschemes*
|
|||
|
*vimorg-highlighting*
|
|||
|
|
|||
|
VimOrganizer works well with many different Vim colorschemes. It will
|
|||
|
automatically adjust highlighting for major items when a new
|
|||
|
colorscheme is loaded. Colors for heading lines are mapped to
|
|||
|
the colors a colorscheme sets for the following syntax items:
|
|||
|
>
|
|||
|
Outline Level 1 - Statement
|
|||
|
Outline Level 2 - Identifier
|
|||
|
Outline Level 3 - Constant
|
|||
|
Outline Level 4 - Comment
|
|||
|
Outline Level 5 - Special
|
|||
|
|
|||
|
Many elements in VimOrganizer documents have highlighting that is not
|
|||
|
affected by generic colorschemes. These include items like TODO
|
|||
|
keywords, tags, properties, configuration lines, etc.
|
|||
|
-------------------------------------------------------------------
|
|||
|
*vimorg-customizing-colors*
|
|||
|
The main way to change highlighting is to add a special function to your
|
|||
|
vimrc. This function is called when a VimOrganizer file is loaded
|
|||
|
and whenever a colorscheme is changed. It provides a spot to write
|
|||
|
your own highlight statements (see |highlight| ) to override the
|
|||
|
default settings.
|
|||
|
>
|
|||
|
function! OrgCustomColors()
|
|||
|
" various Org syntax item highlighting statements below
|
|||
|
" are the current defaults. Uncomment and edit a line if you
|
|||
|
" want different highlighting for the element.
|
|||
|
|
|||
|
" Below are defaults for any TODOS you define. TODOS that
|
|||
|
" come before the | in a definition will use 'NOTDONETODO'
|
|||
|
" and those that come after are DONETODO
|
|||
|
"hi! DONETODO guifg=green ctermfg=green
|
|||
|
"hi! NOTDONETODO guifg=red ctermfg=lightred
|
|||
|
|
|||
|
" Heading level highlighting is done in pairs, one for the
|
|||
|
" heading when unfolded and one for folded. Default is to make
|
|||
|
" them the same except for the folded version being bold:
|
|||
|
" assign OL1 pair for level 1, OL2 pair for level 2, etc.
|
|||
|
"hi! OL1 guifg=somecolor guibg=somecolor
|
|||
|
"hi! OL1Folded guifg=somecolor guibg=somecolor gui=bold
|
|||
|
|
|||
|
|
|||
|
" Tags are lines below headings that have :colon:separated:tags:
|
|||
|
"hi! Org_Tag guifg=lightgreen ctermfg=blue
|
|||
|
|
|||
|
" Lines that begin with '#+' in column 0 are config lines
|
|||
|
"hi! Org_Config_Line guifg=darkgray ctermfg=magenta
|
|||
|
|
|||
|
" Drawers are :PROPERTIES: and :LOGBOOK: lines and their associated
|
|||
|
" :END: lines
|
|||
|
"hi! Org_Drawer guifg=pink ctermfg=magenta
|
|||
|
"hi! Org_Drawer_Folded guifg=pink ctermfg=magenta gui=bold cterm=bold
|
|||
|
|
|||
|
" This applies to value names in :PROPERTIES: blocks
|
|||
|
"hi! Org_Property_Value guifg=pink ctermfg=magenta
|
|||
|
|
|||
|
" Three lines below apply to different kinds of blocks
|
|||
|
"hi! Org_Block guifg=#555555 ctermfg=magenta
|
|||
|
"hi! Org_Src_Block guifg=#555555 ctermfg=magenta
|
|||
|
"hi! Org_Table guifg=#888888 guibg=#333333 ctermfg=magenta
|
|||
|
|
|||
|
" Dates are date specs between angle brackets (<>) or square brackets ([])
|
|||
|
"hi! Org_Date guifg=magenta ctermfg=magenta gui=underline cterm=underline
|
|||
|
|
|||
|
" Org_Star is used to "hide" initial asterisks in a heading
|
|||
|
"hi! Org_Star guifg=#444444 ctermfg=darkgray
|
|||
|
|
|||
|
"hi! Props guifg=#ffa0a0 ctermfg=gray
|
|||
|
|
|||
|
" Bold, italics, underline, and code are highlights applied
|
|||
|
" to character formatting
|
|||
|
"hi! Org_Code guifg=darkgray gui=bold ctermfg=14
|
|||
|
"hi! Org_Itals gui=italic guifg=#aaaaaa ctermfg=lightgray
|
|||
|
"hi! Org_Bold gui=bold guifg=#aaaaaa ctermfg=lightgray
|
|||
|
"hi! Org_Underline gui=underline guifg=#aaaaaa ctermfg=lightgray
|
|||
|
"hi! Org_Lnumber guifg=#999999 ctermfg=gray
|
|||
|
|
|||
|
" These lines apply to links: [[link]], and [[link][link desc]]
|
|||
|
"if has("conceal")
|
|||
|
" hi! default linkends guifg=blue ctermfg=blue
|
|||
|
"endif
|
|||
|
"hi! Org_Full_Link guifg=cyan gui=underline ctermfg=lightblue cterm=underline
|
|||
|
"hi! Org_Half_Link guifg=cyan gui=underline ctermfg=lightblue cterm=underline
|
|||
|
|
|||
|
" Applies to the Heading line that can be displayed in column view
|
|||
|
"highlight OrgColumnHeadings guibg=#444444 guifg=#aaaaaa gui=underline
|
|||
|
|
|||
|
endfunction
|
|||
|
----------------------------------------------------------------------
|
|||
|
CUSTOM TODO HIGHLIGHTING *vimorg-custom-todo-highlights*
|
|||
|
|
|||
|
VimOrganizer will automatically highlight DONETODOs and NOTDONETODOs with
|
|||
|
a default color, or color you assign in OrgCustomColors(). If you
|
|||
|
want to assign custom highlighting for one or more TODOs then
|
|||
|
you need to create a dictionary with appropriate values.
|
|||
|
Below is an illustration:
|
|||
|
|
|||
|
|
|||
|
Problem: You want to create custom highlights for the NEXT
|
|||
|
and WAITING todos in the todo setup of: >
|
|||
|
'TODO NEXT WAITING | DONE CANCELED'
|
|||
|
<
|
|||
|
Solution: put statement like the one below in OrgCustomColors()
|
|||
|
function in your vimrc, (or somewhere in vimrc below
|
|||
|
the OrgCustomColors() func, if any):
|
|||
|
>
|
|||
|
let g:org_todo_custom_highlights =
|
|||
|
\ { 'NEXT': { 'guifg':'#888888', 'guibg':'#222222',
|
|||
|
\ 'ctermfg':'gray', 'ctermbg':'darkgray'}
|
|||
|
\ 'WAITING': { 'guifg':'red',
|
|||
|
\ 'ctermfg':'red' } }
|
|||
|
|
|||
|
NOTE: (1) Vim has specific punctuation in its dictionary assignments.
|
|||
|
Each of the keys in the statement above is a string,
|
|||
|
and keys are separated from their values by a colon.
|
|||
|
(2) You can override one or more of the highlight items:
|
|||
|
guifg, guibg, ctermfg, ctermbg
|
|||
|
|
|||
|
========================================================================
|
|||
|
SEARCHES AND THE AGENDA *vimorg-agenda* *vimorg-searches*
|
|||
|
|
|||
|
The agenda is a buffer where VimOrganizer gathers heading lines from
|
|||
|
one or more buffers in response to various kinds of searches. The content
|
|||
|
of the agenda doesn't just show you the results of your search, it also
|
|||
|
gives you the means to quickly view or jump to any of the "found" headings,
|
|||
|
as well as providing a means to remotely edit them, i.e., effect changes in
|
|||
|
the original buffer by making changes in the agenda.
|
|||
|
|
|||
|
Here is how the Org-mode manual introduces the agenda:
|
|||
|
-----------------------------------------
|
|||
|
"Due to the way Org works, TODO items, time-stamped items,
|
|||
|
and tagged headlines can be scattered throughout a file or
|
|||
|
even a number of files. To get an overview of open action
|
|||
|
items, or of events that are important for a particular
|
|||
|
date, this information must be collected, sorted and
|
|||
|
displayed in an organized way."
|
|||
|
|
|||
|
"Org can select items based on various criteria and display
|
|||
|
them in a separate buffer. Seven different view types
|
|||
|
are provided:"
|
|||
|
|
|||
|
"- an agenda that is like a calendar and shows
|
|||
|
information for specific dates,
|
|||
|
- a TODO list that covers all unfinished action items,
|
|||
|
- a match view, showings headlines based on the tags,
|
|||
|
properties, and TODO state associated with them,
|
|||
|
- a timeline view that shows all events in a single
|
|||
|
Org file, in time-sorted view,
|
|||
|
[. . .]
|
|||
|
- custom views that are special searches and
|
|||
|
combinations of different views."
|
|||
|
from http://orgmode.org/manual/Agenda-Views.html#Agenda-Views
|
|||
|
------------------------------------------
|
|||
|
|
|||
|
VimOrganizer currently supports versions of the
|
|||
|
above-mentioned agenda views, doesn't yet support the
|
|||
|
'text search view' or the 'stuck projects view'.
|
|||
|
|
|||
|
---------------------------------------------------------------------------
|
|||
|
AGENDA FILES *vimorg-agenda-files*
|
|||
|
|
|||
|
When VimOrganizer runs a search to generate an agenda view, it searches
|
|||
|
files that are included in the 'agenda files' list. If a file in agenda
|
|||
|
files list has not yet been loaded, it will be loaded as part of the
|
|||
|
search.
|
|||
|
|
|||
|
The variable, g:agenda_files holds the list of agenda files.
|
|||
|
You can enter values for g:agenda_files in your vimrc, e.g.,
|
|||
|
>
|
|||
|
:let g:agenda_files = ['c:/path/myfile1.org','c:/path/myfile2.org']
|
|||
|
|
|||
|
There is a bare-bones agenda-editing mechanism that works like this:
|
|||
|
|
|||
|
(1) Put your .org working directories in list g:agenda_dirs. Mine is in my
|
|||
|
vimrc and includes a single directory:
|
|||
|
>
|
|||
|
:let g:agenda_dirs=["c:/users/herbert/documents/org-files"]
|
|||
|
|
|||
|
(2) Then to edit your agenda files issue this command
|
|||
|
>
|
|||
|
:EditAgendaFiles
|
|||
|
<
|
|||
|
This will open a new tab and show your current agenda files along with a list
|
|||
|
of all org files in your agenda dirs. Simply copy or move files from the
|
|||
|
agenda dirs list to the top and when done press :W (that's a capital 'W').
|
|||
|
|
|||
|
You can also use Vimscript to add files to g:agenda_files. For
|
|||
|
example, putting something like the following lines in your vimrc would
|
|||
|
always fill g:agenda_files upon startup:
|
|||
|
>
|
|||
|
let g:org_agenda_files = split(glob("~/documents/org_files/*.org"),"\n")
|
|||
|
|
|||
|
HINT: use the '+=' operator if you want to append these entries to those
|
|||
|
already in g:org_agenda_files. E.g.,
|
|||
|
>
|
|||
|
let g:org_agenda_files += split(glob("~/documents/org_files/*.org"),"\n")
|
|||
|
|
|||
|
The 'agenda files dashboard' includes more commands that let you add,
|
|||
|
remove, or rearrange files in the list of agenda files. You can bring
|
|||
|
up this dashboard with the ',af' keymap, which will present these options:
|
|||
|
|
|||
|
e Edit agenda files
|
|||
|
t Current file to top of agenda file list
|
|||
|
b Current file to bottom of agenda file list
|
|||
|
r Remove Current file from agenda file list
|
|||
|
|
|||
|
The 'agenda files dashboard' also has commands that let you navigate
|
|||
|
among org buffers, see: |vimorg-files-navigating|
|
|||
|
----------------------------------------------------------------------
|
|||
|
THE AGENDA DASHBOARD *vimorg-agenda-dashboard*
|
|||
|
|
|||
|
The agenda_dashboard provides a user-interface for issuing different
|
|||
|
kinds of agenda searches. Below is a list of the different commands
|
|||
|
you can issue from the dashboard:
|
|||
|
|
|||
|
a This will search agenda files for headings with dates
|
|||
|
that fall in the current week. The resulting agenda allows
|
|||
|
you to issue more commands to change the view:
|
|||
|
|
|||
|
vd, vw, vm, vy -- Sets view period. The 'a'
|
|||
|
command always starts with
|
|||
|
a week view, but you can change
|
|||
|
it to show single day (vd),
|
|||
|
single month (vm), or year (vy).
|
|||
|
[<num>]f, [<num>]b -- forward and backward to next
|
|||
|
or previous view period. Optional
|
|||
|
number prefix to specify number
|
|||
|
of periods to jump. E.g., issuing
|
|||
|
3f when view is a month view
|
|||
|
of August 2011 would jump forward
|
|||
|
three months and show month view
|
|||
|
of November 2011.
|
|||
|
|
|||
|
t Assembles a list of headings marked as todo items. Top line
|
|||
|
of agenda provides menu that allows you to press a number
|
|||
|
to rerun the search limiting results to certain todo items.
|
|||
|
UNFINISHED_TODOS will match whichever tags are before the '|'
|
|||
|
in a buffer's todo spec, so may match multiple TODO items.
|
|||
|
Likewise, FINISHED_TODOS will match whichever todos occur
|
|||
|
_after_ the '|' in a buffer's todo setup.
|
|||
|
|
|||
|
m Tags/TODO/Property match. Prompts you for a search
|
|||
|
specification in command line and retrieves headings
|
|||
|
with matching metadata. See |vimorg-tags-search| .
|
|||
|
|
|||
|
c Show the 'custom searches' menu.
|
|||
|
See |vimorg-agenda-custom-searches|
|
|||
|
|
|||
|
--------------------------------------------------------------------
|
|||
|
AGENDA WINDOW POSITION *vimorg-agenda-window-position*
|
|||
|
|
|||
|
Location of the agenda window can be controlled by setting the
|
|||
|
g:org_agenda_window_position variable. Possible values are
|
|||
|
'top', 'bottom', 'left', 'right'. The default position is
|
|||
|
'bottom'.
|
|||
|
-------------------------------------------------------------------
|
|||
|
INCLUDING CLOCKTABLE IN AGENDA *vimorg-agenda-include-clocktable*
|
|||
|
|
|||
|
You can have a clocktable included in agendas by setting the
|
|||
|
variable below to 1 (default is 0). When set, agenda searches
|
|||
|
that are of 'agenda' type (i.e., not just todo/tags/properties)
|
|||
|
will include a clocktable after the regular view. The clocktable
|
|||
|
will be for a period equal to the period of time shown
|
|||
|
in the agenda view:
|
|||
|
>
|
|||
|
Include clocktable: g:org_agenda_include_clocktable = 1
|
|||
|
Don't include: g:org_agenda_include_clocktable = 0
|
|||
|
|
|||
|
--------------------------------------------------------------------
|
|||
|
KEYMAPPINGS IN THE AGENDA *vimorg-agenda-keys*
|
|||
|
|
|||
|
Some keys have special operation in the Agenda:
|
|||
|
|
|||
|
<enter> - pressing <enter> on a heading in agenda
|
|||
|
will (1) switch (if necessary) to show
|
|||
|
the chosen heading's buffer in window
|
|||
|
above the agenda, (2) fully fold the
|
|||
|
heading's entire buffer, and (3) position
|
|||
|
buffer at heading and unfold the chosen
|
|||
|
heading. The cursor remains in the agenda
|
|||
|
but you can see the synched heading in
|
|||
|
window above.
|
|||
|
<ctl-enter> - Will stay in the Agenda's window and
|
|||
|
switch to the chosen heading's buffer
|
|||
|
with cursor positioned at heading.
|
|||
|
<tab> - will toggle heading's text in its
|
|||
|
original buffer (different from previous
|
|||
|
versions where <tab> would toggle text
|
|||
|
into the agenda buffer itself. . .)
|
|||
|
<shift-tab> - Will cycle through the heading's todo
|
|||
|
items, simultaneously also changing the
|
|||
|
heading in its original buffer. The
|
|||
|
cycling is smart enough to use the todo
|
|||
|
setup of each original buffer, so
|
|||
|
different headings in agenda may cycle
|
|||
|
different todo items.
|
|||
|
q - close agenda window
|
|||
|
r - rerun the search, in case you have
|
|||
|
changed data and want to get new
|
|||
|
view. Will use dates and view of the
|
|||
|
results currently showing in the fifth
|
|||
|
line of the agenda, including a filter
|
|||
|
specification, which may be changed
|
|||
|
before refreshing. For example, to
|
|||
|
refresh agenda to show only unfinished
|
|||
|
todo items, change text after 'FILTER:'
|
|||
|
to be +UNFINISHED_TODOS.
|
|||
|
,d Invokes the date dashboard, allowing you
|
|||
|
to remotely edit or add to the heading's dates
|
|||
|
in the original buffer.
|
|||
|
---------------------------------------------------------------
|
|||
|
TAGS-TODO-PROPERTY SEARCH *vimorg-tags-search*
|
|||
|
|
|||
|
You can enter a tags/todo search that will search
|
|||
|
various various parts of each heading's metadata
|
|||
|
and return the results in the agenda.
|
|||
|
Here are some examples that
|
|||
|
illustrate the syntax:
|
|||
|
>
|
|||
|
Enter search string: +work
|
|||
|
selects headlines tagged ':work:'
|
|||
|
>
|
|||
|
Enter search string: +work-boss
|
|||
|
< selects headlines tagged ':work:', but
|
|||
|
excludes those also tagged ':boss:'.
|
|||
|
>
|
|||
|
Enter search string: +work|+boss (or just work|boss)
|
|||
|
< selects headlines tagged ':work:' or ':boss:'
|
|||
|
>
|
|||
|
Enter search string: +work|+laptop+night
|
|||
|
< selects headlines tagged ':work:' or
|
|||
|
both ':laptop:' and ':night:'
|
|||
|
|
|||
|
The examples above are search tags, but you can include
|
|||
|
searches for todo items in the same way:
|
|||
|
>
|
|||
|
Enter search string: +work+TODO
|
|||
|
< selects headlines tagged ':work:' that
|
|||
|
are marked with 'TODO' status.
|
|||
|
(e.g., * TODO My work item
|
|||
|
:work: )
|
|||
|
>
|
|||
|
Enter search string: +work+DONE
|
|||
|
< selects headlines tagged ':work:' that
|
|||
|
are marked with 'DONE' status.
|
|||
|
(e.g., * DONE My work item
|
|||
|
:work: )
|
|||
|
|
|||
|
Instead of a tag, you may also specify a regular expression enclosed
|
|||
|
in curly braces. For example:
|
|||
|
>
|
|||
|
Enter search string: +work+{boss.*}
|
|||
|
< selects headlines that contain the tag ':work:'
|
|||
|
and any tag starting with <20>:boss<73>. (Note: unlike
|
|||
|
the similar search in Org-mode, there should be
|
|||
|
_no_ initial '^'.)
|
|||
|
|
|||
|
You may also search for properties at the search string. Properties
|
|||
|
may be ones you have entered yourself ( see |vimorg-properties| ) or
|
|||
|
one of a set of special properties that all headings have. E.g.,
|
|||
|
'LEVEL' is a built-in property that indicates the outline level of a
|
|||
|
heading, so you could do this:
|
|||
|
>
|
|||
|
Enter search string: +work+LEVEL=2
|
|||
|
< selects headlines at level 2 that are
|
|||
|
also tagged ':work:'
|
|||
|
|
|||
|
Here is an example of a complex search string, which assumes
|
|||
|
the user has entered a 'WITH' property and an 'EFFORT'
|
|||
|
property for some headings:
|
|||
|
>
|
|||
|
+work-boss+EFFORT<2+WITH={Sarah\|George}+DEADLINE>="2011-11-13"
|
|||
|
<
|
|||
|
The type of comparison done depends on how the comparison value is written:
|
|||
|
|
|||
|
- If the comparison value is a plain number, a numerical comparison is
|
|||
|
done, and the allowed operators are <20><<3C>, <20>=<3D>, <20>><3E>, <20><=<3D>, <20>>=<3D>, and
|
|||
|
<20>!=<3D>.
|
|||
|
- If the comparison value is enclosed in double-quotes, a string
|
|||
|
comparison is done, and the same operators are allowed.
|
|||
|
- If the comparison value is enclosed in double-quotes and angular
|
|||
|
brackets (like <20>DEADLINE<="<2008-12-24 18:30>"<22>), both values are
|
|||
|
assumed to be date/time specifications in the standard way,
|
|||
|
and the comparison will be done accordingly.
|
|||
|
- If the comparison value is enclosed in curly braces, a regexp match
|
|||
|
is performed, with <20>=<3D> meaning that the regexp matches the property
|
|||
|
value, and <20>!=<3D> meaning that it does not match.
|
|||
|
|
|||
|
---------------------------------------------------------------
|
|||
|
CUSTOM SEARCHES *vimorg-agenda-custom-searches*
|
|||
|
|
|||
|
Any number of custom searches can be defined and accessed from the
|
|||
|
'custom searches' menu, which can be accessed from the agenda
|
|||
|
dashboard, from the Org menu in gvim, or directly via the ,ac
|
|||
|
keymapping.
|
|||
|
|
|||
|
Custom searches are stored in a list variable:
|
|||
|
'g:org_custom_searches'. You create new custom searches
|
|||
|
by adding them to that list. Here is an example an assigment
|
|||
|
that could be put in your vimrc to define a number of custom
|
|||
|
searches, which I will explain below:
|
|||
|
>
|
|||
|
let g:org_custom_searches = [
|
|||
|
\ { 'name':"Next week's agenda", 'type':'agenda',
|
|||
|
\ 'agenda_date':'+1w', 'agenda_duration':'w' }
|
|||
|
\ ,{ 'name':"Next week's TODOS", 'type':'agenda',
|
|||
|
\ 'agenda_date':'+1w', 'agenda_duration':'w',
|
|||
|
\ 'spec':'+UNFINISHED_TODOS' }
|
|||
|
\ ,{ 'name':'Home tags', 'type':'tags', 'spec':'+HOME' }
|
|||
|
\ ,{ 'name':'Home tags', 'type':'sparse_tree', 'spec':'+HOME' }
|
|||
|
\ ,[ { 'name':"Next week's agenda", 'type':'agenda',
|
|||
|
\ 'agenda_date':'+1w', 'agenda_duration':'w' }
|
|||
|
\ ,{ 'name':'Home tags', 'type':'tags', 'spec':'+HOME' }
|
|||
|
\ ]
|
|||
|
\ ]
|
|||
|
<
|
|||
|
The assignment above creates five different custom searches.
|
|||
|
Basic searches are dictionaries containing key/value items that
|
|||
|
specify the search. Each search must be given a name and a type.
|
|||
|
|
|||
|
AGENDA-TYPE CUSTOM SEARCHES *vimorg-custom-agenda*
|
|||
|
----------------------------
|
|||
|
The first two searches are 'agenda' type searches, which means their
|
|||
|
results are shown in the agenda organized by date with same
|
|||
|
functionality as the usual agenda view. You have to assign a
|
|||
|
name and specify their 'type' as 'agenda'; their other values
|
|||
|
described below ('agenda-date', 'agenda-duration', and 'spec')
|
|||
|
are optional.
|
|||
|
|
|||
|
The 'agenda-date' value defines the starting date. This date may be
|
|||
|
specified explicitly, (e.g., '2012-01-13') or you can use any cue
|
|||
|
that works on the date-time prompt command line (e.g., '+1w' for
|
|||
|
starting date of 1 week from today, '+36d', '-1y', '+24m', etc.
|
|||
|
-- most of the cues here are supported:
|
|||
|
http://orgmode.org/manual/The-date_002ftime-prompt.html#The-date_002ftime-prompt
|
|||
|
|
|||
|
The agenda-duration value defaults to a week ('w') if not specified,
|
|||
|
but you can otherwise assign a number to represent the number of days
|
|||
|
that should be displayed in the agenda view.
|
|||
|
|
|||
|
The 'spec' in an agenda-type search allows you to specify additonal
|
|||
|
restrictions on headings that will be included in the agenda view.
|
|||
|
This 'spec' works identically to the specification for ad-hoc
|
|||
|
searches that you can enter from the agenda-dashboard, see:
|
|||
|
|vimorg-tags-search|.
|
|||
|
|
|||
|
TAGS-TYPE CUSTOM SEARCHES *vimorg-custom-tags*
|
|||
|
-------------------------
|
|||
|
These searches are like the 'TAGS/PROPS/TODO' queries that you can
|
|||
|
specify on the fly from the agenda dashboard. You have to
|
|||
|
specify a name, the 'type' of 'tags', and then the 'spec' for the
|
|||
|
search. 'Spec' works just as described here:
|
|||
|
|vimorg-tags-search|.
|
|||
|
|
|||
|
SPARSETREE TYPE CUSTOM SEARCHES *vimorg-custom-sparse_tree*
|
|||
|
--------------------------------
|
|||
|
The fourth search in the above assignment to g:org_custom_searches is
|
|||
|
has the 'name' of 'Home tags' and is a search of 'type' 'sparse_tree'.
|
|||
|
This search is a pre-defined version of a search that can be run as a
|
|||
|
'Freeform . . . sparse tree search' from the agenda dashboard. 'Spec'
|
|||
|
works the same as it does for other searches.
|
|||
|
|
|||
|
BLOCK SEARCHES *vimorg-agenda-block-search*
|
|||
|
--------------
|
|||
|
The first four searches assigned to g:org_custom_searches, above, are
|
|||
|
"simple" searches, in that they pre-define searches that correspond to
|
|||
|
one of the agenda views accessible from the agenda dashboard.
|
|||
|
Pre-defined block searches allow you to include the results of two or
|
|||
|
more "simple" searches in a single agenda view. These searches are
|
|||
|
defined by adding a list item in square brackes '[]' to
|
|||
|
g:org_custom_searches, which contains two or more dictionaries
|
|||
|
specifying agenda-type or tags-type simple searches.
|
|||
|
|
|||
|
==============================================================================
|
|||
|
NAVIGATING AMONG ORG FILES *vimorg-files-navigating*
|
|||
|
|
|||
|
VimOrganizer provides several ways of moving directly between org files,
|
|||
|
which are often preferable to using built-in Vim commands. This is
|
|||
|
largely because VimOrganizer works best when all org files are open
|
|||
|
on separate tabs (see Note 2 below). Most of these
|
|||
|
VimOrganizer commands work between files included in the list of 'agenda
|
|||
|
files'. The commands are listed on the 'agenda files' dashboard:
|
|||
|
|
|||
|
Key mapping Operation
|
|||
|
,af Show 'agenda files' dashboard
|
|||
|
|
|||
|
Here is the 'agenda files' dashboard:
|
|||
|
>
|
|||
|
Press key for an agenda files command:
|
|||
|
--------------------------------------
|
|||
|
e Edit agenda files
|
|||
|
t Current file to top of agenda file list
|
|||
|
b Current file to bottom of agenda file list
|
|||
|
r Remove Current file from agenda file list
|
|||
|
n or f Cycle to next file in agenda files
|
|||
|
p or b Cycle to previous file in agenda files
|
|||
|
c or g Choose agenda file or org file to goto
|
|||
|
|
|||
|
Note 1: The 'c or g' choice above provides a list of open org buffers; it is
|
|||
|
_not_ limited to the list of agenda files.
|
|||
|
|
|||
|
Note 2: You can of course use any means Vim provides to navigate among
|
|||
|
Org buffers. Because of the way VimOrganizer works, however, you may want
|
|||
|
to keep org files open on different tabs rather than switching to different
|
|||
|
buffers within the current window. VimOrganizer depends on folding that
|
|||
|
must be recalculated whenever a buffer is loaded into a window. For large
|
|||
|
files these recalculations can take several seconds, thus making quick
|
|||
|
navigation between buffers in the same window impossible. This problem
|
|||
|
is avoided if you keep org files open on different tabs, where switching
|
|||
|
between them is instantaneous. Many Vim plugins are available to
|
|||
|
make file/buffer navigation faster and easier (e.g., Fuzzy Finder,
|
|||
|
BufExplorer, etc.). If you use a plugin you will probably want to configure it
|
|||
|
so that the default method of switching to a buffer is to move to a tab
|
|||
|
with the desired buffer (rather than moving to new buffer while staying
|
|||
|
in current window).
|
|||
|
|
|||
|
==============================================================================
|
|||
|
COLUMN VIEW *vimorg-column-view*
|
|||
|
|
|||
|
Column view in VimOrganizer is similar to the feature having the same name
|
|||
|
in Org-mode, but different in important ways. At its core it simply offers
|
|||
|
a way to reveal data about a heading when it is displayed as a fold.
|
|||
|
Folded heading lines in Vim are not directly editable. (A user interface
|
|||
|
to allow easy editing of columns/properties is on VimOrganizer's todo list.)
|
|||
|
|
|||
|
The default display in VimOrganizer (i.e., colmns off) merely shows the
|
|||
|
number of lines in a fold along the right margin. Column view can be turned
|
|||
|
on or off in each buffer, but to make each buffer default to on you can place
|
|||
|
this line in your vimrc:
|
|||
|
>
|
|||
|
let g:global_column_view = 1
|
|||
|
|
|||
|
Specification of COLUMNS is similar to Org-mode, except that ITEM is
|
|||
|
always included, although length settings for ITEM are always ignored.
|
|||
|
This is because the ITEM display is automatically truncated to make
|
|||
|
space for the other columns, and ITEM will automatically expand or
|
|||
|
contract if you resize the Vim window. The column definition string
|
|||
|
format is identical to that used by Org-mode, although the optional
|
|||
|
'summary-type' attribute is currently ignored in VimOrganizer. See:
|
|||
|
http://orgmode.org/manual/Defining-columns.html#Defining-columns
|
|||
|
|
|||
|
The built-in global default for column view is to show any TAGS flush
|
|||
|
left in a 35 character column. You can modify that be setting a global
|
|||
|
default in your vimrc. The built-in default would look like this:
|
|||
|
>
|
|||
|
let g:global_column_defaults = '%ITEM %35TAGS'
|
|||
|
|
|||
|
A default that would show the DEADLINE value in addition to TAGS might
|
|||
|
look like this:
|
|||
|
>
|
|||
|
let g:global_column_defaults = '%ITEM %15DEADLINE %30TAGS'
|
|||
|
|
|||
|
--------------------------------------------------------------------------
|
|||
|
COLUMNS DASHBOARD *vimorg-columns-dashboard*
|
|||
|
|
|||
|
You can access the column dashboard by pressing ,m or by entering the command
|
|||
|
:OrgColumns. The dashboard shows you the current relevant settings and
|
|||
|
allows you to change them:
|
|||
|
|
|||
|
buffer default columns -- These defaults are taken either
|
|||
|
from the global defaults, or from the
|
|||
|
settings in a columns configuration
|
|||
|
line in a document.
|
|||
|
current default columns -- The current settings, which may reflect
|
|||
|
custom default settings
|
|||
|
column view on -- Will be ON/OFF
|
|||
|
Show column headers -- Will be ON/OFF
|
|||
|
heading line count -- Will be ON/OFF, refers to whether the
|
|||
|
count of heading lines shows at right
|
|||
|
margin for a folded heading. Can be
|
|||
|
ON even if column view is OFF.
|
|||
|
>
|
|||
|
Operations on Columns dashboard
|
|||
|
-----------------------
|
|||
|
f -- Force all of buffer to use settings. If
|
|||
|
not chosen then (1) only the current subtree will be
|
|||
|
placed into column, or (2) entire buffer
|
|||
|
will be in column view if cursor is in
|
|||
|
front of the first heading in the document.
|
|||
|
r -- Revert to buffer defaults, if defaults have
|
|||
|
been changed
|
|||
|
t -- Toggle column view ON/OFF
|
|||
|
h -- Toggle column headings ON/OFF
|
|||
|
l -- Toggle line count ON/OFF
|
|||
|
<
|
|||
|
*org_columns_custom_list*
|
|||
|
Custom column options will then be listed. If no custom options have
|
|||
|
been assigned in the vimrc, then built-in behavior is to have two
|
|||
|
options as if the user had the line below in their vimrc. This line
|
|||
|
defines a list of two custom column strings, one having a
|
|||
|
DEADLINE and a TAGS column, the second having just a DEADLINE column:
|
|||
|
>
|
|||
|
let *g:org_custom_column_options* = ['%ITEM %14DEADLINE %30TAGS',
|
|||
|
\ '%ITEM %14DEADLINE']
|
|||
|
<
|
|||
|
g:org_custom_column_options is a list containing column format
|
|||
|
strings. Each format string will be listed on the dashboard
|
|||
|
with a number in front of it, and can be accessed by pressing
|
|||
|
the key for that number (0-9). The format strings are constructed of
|
|||
|
pairs of 'metadata field,format for field' with additional pairs
|
|||
|
also separated by commas. The format options used are the same as those
|
|||
|
of the |printf| function, which is used to format the columns internally.
|
|||
|
--------------------------------------------------------------------------
|
|||
|
COLUMNS CONFIG LINE *vimorg-columns-config-line*
|
|||
|
|
|||
|
Any document may have a line that sets the default column settings
|
|||
|
for the document. This will override any global default that has been
|
|||
|
set. The format allows for a single string, with settings like
|
|||
|
those described above for g:org_custom_column_options. An example
|
|||
|
COLUMNS config would look like this. Note that the '#' must be in the
|
|||
|
leftmost column of the text:
|
|||
|
>
|
|||
|
#+COLUMNS: DEADLINE,%-14s,TAGS,%-30s
|
|||
|
|
|||
|
---------------------------------------------------------------------
|
|||
|
COLUMNS PROPERTY *vimorg-columns-property*
|
|||
|
|
|||
|
Columns properties work like how they work in Org-mode. You can set
|
|||
|
a COLUMNS property in the property block of a heading. That setting
|
|||
|
will (1) override any default or custom settings for the buffer (unless
|
|||
|
you enter a buffer-wide columns mode with cursor not on the heading), and
|
|||
|
(2) be inherited by subheadings of of that heading. (Also, you
|
|||
|
can force entire buffer to use a headings COLUMNS property by
|
|||
|
choosing 'f' on columns dashboard.) For example, entering columns
|
|||
|
mode withe the cursor on 'Heading One' below below would display
|
|||
|
folded lines with just a DEADLINE column, regardless of what the
|
|||
|
settings were in the rest of the document:
|
|||
|
>
|
|||
|
* Heading One
|
|||
|
:PROPERTIES:
|
|||
|
:COLUMNS: %ITEM %14DEADLINE
|
|||
|
:END:
|
|||
|
** Subhead One
|
|||
|
Text for Subhead One
|
|||
|
** Subhead Two
|
|||
|
Some text for Subhead Two
|
|||
|
|
|||
|
==============================================================================
|
|||
|
VIMORGANIZER EXPORT *vimorg-export*
|
|||
|
*vimorg-print*
|
|||
|
*vimorg-export-to-html*
|
|||
|
*vimorg-export-to-pdf*
|
|||
|
|
|||
|
VimOrganizer calls out to Org-mode in Emacs for all exports. To print
|
|||
|
a VimOrganizer file the recommended method is to export to a format that
|
|||
|
is better for printing.
|
|||
|
|
|||
|
The Export Dashboard can be opened from the menu in gvim ('Export/Publish')
|
|||
|
or with the key mapping |,x| .
|
|||
|
The VimOrganizer Export Dashboard is similar to Org-mode's export
|
|||
|
dispatcher, and the best way to learn about it is to read the Org-mode
|
|||
|
documentation:
|
|||
|
http://orgmode.org/manual/Exporting.html#Exporting
|
|||
|
|
|||
|
*vimorg-export-microsoft-word*
|
|||
|
*vimorg-export-opendocument*
|
|||
|
*vimorg-export-openoffice*
|
|||
|
*vimorg-export-docx*
|
|||
|
The Export Dashboard includes an option for export to OpenDocument
|
|||
|
format. This option creates an odt document that can then be
|
|||
|
edited by (recent version) of Microsoft Word or OpenOffice.
|
|||
|
Once into Word, OpenOffice, or LibreOffice the document can
|
|||
|
be saved as a .doc or .docx file.
|
|||
|
Export of items into odt supports objects like images, tables,
|
|||
|
and footnotes in addition to highlighting and other simple formatting.
|
|||
|
The odt export currently (November 2011) requires special configuration
|
|||
|
of your Emacs install. Instructions are here:
|
|||
|
http://orgmode.org/manual/OpenDocumentText-export.html#OpenDocumentText-export
|
|||
|
|
|||
|
*vimorg-publishing*
|
|||
|
As in Org-mode, VimOrganizer's Export Dashboard also includes
|
|||
|
options for "publishing" a project. A "project" is a set of
|
|||
|
related documents that you set up to be automatically exported
|
|||
|
together, which is called "publishing" the project. The
|
|||
|
publishing options on the VimOrganizer's Export Dashboard
|
|||
|
simply call Emacs to process files so the Org-mode documentation for
|
|||
|
publishing is best way to learn about them. Setting up a project
|
|||
|
requires some fairly simple configuration using lisp statements
|
|||
|
added to the .emacs file, which is Emacs' counterpart to Vim's vimrc:
|
|||
|
http://orgmode.org/manual/Publishing.html#Publishing
|
|||
|
|
|||
|
*vimorg-tangling*
|
|||
|
*vimorg-literate-programming*
|
|||
|
Another option on the Export Dashboard is 'tangle'. This operation
|
|||
|
extracts source code blocks from an org document and saves them so
|
|||
|
they're in a format that can be (1) executed by an interpreter or
|
|||
|
(2) compiled, depending on the source block language. This provides
|
|||
|
a way to use VimOrganizer as an editor for 'literate programming'.
|
|||
|
See: http://en.wikipedia.org/wiki/Literate_programming
|
|||
|
Documentation for tangling can be found in Org-mode's manual:
|
|||
|
http://orgmode.org/manual/Extracting-source-code.html#Extracting-source-code
|
|||
|
|
|||
|
*vimorg-export-options*
|
|||
|
Finally, one option on the Export Dashboard simply inserts a template
|
|||
|
of option lines into your document. This template can be inserted anywhere
|
|||
|
in your document, but is typically placed at the very beginning. It
|
|||
|
provides a default set of export-related options that you can modify
|
|||
|
as you wish. For more information on all the options see this page:
|
|||
|
http://orgmode.org/manual/Export-options.html#Export-options
|
|||
|
|
|||
|
|
|||
|
==============================================================================
|
|||
|
VIMORGANIZER FEEDBACK *vimorg-feedback*
|
|||
|
|
|||
|
Feedback is always welcome. If you like the plugin, please rate it at the
|
|||
|
vim-page:
|
|||
|
http://www.vim.org/scripts/script.php?script_id=3075
|
|||
|
|
|||
|
You can also follow the development of the plugin at github:
|
|||
|
http://github.com/hsitz/VimOrganizer
|
|||
|
|
|||
|
Please don't hesitate to report any bugs to the maintainer, mentioned in the
|
|||
|
third line of this document.
|
|||
|
|
|||
|
==============================================================================
|
|||
|
Modeline:
|
|||
|
vim:tw=78:ts=8:ft=help:nowrap:et
|