colorful rat Ratfactor.com > Dave's Repos

vviki

An AsciiDoc-flavored wiki plugin for Vim
git clone http://ratfactor.com/repos/vviki/vviki.git

vviki/doc/vviki.txt

Download raw file: doc/vviki.txt

1 *vviki.txt* AsciiDoc-flavored wiki plugin for Vim 2 ____ ________ ____ __ __ __ ~ 3 \ \ / /\ \ / /|__| | _|__| ~ 4 \ v / \ v / | | |/ / | ~ 5 \ / \ / | | <| | ~ 6 \___/ \___/ |__|__|_ \__| ~ 7 \/ ~ 8 9 *vviki* 10 1. Introduction |vviki-introduction| 11 2. Usage |vviki-usage| 12 3. Mappings |vviki-mappings| 13 <CR> |vviki-enter| 14 <Backspace> |vviki-back| 15 <Tab> |vviki-next| 16 <S-Tab> |vviki-previous| 17 3.1 Custom Mappings |vviki-custom-mappings| 18 Open a wiki |vviki-open-mapping| 19 Multiple wikis |vviki-multiple-wikis| 20 4. Configuration |vviki-configuration| 21 g:vviki_root |vviki_root| 22 g:vviki_ext |vviki_ext| 23 g:vviki_index |vviki_index| 24 g:vviki_conceal_links |vviki_conceal_links| 25 g:vviki_page_link_syntax |vviki_page_link_syntax| 26 g:vviki_visual_link_creation |vviki_visual_link_creation| 27 g:vviki_links_include_ext |vviki_links_include_ext| 28 g:vviki_custom_uri_function |vviki_custom_uri_function| 29 5. Version History |vviki-versions| 30 6. Testing |vviki-testing| 31 7. License |vviki-license| 32 33 34 ============================================================================== 35 1. Introduction *vviki-introduction* 36 37 VViki provides "wiki-like" functionality for Vim. It aims to make creating 38 linked 'pages' of content as painless as possible by providing simple keyboard 39 mappings to link pages, create new pages, and navigate between pages. 40 41 VViki was inspired by VimWiki (and shares many of the same mappings). 42 43 VViki uses AsciiDoc syntax because that is what the author prefers (AsciiDoc 44 is lightweight and readable like Markdown, but has the expressive power of 45 DocBook - a markup language intended for authoring technical documentation.) 46 VViki uses Vim's existing AsciiDoc syntax highlighting (or you are free to 47 substitute any other AsciiDoc syntax highlighter - or none at all). 48 49 VViki is excellent for: 50 51 * Technical documentation 52 * Mind-mapping 53 * Note-taking 54 * Diary entries 55 * Website authoring 56 57 VViki is ready for your content now! 58 59 60 ============================================================================== 61 2. Usage *vviki-usage* 62 63 There is plentiful information about AsciiDoc syntax available on the Web. 64 Much of the basic formatting is very similar to Markdown. 65 66 The most important thing to understand is the link "macro" syntax: 67 > 68 link:http://example.com[Example] external URL 69 link:mypage[My Page] (same dir)/mypage.adoc 70 link:/mypage[My Page] (wiki root)/mypage.adoc 71 link:../mypage[My Page] (up a dir)/mypage.adoc 72 link:mydir/mypage2[My Page Two] (same dir)/mydir/mypage2.adoc 73 link:mydir/[My Dir] (same dir)/mydir/index.adoc 74 < 75 (Examples assume VViki defaults - see |vviki_page_link_syntax|.) 76 77 AsciiDoc's `link:<path>[label]` format is a little verbose, and that's where 78 VViki's link mapping comes in handy. Enter creates links from plain words or 79 follows existing links. (|vviki-enter|) 80 81 Assuming VViki is installed and no defaults have been changed, here's what an 82 initial wiki session might look like: 83 84 1. `:e ~/wiki/index.adoc` to create and edit the wiki index page. 85 2. Enter the following content: 86 > 87 = My Wiki 88 89 I like toys and paper. 90 < 91 3. In normal mode, press Enter on the words "toys" and "paper" to turn them 92 into links: 93 > 94 = My Wiki 95 96 I like link:toys[toys] and link:paper[paper]. 97 < 98 4. Still in normal mode, press Enter on the "toys" link to create the content 99 on that page. 100 5. Press Backspace to return to the index page. You do not have to save the 101 toys page manually. VViki automatically saves as you navigate from page 102 to page. 103 6. Repeat for the "paper" page. 104 105 You now have a wiki with three pages. 106 107 108 ============================================================================== 109 3. Mappings *vviki-mappings* 110 111 VViki has no global mappings. When a new wiki page is detected (based on 112 directory), the following local mappings are available: 113 114 <CR> Create/follow link under cursor. |vviki-enter| 115 116 <Backspace> Return to previous page. |vviki-back| 117 118 <Tab> Jump cursor to next link on page. 119 120 <S-Tab> Jump cursor to previous link on page. 121 122 (See the action descriptions below for more details about what each mapping 123 does.) 124 125 126 Enter *vviki-enter* 127 128 Put your cursor on a plain "word" in normal mode and press Enter to convert 129 the word to a link. The link destination and label will both be the word. For 130 example, the link below was created by pressing Enter on the word 'cheese'. 131 > 132 Click on link:cheese[cheese] to learn more. 133 < 134 Pressing Enter again on the new 'cheese' link will open `cheese.adoc` for 135 editing (whether it already exists or not). 136 137 Pressing Enter on an external (Web) link will attempt to open the URL using 138 the `xdg-open` application. 139 140 NOTE: At this time, VViki happily creates new pages, but doesn't create 141 directories. You may want to create subdirectories before editing pages within 142 them. 143 144 145 Back *vviki-back* 146 147 VViki keeps a history of visited wiki pages. Pressing Backspace in normal mode 148 visits the previously visited page and the page before that until you run out 149 of history. 150 151 152 Next *vviki-next* 153 154 Pressing the Tab key in normal mode jumps the cursor to the next available 155 wiki link in the current document. 156 157 158 Previous *vviki-previous* 159 160 Pressing the Shift-Tab key in normal mode jumps the cursor to the previous 161 available wiki link in the current document. 162 163 164 ------------------------------------------------------------------------------ 165 3.1 Custom Mappings *vviki-custom-mappings* 166 167 Rather than attempt to predict and accommodate all possible setups, VViki 168 highly encourages you to create your own Vim shortcuts and scripts to make 169 your setup efficient for you! 170 171 172 Open a wiki *vviki-open-mapping* 173 174 You'll probably also want to add a mapping to make it easy to open your wiki. 175 The easier it is to get to the wiki, the more likely you are to use it as 176 needed. This example mimics VimWiki's default behavior, opening the wiki index: 177 > 178 nnoremap <leader>ww :e ~/wiki/index.adoc<cr> 179 < 180 Tip: consider creating other mappings to open other wiki pages you use 181 frequently! 182 183 184 Multiple wikis *vviki-multiple-wikis* 185 186 Because VViki uses global settings for each Vim session, it can only edit one 187 wiki AT A TIME. But this is probably not as big a barrier to having multiple 188 wikis as you might think. 189 190 The following opens two different wikis with `<leader>w1` and `<leader>w2` 191 shortcuts. Both wikis can be edited in the same Vim session. Only one will 192 have active link navigation, etc. at a time. 193 > 194 function! OpenWiki() 195 execute 'edit '.g:vviki_root.'/'.g:vviki_index.g:vviki_ext 196 endfunction 197 198 function! OpenDiary() 199 let g:vviki_root = '~/diary_wiki' 200 let g:vviki_index = 'contents' 201 let g:vviki_ext = '.txt' 202 call OpenWiki() 203 endfunction 204 205 function! OpenNotes() 206 let g:vviki_root = '~/project1/notes' 207 let g:vviki_index = 'index' 208 let g:vviki_ext = '.adoc' 209 call OpenWiki() 210 endfunction 211 212 nnoremap <leader>w1 :call OpenDiary()<CR> 213 nnoremap <leader>w2 :call OpenNotes()<CR> 214 < 215 Though this example may seem large at first, any part of it can be used as the 216 basis for a huge variety of customizations. The mind reels at the endless 217 possibilities. 218 219 220 ============================================================================== 221 4. Configuration *vviki-configuration* 222 223 Any changes to the VViki configuration settings would most likely be set in 224 your `~.vimrc` file or equivalent. 225 226 VViki has these default values: 227 228 Setting | Default Value 229 --------------------------------+--------------- 230 `g:vviki_root` | "~/wiki" 231 `g:vviki_ext` | ".adoc" 232 `g:vviki_index` | "index" 233 `g:vviki_conceal_links` | 1 234 `g:vviki_page_link_syntax` | "link" 235 `g:vviki_visual_link_creation` | 0 236 `g:vviki_links_include_ext` | 0 237 238 Each is explained in detail below: 239 240 241 g:vviki_root *vviki_root* 242 243 Set the root directory of the wiki using `g:vviki_root`. VViki will use this 244 root to detect wiki pages when they are opened. Files outside of this root 245 will not be detected as wiki pages regardless of file extension. 246 247 Here's how you might use a custom directory for your wiki: 248 > 249 let g:vviki_root = "~/my_cool_wiki" 250 < 251 252 253 g:vviki_ext *vviki_ext* 254 255 Set the file extension for wiki pages with `g:vviki_ext`. Since VViki is 256 intended to be used with AsciiDoc source files, you may wish to use .adoc (the 257 default) or .asciidoc, but anything is allowed. VViki will use this extension 258 to find existing files (by appending the extension to link names to make a 259 file path) and when it creates new pages. 260 261 Here's an example of using a non-default file extension: 262 > 263 let g:vviki_ext = ".asciidoc" 264 < 265 266 g:vviki_index *vviki_index* 267 268 You can define a custom name for "index" pages - the default page accessed by 269 a link to a directory (ending in a slash). These are analogous to the default 270 documents served up by web servers (such as "index.html"). With the default 271 setting, the following links are exactly equivalent. Both will open 272 `cheese/index.adoc` (assuming the default extension): 273 > 274 Notes about link:cheese/[Cheese]. 275 Notes about link:cheese/index[Cheese]. 276 < 277 278 Here's an example of an alternative wiki index page: 279 > 280 let g:vviki_index = "home" 281 < 282 283 284 g:vviki_conceal_links *vviki_conceal_links* 285 286 With this option turned on (default), links will appear as just their titles 287 until your cursor reaches the same line. This uses Vim's 'conceal' syntax 288 feature and was inspired by VimWiki's same feature. Set this variable to 0 to 289 turn this feature off. 290 291 To turn off link syntax concealing, set it to 0 like so: 292 > 293 let g:vviki_conceal_links = 0 294 < 295 296 297 g:vviki_page_link_syntax *vviki_page_link_syntax* 298 299 Unfortunately, AsciiDoc does not define syntax for linking across documents. 300 Therefore, VViki currently supports three syntax styles. All three will work 301 exactly the same within Vim. The differences will be noticed when you attempt 302 to export your AsciiDoc pages to another format (such as HTML). 303 304 To use a non-default link syntax style, set it like so: 305 > 306 let g:vviki_page_link_syntax = 'olink' 307 < 308 309 (Note that VViki will recognize all supported link syntax styles as links and 310 follow them regardless of setting - all other features (such as syntax 311 concealing and creating new links) will use the chosen syntax style 312 exclusively.) 313 314 The available syntax options: 315 316 Syntax | Example | asciidoc | asciidoctor 317 ------------------+-------------------+----------+------------- 318 "link" (default) | `link:foo[My Foo]` | foo | foo 319 "olink" | `olink:foo[My Foo]` | | 320 "xref_hack" | `<<foo#,My Foo>>` | foo | foo.html 321 322 Because the need for the different syntax styles lies in the conversion of 323 pages to other formats (such as HTML), the above table shows the linked page 324 filename as exported by each of the two most popular command line tools 325 `asciidoc` (Python) and `asciidoctor` (Ruby) as they would export each of the 326 different link syntaxes. 327 328 You'll note that only one combination produces relative (wiki-internal) page 329 filename links with a ".html" file extension when exporting to HTML. (More 330 about the "olink" results in a moment.) 331 332 The author of VViki uses the default "link" syntax and actually prefers the 333 "extensionless" filenames. When delivered from an Apache web server, they are 334 recognized correctly as HTML and display correctly in all browsers, giving 335 so-called "clean URLs". 336 337 One could certainly write pre- or post-processing scripts to manipulate the 338 AsciiDoc source files to add file extensions to links as well. 339 340 DocBook (the XML format on which AsciiDoc is based) has a link syntax 341 specifically addressing the issue of "establishing links across documents." 342 The "olink" type links to a document by name rather than FILEname. It is the 343 author's hope that an "olink" macro will someday be recognized by major 344 AsciiDoc processing applications for this specific purpose. None do at this 345 time, so the option in VViki is purely aspirational. 346 347 348 g:vviki_visual_link_creation *vviki_visual_link_creation* 349 350 This setting allows you to select multiple words of text using Vim's visual 351 mode and turn them into a link by pressing the Enter key. The resulting link 352 page and description will both be the exact text selected visually. 353 354 This option is off by default. Turn it on like so: 355 > 356 let g:vviki_visual_link_creation = 1 357 < 358 359 360 g:vviki_links_include_ext *vviki_links_include_ext* 361 362 By default, VViki creates wiki document links without file extensions. With 363 this option turned on, the file extension (see |vviki_ext|) will be included 364 in the link path (e.g. `link:foo[My Foo]` becomes `link:foo.adoc[My Foo]`). 365 366 Note that the two styles are incompatible - links created with the option on 367 will not work when the option is off and vice versa. 368 369 This option is off by default. Turn it on like so: 370 > 371 let g:vviki_links_include_ext = 1 372 < 373 374 375 g:vviki_custom_uri_function *vviki_custom_uri_function* 376 377 By default, VViki creates new wiki file name links based on the selected text. 378 You can override this behaviour by setting this variable to a function name 379 that will return a new file name. The function cannot take any arguments. 380 381 If you wanted all links to have links in the format `link:202401122207[Foo]` 382 you would need to add a configuration like this: 383 384 > 385 function! MakeCustomWikiUri() 386 return strftime("%Y%m%d%H%M%S") 387 endfunction 388 389 let g:vviki_custom_uri_function = "MakeCustomWikiUri" 390 < 391 392 393 ============================================================================== 394 5. Version History *vviki-versions* 395 396 1.1.0 December 2020 397 * Added new link sytanx style options 398 * Added multi-word link from visual selection option 399 * Added file extension in link option 400 * Added interactive test script system 401 402 1.0.0 June 2020 403 * Added Tab mapping (jump cursor to next link) 404 * Added default 'index' page for directory links 405 * Fixed link creation bug - thanks ds26gte! 406 407 Pre-1.0 development starting in late 2019 408 * Proof of concept with Enter key to navigate to existing links 409 * Initial commit 2020-02-01 410 * Backspace back navigation added 411 * Link macro syntax concealing added 412 * Help documentation added 413 414 415 ============================================================================== 416 6. Testing *vviki-testng* 417 418 The VViki project contains a test script at test/test.vim. The script sets up 419 test wiki pages with particular settings to be interactively tested. 420 421 Running the test script is an easy way to try out VViki's basic functionality 422 without setting up or installing anything (VViki does not even need to be 423 installed as a plugin!) 424 425 To start the test system, enter the VViki project directory and run the 426 script: 427 > 428 cd ~/coolstuff/vviki 429 vim -S test/test.vim 430 < 431 432 The first test document should open immediately. It contains instructions for 433 using the tests (shortcut keys are mapped for fast/easy usage). All tests are 434 self-documented. 435 436 437 ============================================================================== 438 7. License *vviki-license* 439 440 MIT License 441 442 Copyright (c) 2020 Dave Gauer 443 444 Permission is hereby granted, free of charge, to any person obtaining a copy 445 of this software and associated documentation files (the "Software"), to deal 446 in the Software without restriction, including without limitation the rights 447 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 448 copies of the Software, and to permit persons to whom the Software is 449 furnished to do so, subject to the following conditions: 450 451 The above copyright notice and this permission notice shall be included in all 452 copies or substantial portions of the Software. 453 454 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 455 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 456 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 457 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 458 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 459 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 460 SOFTWARE.