Merge branch 'dev'
2
.gitignore
vendored
@ -2,6 +2,7 @@
|
||||
# This section is devoted to this project
|
||||
##############################
|
||||
doc/tags
|
||||
.tags
|
||||
|
||||
# Vim stuff
|
||||
##############################
|
||||
@ -20,3 +21,4 @@ Session.vim
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
vimtest
|
||||
|
27
.travis.yml
Normal file
@ -0,0 +1,27 @@
|
||||
# No language: we download vim and compile it oursselves
|
||||
language: generic
|
||||
|
||||
cache:
|
||||
# Enable cache folder
|
||||
bundler: true
|
||||
directories:
|
||||
- $HOME/docker_images
|
||||
|
||||
before_cache:
|
||||
# Save tagged docker images. Info at https://github.com/travis-ci/travis-ci/issues/5358#issuecomment-248915326
|
||||
- >
|
||||
mkdir -p $HOME/docker_images && docker images -a --filter='dangling=false' --format '{{.Repository}}:{{.Tag}} {{.ID}}'
|
||||
| xargs -n 2 -t sh -c 'test -e $HOME/docker_images/$1.tar.gz || docker save $0 | gzip -2 > $HOME/docker_images/$1.tar.gz'
|
||||
|
||||
before_install:
|
||||
# Install docker
|
||||
- n_image=$(ls -1 $HOME/docker_images/*.tar.gz | wc -l)
|
||||
- if (( $n_image )); then ls $HOME/docker_images/*.tar.gz | xargs -I {file} sh -c "zcat {file} | docker load";
|
||||
else docker build --tag vimwiki .;
|
||||
fi
|
||||
|
||||
script:
|
||||
# Run All tests
|
||||
- pushd test
|
||||
- bash run_tests.sh
|
||||
- popd
|
@ -1,3 +1,5 @@
|
||||
# Contributing to Vimwiki
|
||||
|
||||
# Filing a bug
|
||||
|
||||
Before filing a bug or starting to write a patch, check the latest development version from
|
||||
@ -15,7 +17,14 @@ Make sure to update `doc/vimwiki.txt` with the following information:
|
||||
1. Update the changelog to include information on the new feature the PR introduces or the bug it
|
||||
is fixing.
|
||||
2. Add a help section to describe any new features or options.
|
||||
2. If you are a first time contributor add your name to the list of contributors.
|
||||
3. If you are a first time contributor add your name to the list of contributors.
|
||||
|
||||
**Testing:** Vimwiki uses [vader](https://github.com/junegunn/vader.vim) for unit tests and
|
||||
[vint](https://github.com/Kuniwak/vint) for linting. Any new PRs must add new tests and pass all
|
||||
linter checks. See the [test README](test/README.md) for more info.
|
||||
|
||||
- In addition to the included tests, there are more example wikis that can be used for testing
|
||||
[here](https://github.com/vimwiki/testwikis).
|
||||
|
||||
# More info and advice for (aspiring) core developers
|
||||
|
||||
@ -30,17 +39,17 @@ Make sure to update `doc/vimwiki.txt` with the following information:
|
||||
|
||||
## Git branching model
|
||||
|
||||
- there are two branches with eternal lifetime:
|
||||
- `dev`: This is where the main development happens. Tasks which are done in one or only a few
|
||||
- There are two branches with eternal lifetime:
|
||||
1. `dev`: This is where the main development happens. Tasks which are done in one or only a few
|
||||
commits go here directly. Always try to keep this branch in a working state, that is, if the
|
||||
task you work on requires multiple commits, make sure intermediate commits don't make Vimwiki
|
||||
unusable (or at least push these commits at one go).
|
||||
- `master`: This branch is for released states only. Whenever a reasonable set of changes has
|
||||
piled up in the `dev` branch, a [release is done](#Preparing a release). After a release,
|
||||
task you work on requires multiple commits, make sure intermediate commits don't make
|
||||
Vimwiki unusable (or at least push these commits at one go).
|
||||
2. `master`: This branch is for released states only. Whenever a reasonable set of changes has
|
||||
piled up in the `dev` branch, a [release is done](#preparing-a-release). After a release,
|
||||
`dev` has been merged into `master` and `master` got exactly one additional commit in which
|
||||
the version number in `plugin/vimwiki.vim` is updated. Apart from these commits and the merge
|
||||
commit from `dev`, nothing happens on `master`. Never should `master` merge into `dev`. When
|
||||
the users ask, we should recommend this branch for them to use.
|
||||
the version number in `plugin/vimwiki.vim` is updated. Apart from these commits and the
|
||||
merge commit from `dev`, nothing happens on `master`. Never should `master` merge into
|
||||
`dev`. When the users ask, we should recommend this branch for them to use.
|
||||
- Larger changes which require multiple commits are done in feature branches. They are based on
|
||||
`dev` and merge into `dev` when the work is done.
|
||||
|
||||
@ -55,9 +64,9 @@ Make sure to update `doc/vimwiki.txt` with the following information:
|
||||
7. Update the version number at the top of plugin/vimwiki.vim.
|
||||
8. Set a tag with the version number in Git: `git tag vX.Y`
|
||||
9. `git push --tags`
|
||||
10. In GitHub, go to _Releases_ -> _Draft a new release_ -> choose the tag, convert the changelog from the
|
||||
doc to markdown and post it there. Make plans to build an automatic converter and immediately
|
||||
forget this plan.
|
||||
10. In GitHub, go to _Releases_ -> _Draft a new release_ -> choose the tag, convert the changelog
|
||||
from the doc to markdown and post it there. Make plans to build an automatic converter and
|
||||
immediately forget this plan.
|
||||
11. Tell the world.
|
||||
|
||||
%% vim:tw=99
|
||||
<!-- vim:tw=99 -->
|
||||
|
186
DesignNotes.md
Normal file
@ -0,0 +1,186 @@
|
||||
# Design Notes
|
||||
|
||||
This file is meant to document design decisions and algorithms inside vimwiki
|
||||
which are too large for code comments, and not necessarily interesting to
|
||||
users. Please create a new section to document each behavior.
|
||||
|
||||
## Formatting tables
|
||||
|
||||
In vimwiki, formatting tables occurs dynamically, when navigating between cells
|
||||
and adding new rows in a table in the Insert mode, or statically, when pressing
|
||||
`gqq` or `gqw` (which are mappings for commands `VimwikiTableAlignQ` and
|
||||
`VimwikiTableAlignW` respectively) in the Normal mode. It also triggers when
|
||||
leaving Insert mode, provided variable `g:vimwiki_table_auto_fmt` is set. In
|
||||
this section, the original and the newer optimized algorithms of table
|
||||
formatting will be described and compared.
|
||||
|
||||
### The older table formatting algorithm and why this is not optimal
|
||||
|
||||
Let's consider a simple example. Open a new file, say _tmp.wiki_, and create a
|
||||
new table with command `VimwikiTable`. This should create a blank table.
|
||||
|
||||
```
|
||||
| | | | | |
|
||||
|---|---|---|---|---|
|
||||
| | | | | |
|
||||
```
|
||||
|
||||
Let's put the cursor in the first header column of the table, enter the Insert
|
||||
mode and type a name, say _Col1_. Then press _Tab_: the cursor will move to the
|
||||
second column of the header and the table will get aligned (in the context of
|
||||
the table formatting story, words _aligned_ and _formatted_ are considered as
|
||||
synonyms). Now the table looks as in the following snippet.
|
||||
|
||||
```
|
||||
| Col1 | | | | |
|
||||
|------|---|---|---|---|
|
||||
| | | | | |
|
||||
```
|
||||
|
||||
Then, when moving cursor to the first data row (i.e. to the third line of the
|
||||
table below the separator line) and typing anything here and there while
|
||||
navigating using _Tab_ or _Enter_ (pressing this creates a new row below the
|
||||
current row), the table shall keep formatting. Below is a result of such a
|
||||
random edit.
|
||||
|
||||
```
|
||||
| Col1 | | | | |
|
||||
|------|-------|---|-------|----------|
|
||||
| | Data1 | | Data2 | |
|
||||
| | | | | New data |
|
||||
```
|
||||
|
||||
The lowest row gets aligned when leaving the Insert mode. Let's copy _Data1_
|
||||
(using `viwy` or another keystroke) and paste it (using `p`) in the second data
|
||||
row of the first column. Now the table looks mis-aligned (as we did not enter
|
||||
the Insert mode).
|
||||
|
||||
```
|
||||
| Col1 | | | | |
|
||||
|------|-------|---|-------|----------|
|
||||
| | Data1 | | Data2 | |
|
||||
| Data1 | | | | New data |
|
||||
```
|
||||
|
||||
This is not a big problem though, because we can put the cursor at _any_ place
|
||||
in the table and press `gqq`: the table will get aligned.
|
||||
|
||||
```
|
||||
| Col1 | | | | |
|
||||
|-------|-------|---|-------|----------|
|
||||
| | Data1 | | Data2 | |
|
||||
| Data1 | | | | New data |
|
||||
```
|
||||
|
||||
Now let's make real problems! Move the cursor to the lowest row and copy it
|
||||
with `yy`. Then 500-fold paste it with `500p`. Now the table very long. Move
|
||||
the cursor to the lowest row (by pressing `G`), enter the Insert mode, and try
|
||||
a new random editing session by typing anything in cells with _Tab_ and _Enter_
|
||||
navigation interleaves. The editing got painfully slow, did not?
|
||||
|
||||
The reason of the slowing down is the older table formatting algorithm. Every
|
||||
time _Tab_ or _Enter_ get pressed down, all rows in the table get visited to
|
||||
calculate a new alignment. Moreover, by design it may happen even more than
|
||||
once per one press!
|
||||
|
||||
```vim
|
||||
function! s:kbd_create_new_row(cols, goto_first)
|
||||
let cmd = "\<ESC>o".s:create_empty_row(a:cols)
|
||||
let cmd .= "\<ESC>:call vimwiki#tbl#format(line('.'))\<CR>"
|
||||
let cmd .= "\<ESC>0"
|
||||
if a:goto_first
|
||||
let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'c', line('.'))\<CR>"
|
||||
else
|
||||
let cmd .= (col('.')-1)."l"
|
||||
let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\<CR>"
|
||||
endif
|
||||
let cmd .= "a"
|
||||
|
||||
return cmd
|
||||
endfunction
|
||||
```
|
||||
|
||||
Function `s:kbd_create_new_row()` is called when _Tab_ or _Enter_ get pressed.
|
||||
Formatting of the whole table happens in function `vimwiki#tbl#format()`. But
|
||||
remember that leaving the Insert mode triggers re-formatting of a table when
|
||||
variable `g:vimwiki_table_auto_fmt` is set. This means that formatting of the
|
||||
whole table is called on all those multiple interleaves between the Insert and
|
||||
the Normal mode in `s:kbd_create_new_row` (notice `\<ESC>`, `o`, etc.).
|
||||
|
||||
### The newer table formating algorithm
|
||||
|
||||
The newer algorithm was introduced to struggle against performance issues when
|
||||
formatting large tables.
|
||||
|
||||
Let's take the table from the previous example in an intermediate state.
|
||||
|
||||
```
|
||||
| Col1 | | | | |
|
||||
|------|-------|---|-------|----------|
|
||||
| | Data1 | | Data2 | |
|
||||
| Data1 | | | | New data |
|
||||
```
|
||||
|
||||
Then move the cursor to the first data row, copy it with `yy`, go down to the
|
||||
mis-aligned line, and press `5p`. Now we have a slightly bigger mis-aligned
|
||||
table.
|
||||
|
||||
```
|
||||
| Col1 | | | | |
|
||||
|------|-------|---|-------|----------|
|
||||
| | Data1 | | Data2 | |
|
||||
| Data1 | | | | New data |
|
||||
| | Data1 | | Data2 | |
|
||||
| | Data1 | | Data2 | |
|
||||
| | Data1 | | Data2 | |
|
||||
| | Data1 | | Data2 | |
|
||||
| | Data1 | | Data2 | |
|
||||
```
|
||||
|
||||
Go down to the lowest, the 7th, data row and press `gq1`. Nothing happened.
|
||||
Let's go to the second or the third data row and press `gq1` once again. Now
|
||||
the table gets aligned. Let's undo formatting with `u`, go to the fourth row,
|
||||
and press `gq1`. Now the table should look like in the following snippet.
|
||||
|
||||
```
|
||||
| Col1 | | | | |
|
||||
|------|-------|---|-------|----------|
|
||||
| | Data1 | | Data2 | |
|
||||
| Data1 | | | | New data |
|
||||
| | Data1 | | Data2 | |
|
||||
| | Data1 | | Data2 | |
|
||||
| | Data1 | | Data2 | |
|
||||
| | Data1 | | Data2 | |
|
||||
| | Data1 | | Data2 | |
|
||||
```
|
||||
|
||||
What a peculiar command! Does using it make any sense? Not much, honestly.
|
||||
Except it shows how the newer optimized table formatting algorithm works in the
|
||||
Insert mode.
|
||||
|
||||
Indeed, the newer table formatting algorithm introduces a _viewport_ on a table.
|
||||
Now, when pressing _Tab_ or _Enter_ in the Insert mode, only a small part of
|
||||
rows are checked for possible formatting: two rows above the current line and
|
||||
the current line itself (the latter gets preliminary shrunk with function
|
||||
`s:fmt_row()`). If all three lines in the viewport are of the same length, then
|
||||
nothing happens (case 1 in the example). If the second or the shrunk current
|
||||
line is longer then the topmost line in the viewport, then the algorithm falls
|
||||
back to the older formatting algorithm and the whole table gets aligned
|
||||
(case 2). If the topmost line in the viewport is longer than the second
|
||||
and the shrunk current line, then the two lowest lines get aligned according to
|
||||
the topmost line (case 3).
|
||||
|
||||
Performance of the newer formatting algorithm should not depend on the height
|
||||
of the table. The newer algorithm should also be consistent with respect to
|
||||
user editing experience. Indeed, as soon as a table should normally be edited
|
||||
row by row from the top to the bottom, dynamic formatting should be both fast
|
||||
(watching only three rows in a table, re-formatting only when the shrunk
|
||||
current row gets longer than any of the two rows above) and eager (a table
|
||||
should look formatted on every press on _Tab_ and _Enter_). However, the newer
|
||||
algorithm differs from the older algorithm when starting editing a mis-aligned
|
||||
table in an area where mis-aligned rows do not get into the viewport: in this
|
||||
case the newer algorithm will format the table partly (in the rows of the
|
||||
viewport) until one of the being edited cells grows in length to a value big
|
||||
enough to trigger the older algorithm and the whole table gets aligned. When
|
||||
partial formatting is not desirable, the whole table can be formatted by
|
||||
pressing `gqq` in the Normal mode.
|
23
Dockerfile
Normal file
@ -0,0 +1,23 @@
|
||||
FROM testbed/vim:17
|
||||
|
||||
# add packages
|
||||
RUN apk --no-cache add bash=~5.0
|
||||
RUN apk --no-cache add git=~2.22
|
||||
RUN apk --no-cache add python3=~3.7
|
||||
|
||||
# get vint for linting
|
||||
RUN pip3 install vim-vint==0.3.21
|
||||
|
||||
# get vader for unit tests
|
||||
RUN git clone -n https://github.com/junegunn/vader.vim /vader
|
||||
WORKDIR /vader
|
||||
RUN git checkout de8a976f1eae2c2b680604205c3e8b5c8882493c
|
||||
|
||||
# build vim and neovim versions we want to test
|
||||
# TODO uncomment nvim tag
|
||||
WORKDIR /
|
||||
RUN install_vim -tag v7.3.429 -name vim_7.3.429 -build \
|
||||
-tag v7.4.1099 -name vim_7.4.1099 -build \
|
||||
-tag v7.4.1546 -name vim_7.4.1546 -build \
|
||||
-tag v8.0.0027 -name vim_8.0.0027 -build \
|
||||
-tag v8.1.0519 -name vim_8.1.0519 -build \
|
139
README.md
@ -1,8 +1,9 @@
|
||||
# VimWiki: A Personal Wiki For Vim
|
||||
![VimWiki: A Personal Wiki For Vim](doc/splash.png)
|
||||
|
||||
[中文](README-cn.md)
|
||||
|
||||
- [Intro](#intro)
|
||||
- [Screenshots](#screenshots)
|
||||
- [Installation](#installation)
|
||||
- [Prerequisites](#prerequisites)
|
||||
- [VIM Packages](#installation-using-vim-packages-since-vim-741528)
|
||||
@ -19,31 +20,36 @@
|
||||
- [Wiki](https://github.com/vimwiki/vimwiki/wiki)
|
||||
- [License](#license)
|
||||
|
||||
## Intro
|
||||
----
|
||||
|
||||
## Introduction
|
||||
|
||||
VimWiki is a personal wiki for Vim -- a number of linked text files that have
|
||||
their own syntax highlighting.
|
||||
their own syntax highlighting. See the [VimWiki Wiki](https://vimwiki.github.io/vimwikiwiki/)
|
||||
for an example website built with VimWiki!
|
||||
|
||||
With VimWiki you can:
|
||||
For the latest features and fixes checkout the [dev branch](https://github.com/vimwiki/vimwiki/tree/dev).
|
||||
If you are interested in contributing see [this section](#helping-vimwiki).
|
||||
|
||||
* Organize notes and ideas
|
||||
* Manage to-do lists
|
||||
* Write documentation
|
||||
* Maintain a diary
|
||||
* Export everything to HTML
|
||||
With VimWiki, you can:
|
||||
|
||||
To do a quick start press `<Leader>ww` (this is usually `\ww`) to go to your
|
||||
index wiki file. By default it is located in `~/vimwiki/index.wiki`.
|
||||
- Organize notes and ideas
|
||||
- Manage to-do lists
|
||||
- Write documentation
|
||||
- Maintain a diary
|
||||
- Export everything to HTML
|
||||
|
||||
To do a quick start, press `<Leader>ww` (default is `\ww`) to go to your index
|
||||
wiki file. By default, it is located in `~/vimwiki/index.wiki`. See `:h vimwiki_list`
|
||||
for registering a different path/wiki.
|
||||
|
||||
Feed it with the following example:
|
||||
|
||||
```
|
||||
|
||||
```text
|
||||
= My knowledge base =
|
||||
* Tasks -- things to be done _yesterday_!!!
|
||||
* Project Gutenberg -- good books are power.
|
||||
* Scratchpad -- various temporary stuff.
|
||||
|
||||
```
|
||||
|
||||
Place your cursor on `Tasks` and press Enter to create a link. Once pressed,
|
||||
@ -52,16 +58,14 @@ open it. Edit the file, save it, and then press Backspace to jump back to your
|
||||
index.
|
||||
|
||||
A VimWiki link can be constructed from more than one word. Just visually
|
||||
select the words to be linked and press Enter. Try it with `Project Gutenberg`.
|
||||
select the words to be linked and press Enter. Try it, with `Project Gutenberg`.
|
||||
The result should look something like:
|
||||
|
||||
```
|
||||
|
||||
```text
|
||||
= My knowledge base =
|
||||
* [[Tasks]] -- things to be done _yesterday_!!!
|
||||
* [[Project Gutenberg]] -- good books are power.
|
||||
* Scratchpad -- various temporary stuff.
|
||||
|
||||
```
|
||||
|
||||
## Screenshots
|
||||
@ -73,20 +77,20 @@ The result should look something like:
|
||||
|
||||
## Installation
|
||||
|
||||
VimWiki has been tested on **Vim >= 7.3**. It will likely work on older
|
||||
versions but will not be officially supported.
|
||||
|
||||
### Prerequisites
|
||||
|
||||
Make sure you have these settings in your vimrc file:
|
||||
|
||||
```vim
|
||||
|
||||
set nocompatible
|
||||
filetype plugin on
|
||||
syntax on
|
||||
|
||||
```
|
||||
|
||||
Without them VimWiki will not work properly.
|
||||
|
||||
Without them, VimWiki will not work properly.
|
||||
|
||||
#### Installation using [Vim packages](http://vimhelp.appspot.com/repeat.txt.html#packages) (since Vim 7.4.1528)
|
||||
|
||||
@ -94,9 +98,17 @@ Without them VimWiki will not work properly.
|
||||
|
||||
git clone https://github.com/vimwiki/vimwiki.git ~/.vim/pack/plugins/start/vimwiki
|
||||
|
||||
# to generate documentation i.e. ':h vimwiki'
|
||||
vim -c 'helptags ~/.vim/pack/plugins/start/vimwiki/doc' -c quit
|
||||
|
||||
```
|
||||
|
||||
#### Installation using [Pathogen](http://www.vim.org/scripts/script.php?script_id=2332)
|
||||
Notes:
|
||||
|
||||
- See `:h helptags` for issues with installing the documentation.
|
||||
- For general information on vim packages see `:h packages`.
|
||||
|
||||
#### Installation using [Pathogen](https://github.com/tpope/vim-pathogen)
|
||||
|
||||
```sh
|
||||
|
||||
@ -121,7 +133,7 @@ Then run `:PlugInstall`.
|
||||
|
||||
#### Installation using [Vundle](https://github.com/VundleVim/Vundle.vim)
|
||||
|
||||
Add `Plugin 'vimwiki/vimwiki'` to your vimrc file and run
|
||||
Add `Plugin 'vimwiki/vimwiki'` to your vimrc file and run:
|
||||
|
||||
```sh
|
||||
|
||||
@ -129,16 +141,17 @@ vim +PluginInstall +qall
|
||||
|
||||
```
|
||||
|
||||
Or download the [zip
|
||||
archive](https://github.com/vimwiki/vimwiki/archive/master.zip) and extract it
|
||||
in `~/.vim/bundle/`
|
||||
#### Manual Install
|
||||
|
||||
Download the [zip archive](https://github.com/vimwiki/vimwiki/archive/master.zip)
|
||||
and extract it in `~/.vim/bundle/`
|
||||
|
||||
Then launch Vim, run `:Helptags` and then `:help vimwiki` to verify it was
|
||||
installed.
|
||||
|
||||
## Basic Markup
|
||||
|
||||
```
|
||||
```text
|
||||
= Header1 =
|
||||
== Header2 ==
|
||||
=== Header3 ===
|
||||
@ -151,9 +164,9 @@ _italic_ -- italic text
|
||||
[[wiki link|description]] -- wiki link with description
|
||||
```
|
||||
|
||||
### Lists:
|
||||
### Lists
|
||||
|
||||
```
|
||||
```text
|
||||
* bullet list item 1
|
||||
- bullet list item 2
|
||||
- bullet list item 3
|
||||
@ -174,36 +187,49 @@ For other syntax elements, see `:h vimwiki-syntax`
|
||||
|
||||
## Key bindings
|
||||
|
||||
Normal mode:
|
||||
### Normal mode
|
||||
|
||||
* `<Leader>ww` -- Open default wiki index file.
|
||||
* `<Leader>wt` -- Open default wiki index file in a new tab.
|
||||
* `<Leader>ws` -- Select and open wiki index file.
|
||||
* `<Leader>wd` -- Delete wiki file you are in.
|
||||
* `<Leader>wr` -- Rename wiki file you are in.
|
||||
* `<Enter>` -- Follow/Create wiki link
|
||||
* `<Shift-Enter>` -- Split and follow/create wiki link
|
||||
* `<Ctrl-Enter>` -- Vertical split and follow/create wiki link
|
||||
* `<Backspace>` -- Go back to parent(previous) wiki link
|
||||
* `<Tab>` -- Find next wiki link
|
||||
* `<Shift-Tab>` -- Find previous wiki link
|
||||
**Note:** your terminal may prevent capturing some of the default bindings
|
||||
listed below. See `:h vimwiki-local-mappings` for suggestions for alternative
|
||||
bindings if you encounter a problem.
|
||||
|
||||
For more keys, see `:h vimwiki-mappings`
|
||||
#### Basic key bindings
|
||||
|
||||
- `<Leader>ww` -- Open default wiki index file.
|
||||
- `<Leader>wt` -- Open default wiki index file in a new tab.
|
||||
- `<Leader>ws` -- Select and open wiki index file.
|
||||
- `<Leader>wd` -- Delete wiki file you are in.
|
||||
- `<Leader>wr` -- Rename wiki file you are in.
|
||||
- `<Enter>` -- Follow/Create wiki link.
|
||||
- `<Shift-Enter>` -- Split and follow/create wiki link.
|
||||
- `<Ctrl-Enter>` -- Vertical split and follow/create wiki link.
|
||||
- `<Backspace>` -- Go back to parent(previous) wiki link.
|
||||
- `<Tab>` -- Find next wiki link.
|
||||
- `<Shift-Tab>` -- Find previous wiki link.
|
||||
|
||||
#### Advanced key bindings
|
||||
|
||||
Refer to the complete documentation at `:h vimwiki-mappings` to see many
|
||||
more bindings.
|
||||
|
||||
## Commands
|
||||
|
||||
* `:Vimwiki2HTML` -- Convert current wiki link to HTML
|
||||
* `:VimwikiAll2HTML` -- Convert all your wiki links to HTML
|
||||
* `:help vimwiki-commands` -- list all commands
|
||||
* `:help vimwiki` -- General vimwiki help docs
|
||||
- `:Vimwiki2HTML` -- Convert current wiki link to HTML.
|
||||
- `:VimwikiAll2HTML` -- Convert all your wiki links to HTML.
|
||||
- `:help vimwiki-commands` -- List all commands.
|
||||
- `:help vimwiki` -- General vimwiki help docs.
|
||||
|
||||
## Changing Wiki Syntax
|
||||
|
||||
VimWiki currently ships with 3 syntaxes: VimWiki (default), Markdown
|
||||
(markdown), and MediaWiki (media)
|
||||
(markdown), and MediaWiki (media).
|
||||
|
||||
**NOTE:** Only the default syntax ships with a built-in HTML converter. For
|
||||
Markdown or MediaWiki see `:h vimwiki-option-custom_wiki2html`. Some examples
|
||||
and 3rd party tools are available [here](https://vimwiki.github.io/vimwikiwiki/Related%20Tools.html#Related%20Tools-External%20Tools).
|
||||
|
||||
If you would prefer to use either Markdown or MediaWiki syntaxes, set the
|
||||
following option in your .vimrc:
|
||||
following option in your `.vimrc`:
|
||||
|
||||
```vim
|
||||
|
||||
@ -214,15 +240,22 @@ let g:vimwiki_list = [{'path': '~/vimwiki/',
|
||||
|
||||
## Getting help
|
||||
|
||||
**Have a question?**
|
||||
Visit the IRC channel [`#vimwiki`](https://webchat.freenode.net/?channels=#vimwiki) on Freenode ([webchat](https://webchat.freenode.net/?channels=#vimwiki), also synced to Matrix/Riot: `#vimwiki:matrix.org`) or post to the [mailing list](https://groups.google.com/forum/#!forum/vimwiki).
|
||||
[GitHub issues](https://github.com/vimwiki/vimwiki/issues) are the primary
|
||||
method for raising bug reports or feature requests.
|
||||
|
||||
Additional resources include the IRC channel [#vimwiki](https://webchat.freenode.net/?channels=#vimwiki) on Freenode
|
||||
([webchat](https://webchat.freenode.net/?channels=#vimwiki), also synced to Matrix/Riot: `#freenode_#vimwiki:matrix.org` and [Telegram](https://t.me/joinchat/JqBaKBfWs04qNVrp5oWcMg))
|
||||
or post to the [mailing list](https://groups.google.com/forum/#!forum/vimwiki).
|
||||
|
||||
## Helping VimWiki
|
||||
|
||||
VimWiki has a lot of users but only very few recurring developers or people
|
||||
helping the community. Your help is therefore appreciated. Everyone can help!
|
||||
See [#625](https://github.com/vimwiki/vimwiki/issues/625) for information on
|
||||
how you can help.
|
||||
See [#625](https://github.com/vimwiki/vimwiki/issues/625) for information on how you can help.
|
||||
|
||||
Also, take a look at [CONTRIBUTING.md](https://github.com/vimwiki/vimwiki/blob/master/CONTRIBUTING.md).
|
||||
|
||||
----
|
||||
|
||||
## License
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
<link rel="Stylesheet" type="text/css" href="%root_path%%css%">
|
||||
<title>%title%</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=%encoding%">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
</head>
|
||||
<body>
|
||||
%content%
|
||||
|
@ -4,16 +4,13 @@
|
||||
" Home: https://github.com/vimwiki/vimwiki/
|
||||
|
||||
|
||||
if exists("g:loaded_vimwiki_diary_auto") || &cp
|
||||
if exists('g:loaded_vimwiki_diary_auto') || &compatible
|
||||
finish
|
||||
endif
|
||||
let g:loaded_vimwiki_diary_auto = 1
|
||||
|
||||
|
||||
let s:vimwiki_max_scan_for_caption = 5
|
||||
|
||||
|
||||
function! s:prefix_zero(num)
|
||||
function! s:prefix_zero(num) abort
|
||||
if a:num < 10
|
||||
return '0'.a:num
|
||||
endif
|
||||
@ -21,20 +18,20 @@ function! s:prefix_zero(num)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:diary_path(...)
|
||||
function! s:diary_path(...) abort
|
||||
let idx = a:0 == 0 ? vimwiki#vars#get_bufferlocal('wiki_nr') : a:1
|
||||
return vimwiki#vars#get_wikilocal('path', idx).vimwiki#vars#get_wikilocal('diary_rel_path', idx)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:diary_index(...)
|
||||
function! s:diary_index(...) abort
|
||||
let idx = a:0 == 0 ? vimwiki#vars#get_bufferlocal('wiki_nr') : a:1
|
||||
return s:diary_path(idx).vimwiki#vars#get_wikilocal('diary_index', idx).
|
||||
\ vimwiki#vars#get_wikilocal('ext', idx)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#diary#diary_date_link(...)
|
||||
function! vimwiki#diary#diary_date_link(...) abort
|
||||
if a:0
|
||||
return strftime('%Y-%m-%d', a:1)
|
||||
else
|
||||
@ -43,11 +40,11 @@ function! vimwiki#diary#diary_date_link(...)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_position_links(link)
|
||||
function! s:get_position_links(link) abort
|
||||
let idx = -1
|
||||
let links = []
|
||||
if a:link =~# '^\d\{4}-\d\d-\d\d'
|
||||
let links = map(s:get_diary_files(), 'fnamemodify(v:val, ":t:r")')
|
||||
let links = map(vimwiki#diary#get_diary_files(), 'fnamemodify(v:val, ":t:r")')
|
||||
" include 'today' into links
|
||||
if index(links, vimwiki#diary#diary_date_link()) == -1
|
||||
call add(links, vimwiki#diary#diary_date_link())
|
||||
@ -59,36 +56,108 @@ function! s:get_position_links(link)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_month_name(month)
|
||||
function! s:get_month_name(month) abort
|
||||
return vimwiki#vars#get_global('diary_months')[str2nr(a:month)]
|
||||
endfunction
|
||||
|
||||
function! s:get_first_header(fl) abort
|
||||
" Get the first header in the file within the first s:vimwiki_max_scan_for_caption lines.
|
||||
let header_rx = vimwiki#vars#get_syntaxlocal('rxHeader')
|
||||
|
||||
function! s:read_captions(files)
|
||||
let result = {}
|
||||
let rx_header = vimwiki#vars#get_syntaxlocal('rxHeader')
|
||||
for fl in a:files
|
||||
" remove paths and extensions
|
||||
let fl_key = substitute(fnamemodify(fl, ':t'), vimwiki#vars#get_wikilocal('ext').'$', '', '')
|
||||
|
||||
if filereadable(fl)
|
||||
for line in readfile(fl, '', s:vimwiki_max_scan_for_caption)
|
||||
if line =~# rx_header && !has_key(result, fl_key)
|
||||
let result[fl_key] = vimwiki#u#trim(matchstr(line, rx_header))
|
||||
for line in readfile(a:fl, '', g:vimwiki_max_scan_for_caption)
|
||||
if line =~# header_rx
|
||||
return vimwiki#u#trim(matchstr(line, header_rx))
|
||||
endif
|
||||
endfor
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
function! s:get_all_headers(fl, maxlevel) abort
|
||||
" Get a list of all headers in a file up to a given level.
|
||||
" Returns a list whose elements are pairs [level, title]
|
||||
let headers_rx = {}
|
||||
for i in range(1, a:maxlevel)
|
||||
let headers_rx[i] = vimwiki#vars#get_syntaxlocal('rxH'.i.'_Text')
|
||||
endfor
|
||||
|
||||
let headers = []
|
||||
for line in readfile(a:fl, '')
|
||||
for [i, header_rx] in items(headers_rx)
|
||||
if line =~# header_rx
|
||||
call add(headers, [i, vimwiki#u#trim(matchstr(line, header_rx))])
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
return headers
|
||||
endfunction
|
||||
|
||||
function! s:count_headers_level_less_equal(headers, maxlevel) abort
|
||||
" Count headers with level <= maxlevel in a list of [level, title] pairs.
|
||||
let l:count = 0
|
||||
for [header_level, _] in a:headers
|
||||
if header_level <= a:maxlevel
|
||||
let l:count += 1
|
||||
endif
|
||||
endfor
|
||||
return l:count
|
||||
endfunction
|
||||
|
||||
function! s:get_min_header_level(headers) abort
|
||||
" The minimum level of any header in a list of [level, title] pairs.
|
||||
if len(a:headers) == 0
|
||||
return 0
|
||||
endif
|
||||
let minlevel = a:headers[0][0]
|
||||
for [level, _] in a:headers
|
||||
let minlevel = min([minlevel, level])
|
||||
endfor
|
||||
return minlevel
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:read_captions(files) abort
|
||||
let result = {}
|
||||
let caption_level = vimwiki#vars#get_wikilocal('diary_caption_level')
|
||||
|
||||
for fl in a:files
|
||||
" remove paths and extensions
|
||||
let fl_captions = {}
|
||||
|
||||
" Default; no captions from the file.
|
||||
let fl_captions['top'] = ''
|
||||
let fl_captions['rest'] = []
|
||||
|
||||
if caption_level >= 0 && filereadable(fl)
|
||||
if caption_level == 0
|
||||
" Take first header of any level as the top caption.
|
||||
let fl_captions['top'] = s:get_first_header(fl)
|
||||
else
|
||||
let headers = s:get_all_headers(fl, caption_level)
|
||||
if len(headers) > 0
|
||||
" If first header is the only one at its level or less, then make it the top caption.
|
||||
let [first_level, first_header] = headers[0]
|
||||
if s:count_headers_level_less_equal(headers, first_level) == 1
|
||||
let fl_captions['top'] = first_header
|
||||
call remove(headers, 0)
|
||||
endif
|
||||
|
||||
if !has_key(result, fl_key)
|
||||
let result[fl_key] = ''
|
||||
let min_header_level = s:get_min_header_level(headers)
|
||||
for [level, header] in headers
|
||||
call add(fl_captions['rest'], [level - min_header_level, header])
|
||||
endfor
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
let fl_key = substitute(fnamemodify(fl, ':t'), vimwiki#vars#get_wikilocal('ext').'$', '', '')
|
||||
let result[fl_key] = fl_captions
|
||||
endfor
|
||||
return result
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_diary_files()
|
||||
function! vimwiki#diary#get_diary_files() abort
|
||||
let rx = '^\d\{4}-\d\d-\d\d'
|
||||
let s_files = glob(vimwiki#vars#get_wikilocal('path').
|
||||
\ vimwiki#vars#get_wikilocal('diary_rel_path').'*'.vimwiki#vars#get_wikilocal('ext'))
|
||||
@ -102,7 +171,7 @@ function! s:get_diary_files()
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:group_links(links)
|
||||
function! s:group_links(links) abort
|
||||
let result = {}
|
||||
let p_year = 0
|
||||
let p_month = 0
|
||||
@ -124,7 +193,7 @@ function! s:group_links(links)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:sort(lst)
|
||||
function! s:sort(lst) abort
|
||||
if vimwiki#vars#get_wikilocal('diary_sort') ==? 'desc'
|
||||
return reverse(sort(a:lst))
|
||||
else
|
||||
@ -132,52 +201,10 @@ function! s:sort(lst)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:format_diary()
|
||||
let result = []
|
||||
|
||||
let links_with_captions = s:read_captions(s:get_diary_files())
|
||||
let g_files = s:group_links(links_with_captions)
|
||||
|
||||
for year in s:sort(keys(g_files))
|
||||
call add(result, '')
|
||||
call add(result,
|
||||
\ substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', year , ''))
|
||||
|
||||
for month in s:sort(keys(g_files[year]))
|
||||
call add(result, '')
|
||||
call add(result, substitute(vimwiki#vars#get_syntaxlocal('rxH3_Template'),
|
||||
\ '__Header__', s:get_month_name(month), ''))
|
||||
|
||||
for [fl, cap] in s:sort(items(g_files[year][month]))
|
||||
let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate2')
|
||||
|
||||
if vimwiki#vars#get_wikilocal('syntax') == 'markdown'
|
||||
let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink1Template')
|
||||
|
||||
if empty(cap) " When using markdown syntax, we should ensure we always have a link description.
|
||||
let cap = fl
|
||||
endif
|
||||
elseif empty(cap)
|
||||
let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate1')
|
||||
endif
|
||||
|
||||
let entry = substitute(link_tpl, '__LinkUrl__', fl, '')
|
||||
let entry = substitute(entry, '__LinkDescription__', cap, '')
|
||||
call add(result, repeat(' ', vimwiki#lst#get_list_margin()).'* '.entry)
|
||||
endfor
|
||||
|
||||
endfor
|
||||
endfor
|
||||
|
||||
return result
|
||||
endfunction
|
||||
|
||||
|
||||
" The given wiki number a:wnum is 1 for the first wiki, 2 for the second and so on. This is in
|
||||
" contrast to most other places, where counting starts with 0. When a:wnum is 0, the current wiki
|
||||
" is used.
|
||||
function! vimwiki#diary#make_note(wnum, ...)
|
||||
function! vimwiki#diary#make_note(wnum, ...) abort
|
||||
if a:wnum == 0
|
||||
let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
if wiki_nr < 0 " this happens when e.g. VimwikiMakeDiaryNote was called outside a wiki buffer
|
||||
@ -192,8 +219,6 @@ function! vimwiki#diary#make_note(wnum, ...)
|
||||
return
|
||||
endif
|
||||
|
||||
" TODO: refactor it. base#goto_index uses the same
|
||||
|
||||
call vimwiki#path#mkdir(vimwiki#vars#get_wikilocal('path', wiki_nr).
|
||||
\ vimwiki#vars#get_wikilocal('diary_rel_path', wiki_nr))
|
||||
|
||||
@ -216,20 +241,23 @@ function! vimwiki#diary#make_note(wnum, ...)
|
||||
call vimwiki#base#open_link(cmd, link, s:diary_index(wiki_nr))
|
||||
endfunction
|
||||
|
||||
function! vimwiki#diary#goto_diary_index(wnum) abort
|
||||
|
||||
" if wnum = 0 the current wiki is used
|
||||
if a:wnum == 0
|
||||
let idx = vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
if idx < 0 " not in a wiki
|
||||
let idx = 0
|
||||
endif
|
||||
else
|
||||
let idx = a:wnum - 1 " convert to 0 based counting
|
||||
endif
|
||||
|
||||
function! vimwiki#diary#goto_diary_index(wnum)
|
||||
if a:wnum > vimwiki#vars#number_of_wikis()
|
||||
echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in g:vimwiki_list!'
|
||||
return
|
||||
endif
|
||||
|
||||
" TODO: refactor it. base#goto_index uses the same
|
||||
if a:wnum > 0
|
||||
let idx = a:wnum - 1
|
||||
else
|
||||
let idx = 0
|
||||
endif
|
||||
|
||||
call vimwiki#base#edit_file('e', s:diary_index(idx), '')
|
||||
|
||||
if vimwiki#vars#get_wikilocal('auto_diary_index')
|
||||
@ -239,7 +267,7 @@ function! vimwiki#diary#goto_diary_index(wnum)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#diary#goto_next_day()
|
||||
function! vimwiki#diary#goto_next_day() abort
|
||||
let link = ''
|
||||
let [idx, links] = s:get_position_links(expand('%:t:r'))
|
||||
|
||||
@ -260,7 +288,7 @@ function! vimwiki#diary#goto_next_day()
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#diary#goto_prev_day()
|
||||
function! vimwiki#diary#goto_prev_day() abort
|
||||
let link = ''
|
||||
let [idx, links] = s:get_position_links(expand('%:t:r'))
|
||||
|
||||
@ -281,13 +309,95 @@ function! vimwiki#diary#goto_prev_day()
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#diary#generate_diary_section()
|
||||
let current_file = vimwiki#path#path_norm(expand("%:p"))
|
||||
function! vimwiki#diary#generate_diary_section() abort
|
||||
|
||||
let GeneratorDiary = copy(l:)
|
||||
function! GeneratorDiary.f() abort
|
||||
let lines = []
|
||||
|
||||
let links_with_captions = s:read_captions(vimwiki#diary#get_diary_files())
|
||||
let g_files = s:group_links(links_with_captions)
|
||||
let g_keys = s:sort(keys(g_files))
|
||||
|
||||
for year in g_keys
|
||||
if len(lines) > 0
|
||||
call add(lines, '')
|
||||
endif
|
||||
|
||||
call add(lines, substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', year , ''))
|
||||
|
||||
for month in s:sort(keys(g_files[year]))
|
||||
call add(lines, '')
|
||||
call add(lines, substitute(vimwiki#vars#get_syntaxlocal('rxH3_Template'),
|
||||
\ '__Header__', s:get_month_name(month), ''))
|
||||
|
||||
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
|
||||
for _ in range(vimwiki#vars#get_global('markdown_header_style'))
|
||||
call add(lines, '')
|
||||
endfor
|
||||
endif
|
||||
|
||||
for [fl, captions] in s:sort(items(g_files[year][month]))
|
||||
let topcap = captions['top']
|
||||
let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate2')
|
||||
|
||||
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
|
||||
let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink1Template')
|
||||
|
||||
if empty(topcap) " When using markdown syntax, we should ensure we always have a link description.
|
||||
let topcap = fl
|
||||
endif
|
||||
endif
|
||||
|
||||
if empty(topcap)
|
||||
let top_link_tpl = vimwiki#vars#get_global('WikiLinkTemplate1')
|
||||
else
|
||||
let top_link_tpl = link_tpl
|
||||
endif
|
||||
|
||||
let bullet = vimwiki#lst#default_symbol().' '
|
||||
let entry = substitute(top_link_tpl, '__LinkUrl__', fl, '')
|
||||
let entry = substitute(entry, '__LinkDescription__', topcap, '')
|
||||
" If single H1 then that will be used as the description for the link to the file
|
||||
" if multple H1 then the filename will be used as the description for the link to the
|
||||
" file and multiple H1 headers will be indented by shiftwidth
|
||||
call add(lines, repeat(' ', vimwiki#lst#get_list_margin()).bullet.entry)
|
||||
|
||||
let startindent = repeat(' ', vimwiki#lst#get_list_margin())
|
||||
let indentstring = repeat(' ', vimwiki#u#sw())
|
||||
|
||||
for [depth, subcap] in captions['rest']
|
||||
if empty(subcap)
|
||||
continue
|
||||
endif
|
||||
let entry = substitute(link_tpl, '__LinkUrl__', fl.'#'.subcap, '')
|
||||
let entry = substitute(entry, '__LinkDescription__', subcap, '')
|
||||
" if single H1 then depth H2=0, H3=1, H4=2, H5=3, H6=4
|
||||
" if multiple H1 then depth H1= 0, H2=1, H3=2, H4=3, H5=4, H6=5
|
||||
" indent subsequent headers levels by shiftwidth
|
||||
call add(lines, startindent.repeat(indentstring, depth+1).bullet.entry)
|
||||
endfor
|
||||
endfor
|
||||
|
||||
endfor
|
||||
endfor
|
||||
|
||||
return lines
|
||||
endfunction
|
||||
|
||||
let current_file = vimwiki#path#path_norm(expand('%:p'))
|
||||
let diary_file = vimwiki#path#path_norm(s:diary_index())
|
||||
if vimwiki#path#is_equal(current_file, diary_file)
|
||||
let content_rx = '^\%(\s*\* \)\|\%(^\s*$\)\|\%('.vimwiki#vars#get_syntaxlocal('rxHeader').'\)'
|
||||
call vimwiki#base#update_listing_in_buffer(s:format_diary(),
|
||||
\ vimwiki#vars#get_wikilocal('diary_header'), content_rx, line('$')+1, 1)
|
||||
let content_rx = '^\%('.vimwiki#vars#get_syntaxlocal('rxHeader').'\)\|'.
|
||||
\ '\%(^\s*$\)\|\%('.vimwiki#vars#get_syntaxlocal('rxListBullet').'\)'
|
||||
|
||||
call vimwiki#base#update_listing_in_buffer(
|
||||
\ GeneratorDiary,
|
||||
\ vimwiki#vars#get_wikilocal('diary_header'),
|
||||
\ content_rx,
|
||||
\ 1,
|
||||
\ 1,
|
||||
\ 1)
|
||||
else
|
||||
echomsg 'Vimwiki Error: You can generate diary links only in a diary index page!'
|
||||
endif
|
||||
@ -295,7 +405,7 @@ endfunction
|
||||
|
||||
|
||||
" Callback function for Calendar.vim
|
||||
function! vimwiki#diary#calendar_action(day, month, year, week, dir)
|
||||
function! vimwiki#diary#calendar_action(day, month, year, week, dir) abort
|
||||
let day = s:prefix_zero(a:day)
|
||||
let month = s:prefix_zero(a:month)
|
||||
|
||||
@ -317,11 +427,10 @@ function! vimwiki#diary#calendar_action(day, month, year, week, dir)
|
||||
endfunction
|
||||
|
||||
|
||||
function vimwiki#diary#calendar_sign(day, month, year)
|
||||
function! vimwiki#diary#calendar_sign(day, month, year) abort
|
||||
let day = s:prefix_zero(a:day)
|
||||
let month = s:prefix_zero(a:month)
|
||||
let sfile = vimwiki#vars#get_wikilocal('path').vimwiki#vars#get_wikilocal('diary_rel_path').
|
||||
\ a:year.'-'.month.'-'.day.vimwiki#vars#get_wikilocal('ext')
|
||||
return filereadable(expand(sfile))
|
||||
endfunction
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
" Home: https://github.com/vimwiki/vimwiki/
|
||||
|
||||
|
||||
if exists("g:loaded_vimwiki_list_auto") || &cp
|
||||
if exists('g:loaded_vimwiki_list_auto') || &compatible
|
||||
finish
|
||||
endif
|
||||
let g:loaded_vimwiki_list_auto = 1
|
||||
@ -14,12 +14,12 @@ let g:loaded_vimwiki_list_auto = 1
|
||||
" incrementation functions for the various kinds of numbers
|
||||
" ---------------------------------------------------------
|
||||
|
||||
function! s:increment_1(value)
|
||||
function! s:increment_1(value) abort
|
||||
return eval(a:value) + 1
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:increment_A(value)
|
||||
function! s:increment_A(value) abort
|
||||
let list_of_chars = split(a:value, '.\zs')
|
||||
let done = 0
|
||||
for idx in reverse(range(len(list_of_chars)))
|
||||
@ -39,7 +39,7 @@ function! s:increment_A(value)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:increment_a(value)
|
||||
function! s:increment_a(value) abort
|
||||
let list_of_chars = split(a:value, '.\zs')
|
||||
let done = 0
|
||||
for idx in reverse(range(len(list_of_chars)))
|
||||
@ -59,7 +59,7 @@ function! s:increment_a(value)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:increment_I(value)
|
||||
function! s:increment_I(value) abort
|
||||
let subst_list = [ ['XLVIII$', 'IL'], ['VIII$', 'IX'], ['III$', 'IV'],
|
||||
\ ['DCCCXCIX$', 'CM'], ['CCCXCIX$', 'CD'], ['LXXXIX$', 'XC'],
|
||||
\ ['XXXIX$', 'XL'], ['\(I\{1,2\}\)$', '\1I'], ['CDXCIX$', 'D'],
|
||||
@ -74,7 +74,7 @@ function! s:increment_I(value)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:increment_i(value)
|
||||
function! s:increment_i(value) abort
|
||||
let subst_list = [ ['xlviii$', 'il'], ['viii$', 'ix'], ['iii$', 'iv'],
|
||||
\ ['dcccxcix$', 'cm'], ['cccxcix$', 'cd'], ['lxxxix$', 'xc'],
|
||||
\ ['xxxix$', 'xl'], ['\(i\{1,2\}\)$', '\1i'], ['cdxcix$', 'd'],
|
||||
@ -93,41 +93,41 @@ endfunction
|
||||
" utility functions
|
||||
" ---------------------------------------------------------
|
||||
|
||||
function! s:substitute_rx_in_line(lnum, pattern, new_string)
|
||||
function! s:substitute_rx_in_line(lnum, pattern, new_string) abort
|
||||
call setline(a:lnum, substitute(getline(a:lnum), a:pattern, a:new_string, ''))
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:substitute_string_in_line(lnum, old_string, new_string)
|
||||
function! s:substitute_string_in_line(lnum, old_string, new_string) abort
|
||||
call s:substitute_rx_in_line(a:lnum, vimwiki#u#escape(a:old_string), a:new_string)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:first_char(string)
|
||||
function! s:first_char(string) abort
|
||||
return matchstr(a:string, '^.')
|
||||
endfunction
|
||||
|
||||
|
||||
if exists("*strdisplaywidth")
|
||||
function! s:string_length(str)
|
||||
if exists('*strdisplaywidth')
|
||||
function! s:string_length(str) abort
|
||||
return strdisplaywidth(a:str)
|
||||
endfunction
|
||||
else
|
||||
function! s:string_length(str)
|
||||
function! s:string_length(str) abort
|
||||
return strlen(substitute(a:str, '.', 'x', 'g'))
|
||||
endfunction
|
||||
endif
|
||||
|
||||
|
||||
function! vimwiki#lst#default_symbol()
|
||||
function! vimwiki#lst#default_symbol() abort
|
||||
return vimwiki#vars#get_syntaxlocal('list_markers')[0]
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#lst#get_list_margin()
|
||||
function! vimwiki#lst#get_list_margin() abort
|
||||
let list_margin = vimwiki#vars#get_wikilocal('list_margin')
|
||||
if list_margin < 0
|
||||
return &sw
|
||||
return &shiftwidth
|
||||
else
|
||||
return list_margin
|
||||
endif
|
||||
@ -136,7 +136,7 @@ endfunction
|
||||
|
||||
"Returns: the column where the text of a line starts (possible list item
|
||||
"markers and checkboxes are skipped)
|
||||
function! s:text_begin(lnum)
|
||||
function! s:text_begin(lnum) abort
|
||||
return s:string_length(matchstr(getline(a:lnum), vimwiki#vars#get_syntaxlocal('rxListItem')))
|
||||
endfunction
|
||||
|
||||
@ -144,7 +144,7 @@ endfunction
|
||||
"Returns: 2 if there is a marker and text
|
||||
" 1 for a marker and no text
|
||||
" 0 for no marker at all (empty line or only text)
|
||||
function! s:line_has_marker(lnum)
|
||||
function! s:line_has_marker(lnum) abort
|
||||
if getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxListItem').'\s*$'
|
||||
return 1
|
||||
elseif getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxListItem').'\s*\S'
|
||||
@ -165,7 +165,7 @@ endfunction
|
||||
"type - 1 for bulleted item, 2 for numbered item, 0 for a regular line
|
||||
"mrkr - the concrete marker, e.g. '**' or 'b)'
|
||||
"cb - the char in the checkbox or '' if there is no checkbox
|
||||
function! s:get_item(lnum)
|
||||
function! s:get_item(lnum) abort
|
||||
let item = {'lnum': a:lnum}
|
||||
if a:lnum == 0 || a:lnum > line('$')
|
||||
let item.type = 0
|
||||
@ -174,15 +174,15 @@ function! s:get_item(lnum)
|
||||
|
||||
let matches = matchlist(getline(a:lnum), vimwiki#vars#get_syntaxlocal('rxListItem'))
|
||||
if matches == [] ||
|
||||
\ (matches[1] == '' && matches[2] == '') ||
|
||||
\ (matches[1] != '' && matches[2] != '')
|
||||
\ (matches[1] ==? '' && matches[2] ==? '') ||
|
||||
\ (matches[1] !=? '' && matches[2] !=? '')
|
||||
let item.type = 0
|
||||
return item
|
||||
endif
|
||||
|
||||
let item.cb = matches[3]
|
||||
|
||||
if matches[1] != ''
|
||||
if matches[1] !=? ''
|
||||
let item.type = 1
|
||||
let item.mrkr = matches[1]
|
||||
else
|
||||
@ -194,14 +194,14 @@ function! s:get_item(lnum)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:empty_item()
|
||||
function! s:empty_item() abort
|
||||
return {'type': 0}
|
||||
endfunction
|
||||
|
||||
|
||||
"Returns: level of the line
|
||||
"0 is the 'highest' level
|
||||
function! s:get_level(lnum)
|
||||
function! s:get_level(lnum) abort
|
||||
if getline(a:lnum) =~# '^\s*$'
|
||||
return 0
|
||||
endif
|
||||
@ -209,7 +209,7 @@ function! s:get_level(lnum)
|
||||
let level = indent(a:lnum)
|
||||
else
|
||||
let level = s:string_length(matchstr(getline(a:lnum),
|
||||
\ vimwiki#vars#get_syntaxlocal(rx_bullet_chars)))-1
|
||||
\ vimwiki#vars#get_syntaxlocal('rx_bullet_chars')))-1
|
||||
if level < 0
|
||||
let level = (indent(a:lnum) == 0) ? 0 : 9999
|
||||
endif
|
||||
@ -221,7 +221,7 @@ endfunction
|
||||
"Returns: 1, a, i, A, I or ''
|
||||
"If in doubt if alphanumeric character or romanian
|
||||
"numeral, peek in the previous line
|
||||
function! s:guess_kind_of_numbered_item(item)
|
||||
function! s:guess_kind_of_numbered_item(item) abort
|
||||
if a:item.type != 2 | return '' | endif
|
||||
let number_chars = a:item.mrkr[:-2]
|
||||
let divisor = a:item.mrkr[-1:]
|
||||
@ -282,14 +282,14 @@ function! s:guess_kind_of_numbered_item(item)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:regexp_of_marker(item)
|
||||
function! s:regexp_of_marker(item) abort
|
||||
if a:item.type == 1
|
||||
return vimwiki#u#escape(a:item.mrkr)
|
||||
elseif a:item.type == 2
|
||||
let number_divisors = vimwiki#vars#get_syntaxlocal('number_divisors')
|
||||
for ki in ['d', 'u', 'l']
|
||||
let match = matchstr(a:item.mrkr, '\'.ki.'\+['.number_divisors.']')
|
||||
if match != ''
|
||||
if match !=? ''
|
||||
return '\'.ki.'\+'.vimwiki#u#escape(match[-1:])
|
||||
endif
|
||||
endfor
|
||||
@ -300,7 +300,7 @@ endfunction
|
||||
|
||||
|
||||
" Returns: Whether or not the checkbox of a list item is [X] or [-]
|
||||
function! s:is_closed(item)
|
||||
function! s:is_closed(item) abort
|
||||
let state = a:item.cb
|
||||
return state ==# vimwiki#vars#get_syntaxlocal('listsyms_list')[-1]
|
||||
\ || state ==# vimwiki#vars#get_global('listsym_rejected')
|
||||
@ -312,7 +312,7 @@ endfunction
|
||||
|
||||
"Returns: the list item after a:item or an empty item
|
||||
"If a:ignore_kind is 1, the markers can differ
|
||||
function! s:get_next_list_item(item, ignore_kind)
|
||||
function! s:get_next_list_item(item, ignore_kind) abort
|
||||
let org_lvl = s:get_level(a:item.lnum)
|
||||
if !a:ignore_kind
|
||||
let org_regex = s:regexp_of_marker(a:item)
|
||||
@ -336,7 +336,7 @@ endfunction
|
||||
|
||||
"Returns: the list item before a:item or an empty item
|
||||
"If a:ignore_kind is 1, the markers can differ
|
||||
function! s:get_prev_list_item(item, ignore_kind)
|
||||
function! s:get_prev_list_item(item, ignore_kind) abort
|
||||
let org_lvl = s:get_level(a:item.lnum)
|
||||
if !a:ignore_kind
|
||||
let org_regex = s:regexp_of_marker(a:item)
|
||||
@ -358,7 +358,7 @@ function! s:get_prev_list_item(item, ignore_kind)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex)
|
||||
function! s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex) abort
|
||||
let cur_linecontent = getline(a:cur_ln)
|
||||
if a:cur_lvl == a:org_lvl
|
||||
if cur_linecontent =~# '^\s*'.a:org_regex.'\s'
|
||||
@ -372,7 +372,7 @@ function! s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl)
|
||||
function! s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl) abort
|
||||
if a:cur_lvl == a:org_lvl
|
||||
return s:get_item(a:cur_ln)
|
||||
elseif a:cur_lvl < a:org_lvl
|
||||
@ -381,7 +381,7 @@ function! s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_first_item_in_list(item, ignore_kind)
|
||||
function! s:get_first_item_in_list(item, ignore_kind) abort
|
||||
let cur_item = a:item
|
||||
while 1
|
||||
let prev_item = s:get_prev_list_item(cur_item, a:ignore_kind)
|
||||
@ -395,7 +395,7 @@ function! s:get_first_item_in_list(item, ignore_kind)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_last_item_in_list(item, ignore_kind)
|
||||
function! s:get_last_item_in_list(item, ignore_kind) abort
|
||||
let cur_item = a:item
|
||||
while 1
|
||||
let next_item = s:get_next_list_item(cur_item, a:ignore_kind)
|
||||
@ -413,17 +413,19 @@ endfunction
|
||||
"0 in case of nonvalid line.
|
||||
"If there is no second argument, 0 is returned at a header, otherwise the
|
||||
"header is skipped
|
||||
function! s:get_next_line(lnum, ...)
|
||||
function! s:get_next_line(lnum, ...) abort
|
||||
if getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxPreStart')
|
||||
let cur_ln = a:lnum + 1
|
||||
while cur_ln <= line('$') && getline(cur_ln) !~# vimwiki#vars#get_syntaxlocal('rxPreEnd')
|
||||
let cur_ln += 1
|
||||
endwhile
|
||||
let next_line = cur_ln
|
||||
let next_line = cur_ln + 1
|
||||
else
|
||||
let next_line = nextnonblank(a:lnum+1)
|
||||
let next_line = a:lnum + 1
|
||||
endif
|
||||
|
||||
let next_line = nextnonblank(next_line)
|
||||
|
||||
if a:0 > 0 && getline(next_line) =~# vimwiki#vars#get_syntaxlocal('rxHeader')
|
||||
let next_line = s:get_next_line(next_line, 1)
|
||||
endif
|
||||
@ -439,20 +441,20 @@ endfunction
|
||||
|
||||
"Returns: lnum-1 in most cases, but skips blank lines and preformatted text
|
||||
"0 in case of nonvalid line and a header, because a header ends every list
|
||||
function! s:get_prev_line(lnum)
|
||||
let prev_line = prevnonblank(a:lnum-1)
|
||||
|
||||
if getline(prev_line) =~# vimwiki#vars#get_syntaxlocal('rxPreEnd')
|
||||
function! s:get_prev_line(lnum) abort
|
||||
let cur_ln = a:lnum - 1
|
||||
|
||||
if getline(cur_ln) =~# vimwiki#vars#get_syntaxlocal('rxPreEnd')
|
||||
while 1
|
||||
if cur_ln == 0 || getline(cur_ln) =~# vimwiki#vars#get_syntaxlocal('rxPreStart')
|
||||
break
|
||||
endif
|
||||
let cur_ln -= 1
|
||||
endwhile
|
||||
let prev_line = cur_ln
|
||||
endif
|
||||
|
||||
let prev_line = prevnonblank(cur_ln)
|
||||
|
||||
if prev_line < 0 || prev_line > line('$') ||
|
||||
\ getline(prev_line) =~# vimwiki#vars#get_syntaxlocal('rxHeader')
|
||||
return 0
|
||||
@ -462,7 +464,7 @@ function! s:get_prev_line(lnum)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_first_child(item)
|
||||
function! s:get_first_child(item) abort
|
||||
if a:item.lnum >= line('$')
|
||||
return s:empty_item()
|
||||
endif
|
||||
@ -483,7 +485,7 @@ endfunction
|
||||
"Returns: the next sibling of a:child, given the parent item
|
||||
"Used for iterating over children
|
||||
"Note: child items do not necessarily have the same indent, i.e. level
|
||||
function! s:get_next_child_item(parent, child)
|
||||
function! s:get_next_child_item(parent, child) abort
|
||||
if a:parent.type == 0 | return s:empty_item() | endif
|
||||
let parent_lvl = s:get_level(a:parent.lnum)
|
||||
let cur_ln = s:get_last_line_of_item_incl_children(a:child)
|
||||
@ -502,7 +504,7 @@ function! s:get_next_child_item(parent, child)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_parent(item)
|
||||
function! s:get_parent(item) abort
|
||||
let parent_line = 0
|
||||
|
||||
let cur_ln = prevnonblank(a:item.lnum)
|
||||
@ -530,7 +532,7 @@ endfunction
|
||||
|
||||
|
||||
"Returns: the item above or the item below or an empty item
|
||||
function! s:get_a_neighbor_item(item)
|
||||
function! s:get_a_neighbor_item(item) abort
|
||||
let prev_item = s:get_prev_list_item(a:item, 1)
|
||||
if prev_item.type != 0
|
||||
return prev_item
|
||||
@ -544,7 +546,7 @@ function! s:get_a_neighbor_item(item)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_a_neighbor_item_in_column(lnum, column)
|
||||
function! s:get_a_neighbor_item_in_column(lnum, column) abort
|
||||
let cur_ln = s:get_prev_line(a:lnum)
|
||||
while cur_ln >= 1
|
||||
if s:get_level(cur_ln) <= a:column
|
||||
@ -558,7 +560,7 @@ endfunction
|
||||
|
||||
"Returns: the item if there is one in a:lnum
|
||||
"else the multiline item a:lnum belongs to
|
||||
function! s:get_corresponding_item(lnum)
|
||||
function! s:get_corresponding_item(lnum) abort
|
||||
let item = s:get_item(a:lnum)
|
||||
if item.type != 0
|
||||
return item
|
||||
@ -581,7 +583,7 @@ endfunction
|
||||
|
||||
|
||||
"Returns: the last line of a (possibly multiline) item, including all children
|
||||
function! s:get_last_line_of_item_incl_children(item)
|
||||
function! s:get_last_line_of_item_incl_children(item) abort
|
||||
let cur_ln = a:item.lnum
|
||||
let org_lvl = s:get_level(a:item.lnum)
|
||||
while 1
|
||||
@ -596,7 +598,7 @@ endfunction
|
||||
|
||||
"Returns: the last line of a (possibly multiline) item
|
||||
"Note: there can be other list items between the first and last line
|
||||
function! s:get_last_line_of_item(item)
|
||||
function! s:get_last_line_of_item(item) abort
|
||||
if a:item.type == 0 | return 0 | endif
|
||||
let org_lvl = s:get_level(a:item.lnum)
|
||||
let last_corresponding_line = a:item.lnum
|
||||
@ -625,7 +627,7 @@ endfunction
|
||||
|
||||
"Renumbers the current list from a:item on downwards
|
||||
"Returns: the last item that was adjusted
|
||||
function! s:adjust_numbered_list_below(item, recursive)
|
||||
function! s:adjust_numbered_list_below(item, recursive) abort
|
||||
if !(a:item.type == 2 || (a:item.type == 1 && a:recursive))
|
||||
return a:item
|
||||
endif
|
||||
@ -655,7 +657,7 @@ function! s:adjust_numbered_list_below(item, recursive)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:adjust_items_recursively(parent)
|
||||
function! s:adjust_items_recursively(parent) abort
|
||||
if a:parent.type == 0
|
||||
return s:empty_item()
|
||||
end
|
||||
@ -679,7 +681,7 @@ endfunction
|
||||
"If a:ignore_kind == 0, only the items which have the same kind of marker as
|
||||
"a:item are considered, otherwise all items.
|
||||
"Returns: the last item that was adjusted
|
||||
function! s:adjust_numbered_list(item, ignore_kind, recursive)
|
||||
function! s:adjust_numbered_list(item, ignore_kind, recursive) abort
|
||||
if !(a:item.type == 2 || (a:item.type == 1 && (a:ignore_kind || a:recursive)))
|
||||
return s:empty_item()
|
||||
end
|
||||
@ -706,7 +708,7 @@ endfunction
|
||||
|
||||
"Renumbers the list the cursor is in
|
||||
"also update its parents checkbox state
|
||||
function! vimwiki#lst#adjust_numbered_list()
|
||||
function! vimwiki#lst#adjust_numbered_list() abort
|
||||
let cur_item = s:get_corresponding_item(line('.'))
|
||||
if cur_item.type == 0 | return | endif
|
||||
call s:adjust_numbered_list(cur_item, 1, 0)
|
||||
@ -716,7 +718,7 @@ endfunction
|
||||
|
||||
"Renumbers all lists of the buffer
|
||||
"of course, this might take some seconds
|
||||
function! vimwiki#lst#adjust_whole_buffer()
|
||||
function! vimwiki#lst#adjust_whole_buffer() abort
|
||||
let cur_ln = 1
|
||||
while 1
|
||||
let cur_item = s:get_item(cur_ln)
|
||||
@ -736,8 +738,8 @@ endfunction
|
||||
" ---------------------------------------------------------
|
||||
|
||||
"Returns: the rate of checkboxed list item in percent
|
||||
function! s:get_rate(item)
|
||||
if a:item.type == 0 || a:item.cb == ''
|
||||
function! s:get_rate(item) abort
|
||||
if a:item.type == 0 || a:item.cb ==? ''
|
||||
return -1
|
||||
endif
|
||||
let state = a:item.cb
|
||||
@ -751,7 +753,7 @@ endfunction
|
||||
|
||||
"Set state of the list item to [ ] or [o] or whatever
|
||||
"Returns: 1 if the state changed, 0 otherwise
|
||||
function! s:set_state(item, new_rate)
|
||||
function! s:set_state(item, new_rate) abort
|
||||
let new_state = s:rate_to_state(a:new_rate)
|
||||
let old_state = s:rate_to_state(s:get_rate(a:item))
|
||||
if new_state !=# old_state
|
||||
@ -766,7 +768,7 @@ endfunction
|
||||
" Sets the state of the list item to [ ] or [o] or whatever. Updates the states of its child items.
|
||||
" If the new state should be [X] or [-], the state of the current list item is changed to this
|
||||
" state, but if a child item already has [X] or [-] it is left alone.
|
||||
function! s:set_state_plus_children(item, new_rate, ...)
|
||||
function! s:set_state_plus_children(item, new_rate, ...) abort
|
||||
let retain_state_if_closed = a:0 > 0 && a:1 > 0
|
||||
|
||||
if !(retain_state_if_closed && (a:new_rate == 100 || a:new_rate == -1) && s:is_closed(a:item))
|
||||
@ -810,7 +812,7 @@ function! s:set_state_plus_children(item, new_rate, ...)
|
||||
if child_item.type == 0
|
||||
break
|
||||
endif
|
||||
if child_item.cb != ''
|
||||
if child_item.cb !=? ''
|
||||
call s:set_state_plus_children(child_item, a:new_rate, retain_closed_children)
|
||||
endif
|
||||
let child_item = s:get_next_child_item(a:item, child_item)
|
||||
@ -819,7 +821,7 @@ endfunction
|
||||
|
||||
|
||||
"Returns: the appropriate symbol for a given percent rate
|
||||
function! s:rate_to_state(rate)
|
||||
function! s:rate_to_state(rate) abort
|
||||
let listsyms_list = vimwiki#vars#get_syntaxlocal('listsyms_list')
|
||||
let state = ''
|
||||
let n = len(listsyms_list)
|
||||
@ -839,8 +841,8 @@ endfunction
|
||||
|
||||
"updates the symbol of a checkboxed item according to the symbols of its
|
||||
"children
|
||||
function! s:update_state(item)
|
||||
if a:item.type == 0 || a:item.cb == ''
|
||||
function! s:update_state(item) abort
|
||||
if a:item.type == 0 || a:item.cb ==? ''
|
||||
return
|
||||
endif
|
||||
|
||||
@ -854,7 +856,7 @@ function! s:update_state(item)
|
||||
if child_item.type == 0
|
||||
break
|
||||
endif
|
||||
if child_item.cb != ''
|
||||
if child_item.cb !=? ''
|
||||
let rate = s:get_rate(child_item)
|
||||
if rate == -1
|
||||
" for calculating the parent rate, a [-] item counts as much as a [X] item ...
|
||||
@ -884,7 +886,7 @@ function! s:update_state(item)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:set_state_recursively(item, new_rate)
|
||||
function! s:set_state_recursively(item, new_rate) abort
|
||||
let state_changed = s:set_state(a:item, a:new_rate)
|
||||
if state_changed
|
||||
call s:update_state(s:get_parent(a:item))
|
||||
@ -894,8 +896,8 @@ endfunction
|
||||
|
||||
"Creates checkbox in a list item.
|
||||
"Returns: 1 if successful
|
||||
function! s:create_cb(item, start_rate)
|
||||
if a:item.type == 0 || a:item.cb != ''
|
||||
function! s:create_cb(item, start_rate) abort
|
||||
if a:item.type == 0 || a:item.cb !=? ''
|
||||
return 0
|
||||
endif
|
||||
|
||||
@ -909,9 +911,9 @@ function! s:create_cb(item, start_rate)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:remove_cb(item)
|
||||
function! s:remove_cb(item) abort
|
||||
let item = a:item
|
||||
if item.type != 0 && item.cb != ''
|
||||
if item.type != 0 && item.cb !=? ''
|
||||
let item.cb = ''
|
||||
call s:substitute_rx_in_line(item.lnum, '\s\+\[.\]', '')
|
||||
endif
|
||||
@ -920,7 +922,7 @@ endfunction
|
||||
|
||||
|
||||
" Change state of the checkboxes in the lines of the given range
|
||||
function! s:change_cb(from_line, to_line, new_rate)
|
||||
function! s:change_cb(from_line, to_line, new_rate) abort
|
||||
let from_item = s:get_corresponding_item(a:from_line)
|
||||
if from_item.type == 0
|
||||
return
|
||||
@ -930,7 +932,7 @@ function! s:change_cb(from_line, to_line, new_rate)
|
||||
|
||||
for cur_ln in range(from_item.lnum, a:to_line)
|
||||
let cur_item = s:get_item(cur_ln)
|
||||
if cur_item.type != 0 && cur_item.cb != ''
|
||||
if cur_item.type != 0 && cur_item.cb !=? ''
|
||||
call s:set_state_plus_children(cur_item, a:new_rate)
|
||||
let cur_parent_item = s:get_parent(cur_item)
|
||||
if index(parent_items_of_lines, cur_parent_item) == -1
|
||||
@ -948,13 +950,13 @@ endfunction
|
||||
|
||||
" Toggles checkbox between two states in the lines of the given range, creates checkboxes (with
|
||||
" a:start_rate as state) if there aren't any.
|
||||
function! s:toggle_create_cb(from_line, to_line, state1, state2, start_rate)
|
||||
function! s:toggle_create_cb(from_line, to_line, state1, state2, start_rate) abort
|
||||
let from_item = s:get_corresponding_item(a:from_line)
|
||||
if from_item.type == 0
|
||||
return
|
||||
endif
|
||||
|
||||
if from_item.cb == ''
|
||||
if from_item.cb ==? ''
|
||||
|
||||
"if from_line has no CB, make a CB in every selected line
|
||||
let parent_items_of_lines = []
|
||||
@ -989,7 +991,7 @@ endfunction
|
||||
|
||||
"Decrement checkbox between [ ] and [X]
|
||||
"in the lines of the given range
|
||||
function! vimwiki#lst#decrement_cb(from_line, to_line)
|
||||
function! vimwiki#lst#decrement_cb(from_line, to_line) abort
|
||||
let from_item = s:get_corresponding_item(a:from_line)
|
||||
if from_item.type == 0
|
||||
return
|
||||
@ -1007,7 +1009,7 @@ endfunction
|
||||
|
||||
"Increment checkbox between [ ] and [X]
|
||||
"in the lines of the given range
|
||||
function! vimwiki#lst#increment_cb(from_line, to_line)
|
||||
function! vimwiki#lst#increment_cb(from_line, to_line) abort
|
||||
let from_item = s:get_corresponding_item(a:from_line)
|
||||
if from_item.type == 0
|
||||
return
|
||||
@ -1025,19 +1027,19 @@ endfunction
|
||||
|
||||
"Toggles checkbox between [ ] and [X] or creates one
|
||||
"in the lines of the given range
|
||||
function! vimwiki#lst#toggle_cb(from_line, to_line)
|
||||
function! vimwiki#lst#toggle_cb(from_line, to_line) abort
|
||||
return s:toggle_create_cb(a:from_line, a:to_line, 100, 0, 0)
|
||||
endfunction
|
||||
|
||||
|
||||
"Toggles checkbox between [ ] and [-] or creates one
|
||||
"in the lines of the given range
|
||||
function! vimwiki#lst#toggle_rejected_cb(from_line, to_line)
|
||||
function! vimwiki#lst#toggle_rejected_cb(from_line, to_line) abort
|
||||
return s:toggle_create_cb(a:from_line, a:to_line, -1, 0, -1)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#lst#remove_cb(first_line, last_line)
|
||||
function! vimwiki#lst#remove_cb(first_line, last_line) abort
|
||||
let first_item = s:get_corresponding_item(a:first_line)
|
||||
let last_item = s:get_corresponding_item(a:last_line)
|
||||
|
||||
@ -1065,7 +1067,7 @@ function! vimwiki#lst#remove_cb(first_line, last_line)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#lst#remove_cb_in_list()
|
||||
function! vimwiki#lst#remove_cb_in_list() abort
|
||||
let first_item = s:get_first_item_in_list(s:get_corresponding_item(line('.')), 0)
|
||||
|
||||
let cur_item = first_item
|
||||
@ -1088,7 +1090,7 @@ endfunction
|
||||
" change the level of list items
|
||||
" ---------------------------------------------------------
|
||||
|
||||
function! s:set_indent(lnum, new_indent)
|
||||
function! s:set_indent(lnum, new_indent) abort
|
||||
if &expandtab
|
||||
let indentstring = repeat(' ', a:new_indent)
|
||||
else
|
||||
@ -1098,7 +1100,7 @@ function! s:set_indent(lnum, new_indent)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:decrease_level(item)
|
||||
function! s:decrease_level(item) abort
|
||||
let removed_indent = 0
|
||||
if vimwiki#vars#get_syntaxlocal('recurring_bullets') && a:item.type == 1 &&
|
||||
\ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'),
|
||||
@ -1121,7 +1123,7 @@ function! s:decrease_level(item)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:increase_level(item)
|
||||
function! s:increase_level(item) abort
|
||||
let additional_indent = 0
|
||||
if vimwiki#vars#get_syntaxlocal('recurring_bullets') && a:item.type == 1 &&
|
||||
\ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'),
|
||||
@ -1145,7 +1147,7 @@ endfunction
|
||||
|
||||
"adds a:indent_by to the current indent
|
||||
"a:indent_by can be negative
|
||||
function! s:indent_line_by(lnum, indent_by)
|
||||
function! s:indent_line_by(lnum, indent_by) abort
|
||||
let item = s:get_item(a:lnum)
|
||||
if vimwiki#vars#get_syntaxlocal('recurring_bullets') && item.type == 1 &&
|
||||
\ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'),
|
||||
@ -1162,12 +1164,12 @@ endfunction
|
||||
|
||||
|
||||
"changes lvl of lines in selection
|
||||
function! s:change_level(from_line, to_line, direction, plus_children)
|
||||
function! s:change_level(from_line, to_line, direction, plus_children) abort
|
||||
let from_item = s:get_corresponding_item(a:from_line)
|
||||
if from_item.type == 0
|
||||
if a:direction ==# 'increase' && a:from_line == a:to_line && empty(getline(a:from_line))
|
||||
"that's because :> doesn't work on an empty line
|
||||
normal! gi
|
||||
exe 'normal!' "gi\<C-T>"
|
||||
else
|
||||
execute a:from_line.','.a:to_line.(a:direction ==# 'increase' ? '>' : '<')
|
||||
endif
|
||||
@ -1225,7 +1227,7 @@ function! s:change_level(from_line, to_line, direction, plus_children)
|
||||
endif
|
||||
call s:update_state(old_parent)
|
||||
let from_item = s:get_item(from_item.lnum)
|
||||
if from_item.cb != ''
|
||||
if from_item.cb !=? ''
|
||||
call s:update_state(from_item)
|
||||
call s:update_state(s:get_parent(from_item))
|
||||
endif
|
||||
@ -1239,7 +1241,7 @@ function! s:change_level(from_line, to_line, direction, plus_children)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#lst#change_level(from_line, to_line, direction, plus_children)
|
||||
function! vimwiki#lst#change_level(from_line, to_line, direction, plus_children) abort
|
||||
let cur_col = col('$') - col('.')
|
||||
call s:change_level(a:from_line, a:to_line, a:direction, a:plus_children)
|
||||
call cursor('.', col('$') - cur_col)
|
||||
@ -1247,7 +1249,7 @@ endfunction
|
||||
|
||||
|
||||
"indent line a:lnum to be the continuation of a:prev_item
|
||||
function! s:indent_multiline(prev_item, lnum)
|
||||
function! s:indent_multiline(prev_item, lnum) abort
|
||||
if a:prev_item.type != 0
|
||||
call s:set_indent(a:lnum, s:text_begin(a:prev_item.lnum))
|
||||
endif
|
||||
@ -1259,7 +1261,7 @@ endfunction
|
||||
" ---------------------------------------------------------
|
||||
|
||||
"Returns: the position of a marker in g:vimwiki_list_markers
|
||||
function! s:get_idx_list_markers(item)
|
||||
function! s:get_idx_list_markers(item) abort
|
||||
if a:item.type == 1
|
||||
let m = s:first_char(a:item.mrkr)
|
||||
else
|
||||
@ -1270,7 +1272,7 @@ endfunction
|
||||
|
||||
|
||||
"changes the marker of the given item to the next in g:vimwiki_list_markers
|
||||
function! s:get_next_mrkr(item)
|
||||
function! s:get_next_mrkr(item) abort
|
||||
let markers = vimwiki#vars#get_syntaxlocal('list_markers')
|
||||
if a:item.type == 0
|
||||
let new_mrkr = markers[0]
|
||||
@ -1283,7 +1285,7 @@ endfunction
|
||||
|
||||
|
||||
"changes the marker of the given item to the previous in g:vimwiki_list_markers
|
||||
function! s:get_prev_mrkr(item)
|
||||
function! s:get_prev_mrkr(item) abort
|
||||
let markers = vimwiki#vars#get_syntaxlocal('list_markers')
|
||||
if a:item.type == 0
|
||||
return markers[-1]
|
||||
@ -1297,7 +1299,7 @@ function! s:get_prev_mrkr(item)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:set_new_mrkr(item, new_mrkr)
|
||||
function! s:set_new_mrkr(item, new_mrkr) abort
|
||||
if a:item.type == 0
|
||||
call s:substitute_rx_in_line(a:item.lnum, '^\s*\zs\ze', a:new_mrkr.' ')
|
||||
if indent(a:item.lnum) == 0 && !vimwiki#vars#get_syntaxlocal('recurring_bullets')
|
||||
@ -1309,16 +1311,16 @@ function! s:set_new_mrkr(item, new_mrkr)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#lst#change_marker(from_line, to_line, new_mrkr, mode)
|
||||
let cur_col_from_eol = col("$") - (a:mode ==# "i" ? col("'^") : col('.'))
|
||||
function! vimwiki#lst#change_marker(from_line, to_line, new_mrkr, mode) abort
|
||||
let cur_col_from_eol = col('$') - (a:mode ==# 'i' ? col("'^") : col('.'))
|
||||
let new_mrkr = a:new_mrkr
|
||||
let cur_ln = a:from_line
|
||||
while 1
|
||||
let cur_item = s:get_item(cur_ln)
|
||||
|
||||
if new_mrkr ==# "next"
|
||||
if new_mrkr ==# 'next'
|
||||
let new_mrkr = s:get_next_mrkr(cur_item)
|
||||
elseif new_mrkr ==# "prev"
|
||||
elseif new_mrkr ==# 'prev'
|
||||
let new_mrkr = s:get_prev_mrkr(cur_item)
|
||||
endif
|
||||
|
||||
@ -1363,7 +1365,7 @@ function! vimwiki#lst#change_marker(from_line, to_line, new_mrkr, mode)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#lst#change_marker_in_list(new_mrkr)
|
||||
function! vimwiki#lst#change_marker_in_list(new_mrkr) abort
|
||||
let cur_item = s:get_corresponding_item(line('.'))
|
||||
let first_item = s:get_first_item_in_list(cur_item, 0)
|
||||
let last_item = s:get_last_item_in_list(cur_item, 0)
|
||||
@ -1381,7 +1383,7 @@ endfunction
|
||||
|
||||
|
||||
"sets kind of the item depending on neighbor items and the parent item
|
||||
function! s:adjust_mrkr(item)
|
||||
function! s:adjust_mrkr(item) abort
|
||||
if a:item.type == 0 || vimwiki#vars#get_syntaxlocal('recurring_bullets')
|
||||
return
|
||||
endif
|
||||
@ -1407,14 +1409,14 @@ function! s:adjust_mrkr(item)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:clone_marker_from_to(from, to)
|
||||
function! s:clone_marker_from_to(from, to) abort
|
||||
let item_from = s:get_item(a:from)
|
||||
if item_from.type == 0 | return | endif
|
||||
let new_mrkr = item_from.mrkr . ' '
|
||||
call s:substitute_rx_in_line(a:to, '^\s*', new_mrkr)
|
||||
let new_indent = ( vimwiki#vars#get_syntaxlocal('recurring_bullets') ? 0 : indent(a:from) )
|
||||
call s:set_indent(a:to, new_indent)
|
||||
if item_from.cb != ''
|
||||
if item_from.cb !=? ''
|
||||
call s:create_cb(s:get_item(a:to), 0)
|
||||
call s:update_state(s:get_parent(s:get_item(a:to)))
|
||||
endif
|
||||
@ -1425,9 +1427,9 @@ function! s:clone_marker_from_to(from, to)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:remove_mrkr(item)
|
||||
function! s:remove_mrkr(item) abort
|
||||
let item = a:item
|
||||
if item.cb != ''
|
||||
if item.cb !=? ''
|
||||
let item = s:remove_cb(item)
|
||||
let parent_item = s:get_parent(item)
|
||||
else
|
||||
@ -1442,7 +1444,7 @@ function! s:remove_mrkr(item)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:create_marker(lnum)
|
||||
function! s:create_marker(lnum) abort
|
||||
let new_sibling = s:get_corresponding_item(a:lnum)
|
||||
if new_sibling.type == 0
|
||||
let new_sibling = s:get_a_neighbor_item_in_column(a:lnum, virtcol('.'))
|
||||
@ -1461,38 +1463,43 @@ endfunction
|
||||
" handle keys
|
||||
" ---------------------------------------------------------
|
||||
|
||||
function! vimwiki#lst#kbd_o()
|
||||
function! vimwiki#lst#kbd_o() abort
|
||||
let fold_end = foldclosedend('.')
|
||||
let lnum = (fold_end == -1) ? line('.') : fold_end
|
||||
let cur_item = s:get_item(lnum)
|
||||
let parent = s:get_corresponding_item(lnum)
|
||||
"inserting and deleting the x is necessary
|
||||
"because otherwise the indent is lost
|
||||
normal! ox
|
||||
if cur_item.lnum < s:get_last_line_of_item(cur_item)
|
||||
call s:indent_multiline(cur_item, cur_item.lnum+1)
|
||||
exe 'normal!' "ox\<C-H>"
|
||||
if !vimwiki#u#is_codeblock(lnum)
|
||||
if parent.type != 0
|
||||
call s:clone_marker_from_to(parent.lnum, cur_item.lnum+1)
|
||||
else
|
||||
call s:clone_marker_from_to(cur_item.lnum, cur_item.lnum+1)
|
||||
call s:indent_multiline(cur_item, cur_item.lnum+1)
|
||||
endif
|
||||
endif
|
||||
startinsert!
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#lst#kbd_O()
|
||||
normal! Ox
|
||||
function! vimwiki#lst#kbd_O() abort
|
||||
exe 'normal!' "Ox\<C-H>"
|
||||
let cur_ln = line('.')
|
||||
if !vimwiki#u#is_codeblock(cur_ln)
|
||||
if getline(cur_ln+1) !~# '^\s*$'
|
||||
call s:clone_marker_from_to(cur_ln+1, cur_ln)
|
||||
else
|
||||
call s:clone_marker_from_to(cur_ln-1, cur_ln)
|
||||
endif
|
||||
endif
|
||||
startinsert!
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:cr_on_empty_list_item(lnum, behavior)
|
||||
function! s:cr_on_empty_list_item(lnum, behavior) abort
|
||||
if a:behavior == 1
|
||||
"just make a new list item
|
||||
normal! gi
|
||||
exe 'normal!' "gi\<CR>\<ESC>"
|
||||
call s:clone_marker_from_to(a:lnum, a:lnum+1)
|
||||
startinsert!
|
||||
return
|
||||
@ -1506,7 +1513,7 @@ function! s:cr_on_empty_list_item(lnum, behavior)
|
||||
let item = s:get_item(a:lnum)
|
||||
let neighbor_item = s:get_a_neighbor_item(item)
|
||||
let child_item = s:get_first_child(item)
|
||||
let parent_item = (item.cb != '') ? s:get_parent(item) : s:empty_item()
|
||||
let parent_item = (item.cb !=? '') ? s:get_parent(item) : s:empty_item()
|
||||
normal! "_cc
|
||||
call s:adjust_numbered_list(neighbor_item, 0, 0)
|
||||
call s:adjust_numbered_list(child_item, 0, 0)
|
||||
@ -1518,8 +1525,8 @@ function! s:cr_on_empty_list_item(lnum, behavior)
|
||||
let item = s:get_item(a:lnum)
|
||||
let neighbor_item = s:get_a_neighbor_item(item)
|
||||
let child_item = s:get_first_child(item)
|
||||
let parent_item = (item.cb != '') ? s:get_parent(item) : s:empty_item()
|
||||
normal! "_cc
|
||||
let parent_item = (item.cb !=? '') ? s:get_parent(item) : s:empty_item()
|
||||
exe 'normal!' "_cc\<CR>"
|
||||
call s:adjust_numbered_list(neighbor_item, 0, 0)
|
||||
call s:adjust_numbered_list(child_item, 0, 0)
|
||||
call s:update_state(parent_item)
|
||||
@ -1534,7 +1541,7 @@ function! s:cr_on_empty_list_item(lnum, behavior)
|
||||
let item = s:get_item(a:lnum)
|
||||
let neighbor_item = s:get_a_neighbor_item(item)
|
||||
let child_item = s:get_first_child(item)
|
||||
let parent_item = (item.cb != '') ? s:get_parent(item) : s:empty_item()
|
||||
let parent_item = (item.cb !=? '') ? s:get_parent(item) : s:empty_item()
|
||||
normal! "_cc
|
||||
call s:adjust_numbered_list(neighbor_item, 0, 0)
|
||||
call s:adjust_numbered_list(child_item, 0, 0)
|
||||
@ -1545,21 +1552,28 @@ function! s:cr_on_empty_list_item(lnum, behavior)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:cr_on_empty_line(lnum, behavior) abort
|
||||
let lst = s:get_corresponding_item(a:lnum)
|
||||
|
||||
function! s:cr_on_empty_line(lnum, behavior)
|
||||
"inserting and deleting the x is necessary
|
||||
"because otherwise the indent is lost
|
||||
normal! gi
x
|
||||
exe 'normal!' "gi\<CR>x\<C-H>\<ESC>"
|
||||
|
||||
if a:behavior == 2 || a:behavior == 3
|
||||
if lst.type == 0 || vimwiki#u#is_codeblock(a:lnum)
|
||||
" don't insert new bullet if not part of a list
|
||||
return
|
||||
else
|
||||
call s:create_marker(a:lnum+1)
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:cr_on_list_item(lnum, insert_new_marker, not_at_eol)
|
||||
function! s:cr_on_list_item(lnum, insert_new_marker, not_at_eol) abort
|
||||
if a:insert_new_marker
|
||||
"the ultimate feature of this script: make new marker on <CR>
|
||||
normal! gi
|
||||
exe 'normal!' "gi\<CR>\<ESC>"
|
||||
call s:clone_marker_from_to(a:lnum, a:lnum+1)
|
||||
"tiny sweet extra feature: indent next line if current line ends with :
|
||||
if !a:not_at_eol && getline(a:lnum) =~# ':$'
|
||||
@ -1568,14 +1582,14 @@ function! s:cr_on_list_item(lnum, insert_new_marker, not_at_eol)
|
||||
else
|
||||
" || (cur_item.lnum < s:get_last_line_of_item(cur_item))
|
||||
"indent this line so that it becomes the continuation of the line above
|
||||
normal! gi
|
||||
exe 'normal!' "gi\<CR>\<ESC>"
|
||||
let prev_line = s:get_corresponding_item(s:get_prev_line(a:lnum+1))
|
||||
call s:indent_multiline(prev_line, a:lnum+1)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#lst#kbd_cr(normal, just_mrkr)
|
||||
function! vimwiki#lst#kbd_cr(normal, just_mrkr) abort
|
||||
let lnum = line('.')
|
||||
let has_bp = s:line_has_marker(lnum)
|
||||
|
||||
@ -1594,8 +1608,8 @@ function! vimwiki#lst#kbd_cr(normal, just_mrkr)
|
||||
if getline('.')[col("'^")-1:] =~# '^\s\+$'
|
||||
let cur_col = 0
|
||||
else
|
||||
let cur_col = col("$") - col("'^")
|
||||
if getline('.')[col("'^")-1] =~# '\s' && exists("*strdisplaywidth")
|
||||
let cur_col = col('$') - col("'^")
|
||||
if getline('.')[col("'^")-1] =~# '\s' && exists('*strdisplaywidth')
|
||||
let ws_behind_cursor =
|
||||
\ strdisplaywidth(matchstr(getline('.')[col("'^")-1:], '\s\+'),
|
||||
\ virtcol("'^")-1)
|
||||
@ -1614,7 +1628,7 @@ function! vimwiki#lst#kbd_cr(normal, just_mrkr)
|
||||
call s:cr_on_list_item(lnum, insert_new_marker, cur_col)
|
||||
endif
|
||||
|
||||
call cursor(lnum+1, col("$") - cur_col)
|
||||
call cursor(lnum+1, col('$') - cur_col)
|
||||
if cur_col == 0
|
||||
startinsert!
|
||||
else
|
||||
@ -1625,8 +1639,8 @@ endfunction
|
||||
|
||||
|
||||
"creates a list item in the current line or removes it
|
||||
function! vimwiki#lst#toggle_list_item()
|
||||
let cur_col_from_eol = col("$") - col("'^")
|
||||
function! vimwiki#lst#toggle_list_item() abort
|
||||
let cur_col_from_eol = col('$') - col("'^")
|
||||
let cur_item = s:get_item(line('.'))
|
||||
|
||||
if cur_item.type == 0
|
||||
@ -1646,7 +1660,7 @@ function! vimwiki#lst#toggle_list_item()
|
||||
endif
|
||||
|
||||
"set cursor position s.t. it's on the same char as before
|
||||
let new_cur_col = col("$") - cur_col_from_eol
|
||||
let new_cur_col = col('$') - cur_col_from_eol
|
||||
call cursor(cur_item.lnum, new_cur_col >= 1 ? new_cur_col : 1)
|
||||
|
||||
if cur_col_from_eol == 0 || getline(cur_item.lnum) =~# '^\s*$'
|
||||
@ -1661,7 +1675,7 @@ endfunction
|
||||
" misc stuff
|
||||
" ---------------------------------------------------------
|
||||
|
||||
function! vimwiki#lst#TO_list_item(inner, visual)
|
||||
function! vimwiki#lst#TO_list_item(inner, visual) abort
|
||||
let lnum = prevnonblank('.')
|
||||
let item = s:get_corresponding_item(lnum)
|
||||
if item.type == 0
|
||||
@ -1680,7 +1694,7 @@ function! vimwiki#lst#TO_list_item(inner, visual)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#lst#fold_level(lnum)
|
||||
function! vimwiki#lst#fold_level(lnum) abort
|
||||
let cur_item = s:get_item(a:lnum)
|
||||
if cur_item.type != 0
|
||||
let parent_item = s:get_parent(cur_item)
|
||||
@ -1689,7 +1703,9 @@ function! vimwiki#lst#fold_level(lnum)
|
||||
if child_item.type != 0
|
||||
return 'a1'
|
||||
elseif next_item.type == 0
|
||||
return 's1'
|
||||
let c_indent = indent(a:lnum) / &shiftwidth
|
||||
let n_indent = indent(a:lnum+1) / &shiftwidth
|
||||
return 's' . (c_indent - n_indent)
|
||||
endif
|
||||
endif
|
||||
return '='
|
||||
|
@ -4,14 +4,14 @@
|
||||
" Home: https://github.com/vimwiki/vimwiki/
|
||||
|
||||
|
||||
function! s:safesubstitute(text, search, replace, mode)
|
||||
function! s:safesubstitute(text, search, replace, mode) abort
|
||||
" Substitute regexp but do not interpret replace
|
||||
let escaped = escape(a:replace, '\&')
|
||||
return substitute(a:text, a:search, escaped, a:mode)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#markdown_base#scan_reflinks()
|
||||
function! vimwiki#markdown_base#scan_reflinks() abort
|
||||
let mkd_refs = {}
|
||||
" construct list of references using vimgrep
|
||||
try
|
||||
@ -25,7 +25,7 @@ function! vimwiki#markdown_base#scan_reflinks()
|
||||
let matchline = join(getline(d.lnum, min([d.lnum+1, line('$')])), ' ')
|
||||
let descr = matchstr(matchline, vimwiki#vars#get_syntaxlocal('rxMkdRefMatchDescr'))
|
||||
let url = matchstr(matchline, vimwiki#vars#get_syntaxlocal('rxMkdRefMatchUrl'))
|
||||
if descr != '' && url != ''
|
||||
if descr !=? '' && url !=? ''
|
||||
let mkd_refs[descr] = url
|
||||
endif
|
||||
endfor
|
||||
@ -35,7 +35,7 @@ endfunction
|
||||
|
||||
|
||||
" try markdown reference links
|
||||
function! vimwiki#markdown_base#open_reflink(link)
|
||||
function! vimwiki#markdown_base#open_reflink(link) abort
|
||||
" echom "vimwiki#markdown_base#open_reflink"
|
||||
let link = a:link
|
||||
let mkd_refs = vimwiki#vars#get_bufferlocal('markdown_refs')
|
||||
@ -49,7 +49,7 @@ function! vimwiki#markdown_base#open_reflink(link)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:normalize_link_syntax_n()
|
||||
function! s:normalize_link_syntax_n() abort
|
||||
let lnum = line('.')
|
||||
|
||||
" try WikiIncl
|
||||
@ -97,9 +97,13 @@ function! s:normalize_link_syntax_n()
|
||||
" normalize_link_syntax_v
|
||||
let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWord'))
|
||||
if !empty(lnk)
|
||||
if vimwiki#base#is_diary_file(expand('%:p'))
|
||||
let sub = vimwiki#base#normalize_link_in_diary(lnk)
|
||||
else
|
||||
let sub = vimwiki#base#normalize_link_helper(lnk,
|
||||
\ vimwiki#vars#get_global('rxWord'), '',
|
||||
\ vimwiki#vars#get_syntaxlocal('Weblink1Template'))
|
||||
endif
|
||||
call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub)
|
||||
return
|
||||
endif
|
||||
@ -107,10 +111,10 @@ function! s:normalize_link_syntax_n()
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:normalize_link_syntax_v()
|
||||
function! s:normalize_link_syntax_v() abort
|
||||
let lnum = line('.')
|
||||
let sel_save = &selection
|
||||
let &selection = "old"
|
||||
let &selection = 'old'
|
||||
let rv = @"
|
||||
let rt = getregtype('"')
|
||||
let done = 0
|
||||
@ -118,10 +122,18 @@ function! s:normalize_link_syntax_v()
|
||||
try
|
||||
norm! gvy
|
||||
let visual_selection = @"
|
||||
|
||||
if vimwiki#base#is_diary_file(expand('%:p'))
|
||||
let link = vimwiki#base#normalize_link_in_diary(visual_selection)
|
||||
else
|
||||
let link = s:safesubstitute(vimwiki#vars#get_syntaxlocal('Weblink1Template'),
|
||||
\ '__LinkUrl__', visual_selection, '')
|
||||
let link = s:safesubstitute(link, '__LinkDescription__', visual_selection, '')
|
||||
endif
|
||||
|
||||
" replace spaces with new character if option is set
|
||||
let link = substitute(link, '\s', vimwiki#vars#get_wikilocal('links_space_char'), 'g')
|
||||
|
||||
let link = s:safesubstitute(link, '__LinkDescription__', visual_selection, '')
|
||||
call setreg('"', substitute(link, '\n', '', ''), visualmode())
|
||||
|
||||
" paste result
|
||||
@ -135,7 +147,7 @@ function! s:normalize_link_syntax_v()
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#markdown_base#normalize_link(is_visual_mode)
|
||||
function! vimwiki#markdown_base#normalize_link(is_visual_mode) abort
|
||||
if 0
|
||||
" Syntax-specific links
|
||||
else
|
||||
|
@ -4,28 +4,28 @@
|
||||
" Home: https://github.com/vimwiki/vimwiki/
|
||||
|
||||
|
||||
function! vimwiki#path#chomp_slash(str)
|
||||
function! vimwiki#path#chomp_slash(str) abort
|
||||
return substitute(a:str, '[/\\]\+$', '', '')
|
||||
endfunction
|
||||
|
||||
|
||||
" Define path-compare function, either case-sensitive or not, depending on OS.
|
||||
if vimwiki#u#is_windows()
|
||||
function! vimwiki#path#is_equal(p1, p2)
|
||||
function! vimwiki#path#is_equal(p1, p2) abort
|
||||
return a:p1 ==? a:p2
|
||||
endfunction
|
||||
else
|
||||
function! vimwiki#path#is_equal(p1, p2)
|
||||
function! vimwiki#path#is_equal(p1, p2) abort
|
||||
return a:p1 ==# a:p2
|
||||
endfunction
|
||||
endif
|
||||
|
||||
|
||||
" collapse sections like /a/b/../c to /a/c
|
||||
function! vimwiki#path#normalize(path)
|
||||
" collapse sections like /a/b/../c to /a/c and /a/b/./c to /a/b/c
|
||||
function! vimwiki#path#normalize(path) abort
|
||||
let path = a:path
|
||||
while 1
|
||||
let result = substitute(path, '/[^/]\+/\.\.', '', '')
|
||||
let intermediateResult = substitute(path, '/[^/]\+/\.\.', '', '')
|
||||
let result = substitute(intermediateResult, '/\./', '/', '')
|
||||
if result ==# path
|
||||
break
|
||||
endif
|
||||
@ -35,7 +35,7 @@ function! vimwiki#path#normalize(path)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#path#path_norm(path)
|
||||
function! vimwiki#path#path_norm(path) abort
|
||||
" /-slashes
|
||||
if a:path !~# '^scp:'
|
||||
let path = substitute(a:path, '\', '/', 'g')
|
||||
@ -49,21 +49,21 @@ function! vimwiki#path#path_norm(path)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#path#is_link_to_dir(link)
|
||||
function! vimwiki#path#is_link_to_dir(link) abort
|
||||
" Check if link is to a directory.
|
||||
" It should be ended with \ or /.
|
||||
return a:link =~# '\m[/\\]$'
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#path#abs_path_of_link(link)
|
||||
return vimwiki#path#normalize(expand("%:p:h").'/'.a:link)
|
||||
function! vimwiki#path#abs_path_of_link(link) abort
|
||||
return vimwiki#path#normalize(expand('%:p:h').'/'.a:link)
|
||||
endfunction
|
||||
|
||||
|
||||
" return longest common path prefix of 2 given paths.
|
||||
" '~/home/usrname/wiki', '~/home/usrname/wiki/shmiki' => '~/home/usrname/wiki'
|
||||
function! vimwiki#path#path_common_pfx(path1, path2)
|
||||
function! vimwiki#path#path_common_pfx(path1, path2) abort
|
||||
let p1 = split(a:path1, '[/\\]', 1)
|
||||
let p2 = split(a:path2, '[/\\]', 1)
|
||||
|
||||
@ -80,7 +80,7 @@ function! vimwiki#path#path_common_pfx(path1, path2)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#path#wikify_path(path)
|
||||
function! vimwiki#path#wikify_path(path) abort
|
||||
let result = resolve(fnamemodify(a:path, ':p'))
|
||||
if vimwiki#u#is_windows()
|
||||
let result = substitute(result, '\\', '/', 'g')
|
||||
@ -90,33 +90,60 @@ function! vimwiki#path#wikify_path(path)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#path#current_wiki_file()
|
||||
function! vimwiki#path#current_wiki_file() abort
|
||||
return vimwiki#path#wikify_path(expand('%:p'))
|
||||
endfunction
|
||||
|
||||
|
||||
" Returns: the relative path from a:dir to a:file
|
||||
function! vimwiki#path#relpath(dir, file)
|
||||
function! vimwiki#path#relpath(dir, file) abort
|
||||
" Check if dir here ('.') -> return file
|
||||
if empty(a:dir) || a:dir =~# '^\.[/\\]\?$'
|
||||
return a:file
|
||||
endif
|
||||
let result = []
|
||||
if vimwiki#u#is_windows()
|
||||
" TODO temporary fix see #478
|
||||
" not sure why paths get converted back to using forward slash
|
||||
" when passed to the function in the form C:\path\to\file
|
||||
let dir = substitute(a:dir, '/', '\', 'g')
|
||||
let file = substitute(a:file, '/', '\', 'g')
|
||||
let dir = split(dir, '\')
|
||||
let file = split(file, '\')
|
||||
else
|
||||
let dir = split(a:dir, '/')
|
||||
let file = split(a:file, '/')
|
||||
endif
|
||||
while (len(dir) > 0 && len(file) > 0) && vimwiki#path#is_equal(dir[0], file[0])
|
||||
call remove(dir, 0)
|
||||
call remove(file, 0)
|
||||
endwhile
|
||||
if empty(dir) && empty(file)
|
||||
if vimwiki#u#is_windows()
|
||||
" TODO temporary fix see #478
|
||||
return '.\'
|
||||
else
|
||||
return './'
|
||||
endif
|
||||
endif
|
||||
for segment in dir
|
||||
let result += ['..']
|
||||
endfor
|
||||
for segment in file
|
||||
let result += [segment]
|
||||
endfor
|
||||
if vimwiki#u#is_windows()
|
||||
" TODO temporary fix see #478
|
||||
let result_path = join(result, '\')
|
||||
if a:file =~? '\m\\$'
|
||||
let result_path .= '\'
|
||||
endif
|
||||
else
|
||||
let result_path = join(result, '/')
|
||||
if a:file =~ '\m/$'
|
||||
if a:file =~? '\m/$'
|
||||
let result_path .= '/'
|
||||
endif
|
||||
endif
|
||||
return result_path
|
||||
endfunction
|
||||
|
||||
@ -124,7 +151,7 @@ endfunction
|
||||
" If the optional argument provided and nonzero,
|
||||
" it will ask before creating a directory
|
||||
" Returns: 1 iff directory exists or successfully created
|
||||
function! vimwiki#path#mkdir(path, ...)
|
||||
function! vimwiki#path#mkdir(path, ...) abort
|
||||
let path = expand(a:path)
|
||||
|
||||
if path =~# '^scp:'
|
||||
@ -135,26 +162,26 @@ function! vimwiki#path#mkdir(path, ...)
|
||||
if isdirectory(path)
|
||||
return 1
|
||||
else
|
||||
if !exists("*mkdir")
|
||||
if !exists('*mkdir')
|
||||
return 0
|
||||
endif
|
||||
|
||||
let path = vimwiki#path#chomp_slash(path)
|
||||
if vimwiki#u#is_windows() && !empty(vimwiki#vars#get_global('w32_dir_enc'))
|
||||
let path = iconv(path, &enc, vimwiki#vars#get_global('w32_dir_enc'))
|
||||
let path = iconv(path, &encoding, vimwiki#vars#get_global('w32_dir_enc'))
|
||||
endif
|
||||
|
||||
if a:0 && a:1 && input("Vimwiki: Make new directory: ".path."\n [y]es/[N]o? ") !~? '^y'
|
||||
if a:0 && a:1 && input('Vimwiki: Make new directory: '.path."\n [y]es/[N]o? ") !~? '^y'
|
||||
return 0
|
||||
endif
|
||||
|
||||
call mkdir(path, "p")
|
||||
call mkdir(path, 'p')
|
||||
return 1
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#path#is_absolute(path)
|
||||
function! vimwiki#path#is_absolute(path) abort
|
||||
if vimwiki#u#is_windows()
|
||||
return a:path =~? '\m^\a:'
|
||||
else
|
||||
@ -168,13 +195,13 @@ endfunction
|
||||
" is because on windows ~\vimwiki//.tags is invalid but ~\vimwiki/.tags is a
|
||||
" valid path.
|
||||
if vimwiki#u#is_windows()
|
||||
function! vimwiki#path#join_path(directory, file)
|
||||
function! vimwiki#path#join_path(directory, file) abort
|
||||
let directory = vimwiki#path#chomp_slash(a:directory)
|
||||
let file = substitute(a:file, '\m^[\\/]\+', '', '')
|
||||
return directory . '/' . file
|
||||
endfunction
|
||||
else
|
||||
function! vimwiki#path#join_path(directory, file)
|
||||
function! vimwiki#path#join_path(directory, file) abort
|
||||
let directory = substitute(a:directory, '\m/\+$', '', '')
|
||||
let file = substitute(a:file, '\m^/\+', '', '')
|
||||
return directory . '/' . file
|
||||
|
@ -1,33 +1,137 @@
|
||||
body {font-family: Tahoma, Geneva, sans-serif; margin: 1em 2em 1em 2em; font-size: 100%; line-height: 130%;}
|
||||
h1, h2, h3, h4, h5, h6 {font-family: Trebuchet MS, Helvetica, sans-serif; font-weight: bold; line-height:100%; margin-top: 1.5em; margin-bottom: 0.5em;}
|
||||
h1 {font-size: 2.6em; color: #000000;}
|
||||
h2 {font-size: 2.2em; color: #404040;}
|
||||
h3 {font-size: 1.8em; color: #707070;}
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;;
|
||||
margin: 2em 4em 2em 4em;
|
||||
font-size: 120%;
|
||||
line-height: 130%;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-weight: bold;
|
||||
line-height:100%;
|
||||
margin-top: 1.5em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
h1 {font-size: 2em; color: #000000;}
|
||||
h2 {font-size: 1.8em; color: #404040;}
|
||||
h3 {font-size: 1.6em; color: #707070;}
|
||||
h4 {font-size: 1.4em; color: #909090;}
|
||||
h5 {font-size: 1.3em; color: #989898;}
|
||||
h6 {font-size: 1.2em; color: #9c9c9c;}
|
||||
p, pre, blockquote, table, ul, ol, dl {margin-top: 1em; margin-bottom: 1em;}
|
||||
ul ul, ul ol, ol ol, ol ul {margin-top: 0.5em; margin-bottom: 0.5em;}
|
||||
li {margin: 0.3em auto;}
|
||||
ul {margin-left: 2em; padding-left: 0.5em;}
|
||||
dt {font-weight: bold;}
|
||||
img {border: none;}
|
||||
pre {border-left: 1px solid #ccc; margin-left: 2em; padding-left: 0.5em;}
|
||||
blockquote {padding: 0.4em; background-color: #f6f5eb;}
|
||||
th, td {border: 1px solid #ccc; padding: 0.3em;}
|
||||
th {background-color: #f0f0f0;}
|
||||
hr {border: none; border-top: 1px solid #ccc; width: 100%;}
|
||||
del {text-decoration: line-through; color: #777777;}
|
||||
.toc li {list-style-type: none;}
|
||||
.todo {font-weight: bold; background-color: #f0ece8; color: #a03020;}
|
||||
.justleft {text-align: left;}
|
||||
.justright {text-align: right;}
|
||||
.justcenter {text-align: center;}
|
||||
.center {margin-left: auto; margin-right: auto;}
|
||||
.tag {background-color: #eeeeee; font-family: monospace; padding: 2px;}
|
||||
.header a {text-decoration: none; color: inherit;}
|
||||
h5 {font-size: 1.2em; color: #989898;}
|
||||
h6 {font-size: 1em; color: #9c9c9c;}
|
||||
|
||||
p, pre, blockquote, table, ul, ol, dl {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
ul ul, ul ol, ol ol, ol ul {
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
li { margin: 0.3em auto; }
|
||||
|
||||
ul {
|
||||
margin-left: 2em;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
dt { font-weight: bold; }
|
||||
|
||||
img { border: none; }
|
||||
|
||||
pre {
|
||||
border-left: 5px solid #dcdcdc;
|
||||
background-color: #f5f5f5;
|
||||
padding-left: 1em;
|
||||
font-family: Monaco, "Courier New", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace;
|
||||
font-size: 0.8em;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
p > a {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
font-size: 0.7em;
|
||||
padding: 3px 6px;
|
||||
border-radius: 3px;
|
||||
background-color: #1e90ff;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
p > a:hover {
|
||||
color: #dcdcdc;
|
||||
background-color: #484848;
|
||||
}
|
||||
|
||||
li > a {
|
||||
color: #1e90ff;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
li > a:hover { color: #ff4500; }
|
||||
|
||||
blockquote {
|
||||
color: #686868;
|
||||
font-size: 0.8em;
|
||||
line-height: 120%;
|
||||
padding: 0.8em;
|
||||
border-left: 5px solid #dcdcdc;
|
||||
}
|
||||
|
||||
th, td {
|
||||
border: 1px solid #ccc;
|
||||
padding: 0.3em;
|
||||
}
|
||||
|
||||
th { background-color: #f0f0f0; }
|
||||
|
||||
hr {
|
||||
border: none;
|
||||
border-top: 1px solid #ccc;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
del {
|
||||
text-decoration: line-through;
|
||||
color: #777777;
|
||||
}
|
||||
|
||||
.toc li { list-style-type: none; }
|
||||
|
||||
.todo {
|
||||
font-weight: bold;
|
||||
background-color: #ff4500 ;
|
||||
color: white;
|
||||
font-size: 0.8em;
|
||||
padding: 3px 6px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.justleft { text-align: left; }
|
||||
.justright { text-align: right; }
|
||||
.justcenter { text-align: center; }
|
||||
|
||||
.center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.tag {
|
||||
background-color: #eeeeee;
|
||||
font-family: monospace;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.header a {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/* classes for items of todo lists */
|
||||
|
||||
.rejected {
|
||||
/* list-style: none; */
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAACXBIWXMAAADFAAAAxQEdzbqoAAAAB3RJTUUH4QgEFhAtuWgv9wAAAPZQTFRFmpqam5iYnJaWnJeXnpSUn5OTopCQpoqKpouLp4iIqIiIrYCAt3V1vW1tv2xsmZmZmpeXnpKS/x4e/x8f/yAg/yIi/yQk/yUl/yYm/ygo/ykp/yws/zAw/zIy/zMz/zQ0/zU1/zY2/zw8/0BA/0ZG/0pK/1FR/1JS/1NT/1RU/1VV/1ZW/1dX/1pa/15e/19f/2Zm/2lp/21t/25u/3R0/3p6/4CA/4GB/4SE/4iI/46O/4+P/52d/6am/6ur/66u/7Oz/7S0/7e3/87O/9fX/9zc/93d/+Dg/+vr/+3t/+/v//Dw//Ly//X1//f3//n5//z8////gzaKowAAAA90Uk5T/Pz8/Pz8/Pz8/Pz8/f39ppQKWQAAAAFiS0dEEnu8bAAAAACuSURBVAhbPY9ZF4FQFEZPSKbIMmWep4gMGTKLkIv6/3/GPbfF97b3w17rA0kQOPgvAeHW6uJ6+5h7HqLdwowgOzejXRXBdx6UdSru216xuOMBHHNU0clTzeSUA6EhF8V8kqroluMiU6HKcuf4phGPr1o2q9kYZWwNq1qfRRmTaXpqsyjj17KkWCxKBUBgXWueHIyiAIg18gsse4KHkLF5IKIY10WQgv7fOy4ST34BRiopZ8WLNrgAAAAASUVORK5CYII=);
|
||||
@ -68,7 +172,7 @@ del {text-decoration: line-through; color: #777777;}
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
|
||||
font-family: Monaco, "Courier New", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace;
|
||||
-webkit-border-radius: 1px;
|
||||
-moz-border-radius: 1px;
|
||||
border-radius: 1px;
|
||||
|
@ -2,7 +2,7 @@
|
||||
" Vimwiki autoload plugin file
|
||||
|
||||
|
||||
let s:TAGS_METADATA_FILE_NAME = '.tags'
|
||||
let s:TAGS_METADATA_FILE_NAME = '.vimwiki_tags'
|
||||
|
||||
|
||||
|
||||
@ -27,8 +27,8 @@ let s:TAGS_METADATA_FILE_NAME = '.tags'
|
||||
" a:full_rebuild == 1: re-scan entire wiki
|
||||
" a:full_rebuild == 0: only re-scan current page
|
||||
" a:all_files == '': only if the file is newer than .tags
|
||||
function! vimwiki#tags#update_tags(full_rebuild, all_files)
|
||||
let all_files = a:all_files != ''
|
||||
function! vimwiki#tags#update_tags(full_rebuild, all_files) abort
|
||||
let all_files = a:all_files !=? ''
|
||||
if !a:full_rebuild
|
||||
" Updating for one page (current)
|
||||
let page_name = vimwiki#vars#get_bufferlocal('subdir') . expand('%:t:r')
|
||||
@ -61,8 +61,15 @@ function! vimwiki#tags#update_tags(full_rebuild, all_files)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:safesubstitute(text, search, replace, mode) abort
|
||||
" Substitute regexp but do not interpret replace
|
||||
let escaped = escape(a:replace, '\&')
|
||||
return substitute(a:text, a:search, escaped, a:mode)
|
||||
endfunction
|
||||
|
||||
|
||||
" Scans the list of text lines (argument) and produces tags metadata as a list of tag entries.
|
||||
function! s:scan_tags(lines, page_name)
|
||||
function! s:scan_tags(lines, page_name) abort
|
||||
|
||||
let entries = []
|
||||
|
||||
@ -81,6 +88,11 @@ function! s:scan_tags(lines, page_name)
|
||||
for line_nr in range(1, len(a:lines))
|
||||
let line = a:lines[line_nr - 1]
|
||||
|
||||
" ignore verbatim blocks
|
||||
if vimwiki#u#is_codeblock(line_nr)
|
||||
continue
|
||||
endif
|
||||
|
||||
" process headers
|
||||
let h_match = matchlist(line, rxheader)
|
||||
if !empty(h_match) " got a header
|
||||
@ -96,7 +108,7 @@ function! s:scan_tags(lines, page_name)
|
||||
else
|
||||
let current_complete_anchor = ''
|
||||
for l in range(level-1)
|
||||
if anchor_level[l] != ''
|
||||
if anchor_level[l] !=? ''
|
||||
let current_complete_anchor .= anchor_level[l].'#'
|
||||
endif
|
||||
endfor
|
||||
@ -105,13 +117,11 @@ function! s:scan_tags(lines, page_name)
|
||||
continue " tags are not allowed in headers
|
||||
endif
|
||||
|
||||
" TODO ignore verbatim blocks
|
||||
|
||||
" Scan line for tags. There can be many of them.
|
||||
let str = line
|
||||
while 1
|
||||
let tag_group = matchstr(str, rxtag)
|
||||
if tag_group == ''
|
||||
if tag_group ==? ''
|
||||
break
|
||||
endif
|
||||
let tagend = matchend(str, rxtag)
|
||||
@ -155,11 +165,11 @@ function! s:load_tags_metadata() abort
|
||||
endif
|
||||
let metadata = {}
|
||||
for line in readfile(metadata_path)
|
||||
if line =~ '^!_TAG_FILE_'
|
||||
if line =~# '^!_TAG_.*$'
|
||||
continue
|
||||
endif
|
||||
let parts = matchlist(line, '^\(.\{-}\);"\(.*\)$')
|
||||
if parts[0] == '' || parts[1] == '' || parts[2] == ''
|
||||
if parts[0] ==? '' || parts[1] ==? '' || parts[2] ==? ''
|
||||
throw 'VimwikiTags1: Metadata file corrupted'
|
||||
endif
|
||||
let std_fields = split(parts[1], '\t')
|
||||
@ -167,11 +177,11 @@ function! s:load_tags_metadata() abort
|
||||
throw 'VimwikiTags2: Metadata file corrupted'
|
||||
endif
|
||||
let vw_part = parts[2]
|
||||
if vw_part[0] != "\t"
|
||||
if vw_part[0] !=? "\t"
|
||||
throw 'VimwikiTags3: Metadata file corrupted'
|
||||
endif
|
||||
let vw_fields = split(vw_part[1:], "\t")
|
||||
if len(vw_fields) != 1 || vw_fields[0] !~ '^vimwiki:'
|
||||
if len(vw_fields) != 1 || vw_fields[0] !~# '^vimwiki:'
|
||||
throw 'VimwikiTags4: Metadata file corrupted'
|
||||
endif
|
||||
let vw_data = substitute(vw_fields[0], '^vimwiki:', '', '')
|
||||
@ -200,7 +210,7 @@ endfunction
|
||||
|
||||
" Removes all entries for given page from metadata in-place. Returns updated
|
||||
" metadata (just in case).
|
||||
function! s:remove_page_from_tags(metadata, page_name)
|
||||
function! s:remove_page_from_tags(metadata, page_name) abort
|
||||
if has_key(a:metadata, a:page_name)
|
||||
call remove(a:metadata, a:page_name)
|
||||
return a:metadata
|
||||
@ -211,7 +221,7 @@ endfunction
|
||||
|
||||
|
||||
" Merges metadata of one file into a:metadata
|
||||
function! s:merge_tags(metadata, pagename, file_metadata)
|
||||
function! s:merge_tags(metadata, pagename, file_metadata) abort
|
||||
let metadata = a:metadata
|
||||
let metadata[a:pagename] = a:file_metadata
|
||||
return metadata
|
||||
@ -227,7 +237,7 @@ endfunction
|
||||
" numbers as strings, not integers, and so, for example, tag at line 14
|
||||
" preceeds the same tag on the same page at line 9. (Because string "14" is
|
||||
" alphabetically 'less than' string "9".)
|
||||
function! s:tags_entry_cmp(i1, i2)
|
||||
function! s:tags_entry_cmp(i1, i2) abort
|
||||
let items = []
|
||||
for orig_item in [a:i1, a:i2]
|
||||
let fields = split(orig_item, "\t")
|
||||
@ -251,7 +261,7 @@ endfunction
|
||||
|
||||
|
||||
" Saves metadata object into a file. Throws exceptions in case of problems.
|
||||
function! s:write_tags_metadata(metadata)
|
||||
function! s:write_tags_metadata(metadata) abort
|
||||
let metadata_path = vimwiki#tags#metadata_file_path()
|
||||
let tags = []
|
||||
for pagename in keys(a:metadata)
|
||||
@ -266,18 +276,29 @@ function! s:write_tags_metadata(metadata)
|
||||
\ . pagename . vimwiki#vars#get_wikilocal('ext') . "\t"
|
||||
\ . entry.lineno
|
||||
\ . ';"'
|
||||
\ . "\t" . "vimwiki:" . entry_data
|
||||
\ . "\t" . 'vimwiki:' . entry_data
|
||||
\)
|
||||
endfor
|
||||
endfor
|
||||
call sort(tags, "s:tags_entry_cmp")
|
||||
call insert(tags, "!_TAG_FILE_SORTED\t1\t")
|
||||
call sort(tags, 's:tags_entry_cmp')
|
||||
let tag_comments = [
|
||||
\ "!_TAG_PROGRAM_VERSION\t2.5",
|
||||
\ "!_TAG_PROGRAM_URL\thttps://github.com/vimwiki/vimwiki",
|
||||
\ "!_TAG_PROGRAM_NAME\tVimwiki Tags",
|
||||
\ "!_TAG_PROGRAM_AUTHOR\tVimwiki",
|
||||
\ "!_TAG_OUTPUT_MODE\tvimwiki-tags",
|
||||
\ "!_TAG_FILE_SORTED\t1",
|
||||
\ "!_TAG_FILE_FORMAT\t2",
|
||||
\ ]
|
||||
for c in tag_comments
|
||||
call insert(tags, c)
|
||||
endfor
|
||||
call writefile(tags, metadata_path)
|
||||
endfunction
|
||||
|
||||
|
||||
" Returns list of unique tags found in the .tags file
|
||||
function! vimwiki#tags#get_tags()
|
||||
function! vimwiki#tags#get_tags() abort
|
||||
let metadata = s:load_tags_metadata()
|
||||
let tags = {}
|
||||
for entries in values(metadata)
|
||||
@ -292,10 +313,15 @@ endfunction
|
||||
" Similar to vimwiki#base#generate_links. In the current buffer, appends
|
||||
" tags and references to all their instances. If no arguments (tags) are
|
||||
" specified, outputs all tags.
|
||||
function! vimwiki#tags#generate_tags(...) abort
|
||||
let need_all_tags = (a:0 == 0)
|
||||
function! vimwiki#tags#generate_tags(create, ...) abort
|
||||
let specific_tags = a:000
|
||||
let header_level = vimwiki#vars#get_global('tags_header_level')
|
||||
|
||||
" use a dictionary function for closure like capability
|
||||
" copy all local variables into dict (add a: if arguments are needed)
|
||||
let GeneratorTags = copy(l:)
|
||||
function! GeneratorTags.f() abort
|
||||
let need_all_tags = empty(self.specific_tags)
|
||||
let metadata = s:load_tags_metadata()
|
||||
|
||||
" make a dictionary { tag_name: [tag_links, ...] }
|
||||
@ -308,28 +334,65 @@ function! vimwiki#tags#generate_tags(...) abort
|
||||
let tags_entries[entry.tagname] = [entry.link]
|
||||
endif
|
||||
endfor
|
||||
unlet entry " needed for older vims with sticky type checking since name is reused
|
||||
endfor
|
||||
|
||||
let lines = []
|
||||
let bullet = repeat(' ', vimwiki#lst#get_list_margin()).vimwiki#lst#default_symbol().' '
|
||||
for tagname in sort(keys(tags_entries))
|
||||
if need_all_tags || index(specific_tags, tagname) != -1
|
||||
call extend(lines, [
|
||||
\ '',
|
||||
\ substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', tagname, ''),
|
||||
\ '' ])
|
||||
if need_all_tags || index(self.specific_tags, tagname) != -1
|
||||
if len(lines) > 0
|
||||
call add(lines, '')
|
||||
endif
|
||||
|
||||
let tag_tpl = printf('rxH%d_Template', self.header_level + 1)
|
||||
call add(lines, s:safesubstitute(vimwiki#vars#get_syntaxlocal(tag_tpl), '__Header__', tagname, ''))
|
||||
|
||||
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
|
||||
for _ in range(vimwiki#vars#get_global('markdown_header_style'))
|
||||
call add(lines, '')
|
||||
endfor
|
||||
endif
|
||||
|
||||
for taglink in sort(tags_entries[tagname])
|
||||
call add(lines, bullet . substitute(vimwiki#vars#get_global('WikiLinkTemplate1'),
|
||||
\ '__LinkUrl__', taglink, ''))
|
||||
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
|
||||
let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink3Template')
|
||||
let link_infos = vimwiki#base#resolve_link(taglink)
|
||||
if empty(link_infos.anchor)
|
||||
let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink1Template')
|
||||
let entry = s:safesubstitute(link_tpl, '__LinkUrl__', taglink, '')
|
||||
let entry = s:safesubstitute(entry, '__LinkDescription__', taglink, '')
|
||||
else
|
||||
let link_caption = split(link_infos.anchor, '#', 0)[-1]
|
||||
let link_text = split(taglink, '#', 1)[0]
|
||||
let entry = s:safesubstitute(link_tpl, '__LinkUrl__', link_text, '')
|
||||
let entry = s:safesubstitute(entry, '__LinkAnchor__', link_infos.anchor, '')
|
||||
let entry = s:safesubstitute(entry, '__LinkDescription__', link_caption, '')
|
||||
endif
|
||||
|
||||
call add(lines, bullet . entry)
|
||||
else
|
||||
let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate1')
|
||||
call add(lines, bullet . substitute(link_tpl, '__LinkUrl__', taglink, ''))
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
endfor
|
||||
|
||||
let links_rx = '\m\%(^\s*$\)\|\%('.vimwiki#vars#get_syntaxlocal('rxH2').'\)\|\%(^\s*'
|
||||
\ .vimwiki#u#escape(vimwiki#lst#default_symbol()).' '
|
||||
\ .vimwiki#vars#get_syntaxlocal('rxWikiLink').'$\)'
|
||||
return lines
|
||||
endfunction
|
||||
|
||||
call vimwiki#base#update_listing_in_buffer(lines, 'Generated Tags', links_rx, line('$')+1, 1)
|
||||
let tag_match = printf('rxH%d', header_level + 1)
|
||||
let links_rx = '^\%('.vimwiki#vars#get_syntaxlocal(tag_match).'\)\|'.
|
||||
\ '\%(^\s*$\)\|\%('.vimwiki#vars#get_syntaxlocal('rxListBullet').'\)'
|
||||
|
||||
call vimwiki#base#update_listing_in_buffer(
|
||||
\ GeneratorTags,
|
||||
\ vimwiki#vars#get_global('tags_header'),
|
||||
\ links_rx,
|
||||
\ line('$')+1,
|
||||
\ header_level,
|
||||
\ a:create)
|
||||
endfunction
|
||||
|
||||
|
||||
|
@ -9,23 +9,23 @@
|
||||
|
||||
|
||||
|
||||
if exists("g:loaded_vimwiki_tbl_auto") || &cp
|
||||
if exists('g:loaded_vimwiki_tbl_auto') || &compatible
|
||||
finish
|
||||
endif
|
||||
let g:loaded_vimwiki_tbl_auto = 1
|
||||
|
||||
|
||||
let s:textwidth = &tw
|
||||
let s:textwidth = &textwidth
|
||||
|
||||
|
||||
function! s:rxSep()
|
||||
function! s:rxSep() abort
|
||||
return vimwiki#vars#get_syntaxlocal('rxTableSep')
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:wide_len(str)
|
||||
function! s:wide_len(str) abort
|
||||
" vim73 has new function that gives correct string width.
|
||||
if exists("*strdisplaywidth")
|
||||
if exists('*strdisplaywidth')
|
||||
return strdisplaywidth(a:str)
|
||||
endif
|
||||
|
||||
@ -36,8 +36,8 @@ function! s:wide_len(str)
|
||||
let savemodified = &modified
|
||||
let save_cursor = getpos('.')
|
||||
exe "norm! o\<esc>"
|
||||
call setline(line("."), a:str)
|
||||
let ret = virtcol("$") - 1
|
||||
call setline(line('.'), a:str)
|
||||
let ret = virtcol('$') - 1
|
||||
d
|
||||
call setpos('.', save_cursor)
|
||||
let &modified = savemodified
|
||||
@ -46,46 +46,46 @@ function! s:wide_len(str)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:cell_splitter()
|
||||
function! s:cell_splitter() abort
|
||||
return '\s*'.s:rxSep().'\s*'
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:sep_splitter()
|
||||
function! s:sep_splitter() abort
|
||||
return '-'.s:rxSep().'-'
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:is_table(line)
|
||||
function! s:is_table(line) abort
|
||||
return s:is_separator(a:line) ||
|
||||
\ (a:line !~# s:rxSep().s:rxSep() && a:line =~# '^\s*'.s:rxSep().'.\+'.s:rxSep().'\s*$')
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:is_separator(line)
|
||||
return a:line =~# '^\s*'.s:rxSep().'\(--\+'.s:rxSep().'\)\+\s*$'
|
||||
function! s:is_separator(line) abort
|
||||
return a:line =~# '^\s*'.s:rxSep().'\(:\=--\+:\='.s:rxSep().'\)\+\s*$'
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:is_separator_tail(line)
|
||||
function! s:is_separator_tail(line) abort
|
||||
return a:line =~# '^\{-1}\%(\s*\|-*\)\%('.s:rxSep().'-\+\)\+'.s:rxSep().'\s*$'
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:is_last_column(lnum, cnum)
|
||||
function! s:is_last_column(lnum, cnum) abort
|
||||
let line = strpart(getline(a:lnum), a:cnum - 1)
|
||||
return line =~# s:rxSep().'\s*$' && line !~# s:rxSep().'.*'.s:rxSep().'\s*$'
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:is_first_column(lnum, cnum)
|
||||
function! s:is_first_column(lnum, cnum) abort
|
||||
let line = strpart(getline(a:lnum), 0, a:cnum - 1)
|
||||
return line =~# '^\s*$' ||
|
||||
\ (line =~# '^\s*'.s:rxSep() && line !~# '^\s*'.s:rxSep().'.*'.s:rxSep())
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:count_separators_up(lnum)
|
||||
function! s:count_separators_up(lnum) abort
|
||||
let lnum = a:lnum - 1
|
||||
while lnum > 1
|
||||
if !s:is_separator(getline(lnum))
|
||||
@ -98,7 +98,7 @@ function! s:count_separators_up(lnum)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:count_separators_down(lnum)
|
||||
function! s:count_separators_down(lnum) abort
|
||||
let lnum = a:lnum + 1
|
||||
while lnum < line('$')
|
||||
if !s:is_separator(getline(lnum))
|
||||
@ -111,9 +111,9 @@ function! s:count_separators_down(lnum)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:create_empty_row(cols)
|
||||
function! s:create_empty_row(cols) abort
|
||||
let row = s:rxSep()
|
||||
let cell = " ".s:rxSep()
|
||||
let cell = ' '.s:rxSep()
|
||||
|
||||
for c in range(a:cols)
|
||||
let row .= cell
|
||||
@ -123,9 +123,9 @@ function! s:create_empty_row(cols)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:create_row_sep(cols)
|
||||
function! s:create_row_sep(cols) abort
|
||||
let row = s:rxSep()
|
||||
let cell = "---".s:rxSep()
|
||||
let cell = '---'.s:rxSep()
|
||||
|
||||
for c in range(a:cols)
|
||||
let row .= cell
|
||||
@ -135,66 +135,72 @@ function! s:create_row_sep(cols)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#get_cells(line)
|
||||
function! vimwiki#tbl#get_cells(line, ...) abort
|
||||
let result = []
|
||||
let cell = ''
|
||||
let quote = ''
|
||||
let state = 'NONE'
|
||||
let cell_start = 0
|
||||
let quote_start = 0
|
||||
let len = strlen(a:line) - 1
|
||||
|
||||
" 'Simple' FSM
|
||||
for idx in range(strlen(a:line))
|
||||
while state !=# 'CELL'
|
||||
if quote_start != 0 && state !=# 'CELL'
|
||||
let state = 'CELL'
|
||||
endif
|
||||
for idx in range(quote_start, len)
|
||||
" The only way I know Vim can do Unicode...
|
||||
let ch = a:line[idx]
|
||||
if state ==# 'NONE'
|
||||
if ch == '|'
|
||||
if ch ==# '|'
|
||||
let cell_start = idx + 1
|
||||
let state = 'CELL'
|
||||
endif
|
||||
elseif state ==# 'CELL'
|
||||
if ch == '[' || ch == '{'
|
||||
if ch ==# '[' || ch ==# '{'
|
||||
let state = 'BEFORE_QUOTE_START'
|
||||
let quote = ch
|
||||
elseif ch == '|'
|
||||
call add(result, vimwiki#u#trim(cell))
|
||||
let cell = ""
|
||||
let quote_start = idx
|
||||
elseif ch ==# '|'
|
||||
let cell = strpart(a:line, cell_start, idx - cell_start)
|
||||
if a:0 && a:1
|
||||
let cell = substitute(cell, '^ \(.*\) $', '\1', '')
|
||||
else
|
||||
let cell .= ch
|
||||
let cell = vimwiki#u#trim(cell)
|
||||
endif
|
||||
call add(result, cell)
|
||||
let cell_start = idx + 1
|
||||
endif
|
||||
elseif state ==# 'BEFORE_QUOTE_START'
|
||||
if ch == '[' || ch == '{'
|
||||
if ch ==# '[' || ch ==# '{'
|
||||
let state = 'QUOTE'
|
||||
let quote .= ch
|
||||
let quote_start = idx
|
||||
else
|
||||
let state = 'CELL'
|
||||
let cell .= quote.ch
|
||||
let quote = ''
|
||||
endif
|
||||
elseif state ==# 'QUOTE'
|
||||
if ch == ']' || ch == '}'
|
||||
if ch ==# ']' || ch ==# '}'
|
||||
let state = 'BEFORE_QUOTE_END'
|
||||
endif
|
||||
let quote .= ch
|
||||
elseif state ==# 'BEFORE_QUOTE_END'
|
||||
if ch == ']' || ch == '}'
|
||||
if ch ==# ']' || ch ==# '}'
|
||||
let state = 'CELL'
|
||||
endif
|
||||
let cell .= quote.ch
|
||||
let quote = ''
|
||||
endif
|
||||
endfor
|
||||
|
||||
if cell.quote != ''
|
||||
call add(result, vimwiki#u#trim(cell.quote, '|'))
|
||||
if state ==# 'NONE'
|
||||
break
|
||||
endif
|
||||
endwhile
|
||||
|
||||
return result
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:col_count(lnum)
|
||||
function! s:col_count(lnum) abort
|
||||
return len(vimwiki#tbl#get_cells(getline(a:lnum)))
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_indent(lnum)
|
||||
function! s:get_indent(lnum, depth) abort
|
||||
if !s:is_table(getline(a:lnum))
|
||||
return
|
||||
endif
|
||||
@ -209,50 +215,123 @@ function! s:get_indent(lnum)
|
||||
break
|
||||
endif
|
||||
let lnum -= 1
|
||||
if a:depth > 0 && lnum < a:lnum - a:depth
|
||||
break
|
||||
endif
|
||||
endwhile
|
||||
|
||||
return indent
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_rows(lnum)
|
||||
function! s:get_rows(lnum, ...) abort
|
||||
if !s:is_table(getline(a:lnum))
|
||||
return
|
||||
endif
|
||||
|
||||
let upper_rows = []
|
||||
let lower_rows = []
|
||||
let rows = []
|
||||
|
||||
let lnum = a:lnum - 1
|
||||
while lnum >= 1
|
||||
let depth = a:0 > 0 ? a:1 : 0
|
||||
let ldepth = 0
|
||||
while lnum >= 1 && (depth == 0 || ldepth < depth)
|
||||
let line = getline(lnum)
|
||||
if s:is_table(line)
|
||||
call add(upper_rows, [lnum, line])
|
||||
call insert(rows, [lnum, line])
|
||||
else
|
||||
break
|
||||
endif
|
||||
let lnum -= 1
|
||||
let ldepth += 1
|
||||
endwhile
|
||||
call reverse(upper_rows)
|
||||
|
||||
let lnum = a:lnum
|
||||
while lnum <= line('$')
|
||||
let line = getline(lnum)
|
||||
if s:is_table(line)
|
||||
call add(lower_rows, [lnum, line])
|
||||
call add(rows, [lnum, line])
|
||||
else
|
||||
break
|
||||
endif
|
||||
if depth > 0
|
||||
break
|
||||
endif
|
||||
let lnum += 1
|
||||
endwhile
|
||||
|
||||
return upper_rows + lower_rows
|
||||
return rows
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_cell_max_lens(lnum, ...)
|
||||
function! s:get_cell_aligns(lnum, ...) abort
|
||||
let aligns = {}
|
||||
let depth = a:0 > 0 ? a:1 : 0
|
||||
for [lnum, row] in s:get_rows(a:lnum, depth)
|
||||
if s:is_separator(row)
|
||||
let cells = vimwiki#tbl#get_cells(row)
|
||||
for idx in range(len(cells))
|
||||
let cell = cells[idx]
|
||||
if cell =~# '^--\+:'
|
||||
let aligns[idx] = 'right'
|
||||
elseif cell =~# '^:--\+:'
|
||||
let aligns[idx] = 'center'
|
||||
else
|
||||
let aligns[idx] = 'left'
|
||||
endif
|
||||
endfor
|
||||
else
|
||||
let cells = vimwiki#tbl#get_cells(row)
|
||||
for idx in range(len(cells))
|
||||
if !has_key(aligns, idx)
|
||||
let aligns[idx] = 'left'
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
endfor
|
||||
return aligns
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_cell_aligns_fast(rows) abort
|
||||
let aligns = {}
|
||||
let clen = 0
|
||||
for [lnum, row] in a:rows
|
||||
if s:is_separator(row)
|
||||
return s:get_cell_aligns(lnum, 1)
|
||||
endif
|
||||
let cells = vimwiki#tbl#get_cells(row, 1)
|
||||
let clen = len(cells)
|
||||
for idx in range(clen)
|
||||
let cell = cells[idx]
|
||||
if !has_key(aligns, idx)
|
||||
let cs = matchlist(cell, '^\(\s*\)[^[:space:]].\{-}\(\s*\)$')
|
||||
if !empty(cs)
|
||||
let lstart = len(cs[1])
|
||||
let lend = len(cs[2])
|
||||
if lstart > 0 && lend > 0
|
||||
let aligns[idx] = 'center'
|
||||
elseif lend > 0
|
||||
let aligns[idx] = 'left'
|
||||
elseif lstart > 0
|
||||
let aligns[idx] = 'right'
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
for idx in range(clen)
|
||||
if !has_key(aligns, idx)
|
||||
return {}
|
||||
endif
|
||||
endfor
|
||||
return aligns
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_cell_max_lens(lnum, ...) abort
|
||||
let max_lens = {}
|
||||
for [lnum, row] in s:get_rows(a:lnum)
|
||||
let rows = a:0 > 2 ? a:3 : s:get_rows(a:lnum)
|
||||
for [lnum, row] in rows
|
||||
if s:is_separator(row)
|
||||
continue
|
||||
endif
|
||||
@ -270,20 +349,67 @@ function! s:get_cell_max_lens(lnum, ...)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_aligned_rows(lnum, col1, col2)
|
||||
function! s:get_aligned_rows(lnum, col1, col2, depth) abort
|
||||
let rows = []
|
||||
let aligns = {}
|
||||
let startlnum = 0
|
||||
let cells = []
|
||||
let max_lens = {}
|
||||
let check_all = 1
|
||||
if a:depth > 0
|
||||
let rows = s:get_rows(a:lnum, a:depth)
|
||||
let startlnum = rows[0][0]
|
||||
let lrows = len(rows)
|
||||
if lrows == a:depth + 1
|
||||
let line = rows[-1][1]
|
||||
if !s:is_separator(line)
|
||||
let lcells = vimwiki#tbl#get_cells(line)
|
||||
let lclen = len(lcells)
|
||||
let lmax_lens = repeat([0], lclen)
|
||||
let laligns = repeat(['left'], lclen)
|
||||
let rows[-1][1] = s:fmt_row(lcells, lmax_lens, laligns, 0, 0)
|
||||
endif
|
||||
let i = 1
|
||||
for [lnum, row] in rows
|
||||
call add(cells, vimwiki#tbl#get_cells(row, i != lrows - 1))
|
||||
let i += 1
|
||||
endfor
|
||||
let max_lens = s:get_cell_max_lens(a:lnum, cells, startlnum, rows)
|
||||
" user option not to expand last call
|
||||
if vimwiki#vars#get_global('table_reduce_last_col')
|
||||
let last_index = keys(max_lens)[-1]
|
||||
let max_lens[last_index] = 1
|
||||
endif
|
||||
let fst_lens = s:get_cell_max_lens(a:lnum, cells, startlnum, rows[0:0])
|
||||
let check_all = max_lens != fst_lens
|
||||
let aligns = s:get_cell_aligns_fast(rows[0:-2])
|
||||
let rows[-1][1] = line
|
||||
endif
|
||||
endif
|
||||
if check_all
|
||||
" all the table must be re-formatted
|
||||
let rows = s:get_rows(a:lnum)
|
||||
let startlnum = rows[0][0]
|
||||
let cells = []
|
||||
for [lnum, row] in rows
|
||||
call add(cells, vimwiki#tbl#get_cells(row))
|
||||
endfor
|
||||
let max_lens = s:get_cell_max_lens(a:lnum, cells, startlnum)
|
||||
let max_lens = s:get_cell_max_lens(a:lnum, cells, startlnum, rows)
|
||||
" user option not to expand last call
|
||||
if vimwiki#vars#get_global('table_reduce_last_col')
|
||||
let last_index = keys(max_lens)[-1]
|
||||
let max_lens[last_index] = 1
|
||||
endif
|
||||
endif
|
||||
if empty(aligns)
|
||||
let aligns = s:get_cell_aligns(a:lnum)
|
||||
endif
|
||||
let result = []
|
||||
for [lnum, row] in rows
|
||||
if s:is_separator(row)
|
||||
let new_row = s:fmt_sep(max_lens, a:col1, a:col2)
|
||||
let new_row = s:fmt_sep(max_lens, aligns, a:col1, a:col2)
|
||||
else
|
||||
let new_row = s:fmt_row(cells[lnum - startlnum], max_lens, a:col1, a:col2)
|
||||
let new_row = s:fmt_row(cells[lnum - startlnum], max_lens, aligns, a:col1, a:col2)
|
||||
endif
|
||||
call add(result, [lnum, new_row])
|
||||
endfor
|
||||
@ -292,7 +418,7 @@ endfunction
|
||||
|
||||
|
||||
" Number of the current column. Starts from 0.
|
||||
function! s:cur_column()
|
||||
function! s:cur_column() abort
|
||||
let line = getline('.')
|
||||
if !s:is_table(line)
|
||||
return -1
|
||||
@ -312,20 +438,25 @@ function! s:cur_column()
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:fmt_cell(cell, max_len)
|
||||
function! s:fmt_cell(cell, max_len, align) abort
|
||||
let cell = ' '.a:cell.' '
|
||||
|
||||
let diff = a:max_len - s:wide_len(a:cell)
|
||||
if diff == 0 && empty(a:cell)
|
||||
let diff = 1
|
||||
endif
|
||||
|
||||
if a:align ==# 'left'
|
||||
let cell .= repeat(' ', diff)
|
||||
elseif a:align ==# 'right'
|
||||
let cell = repeat(' ',diff).cell
|
||||
else
|
||||
let cell = repeat(' ',diff/2).cell.repeat(' ',diff-diff/2)
|
||||
endif
|
||||
return cell
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:fmt_row(cells, max_lens, col1, col2)
|
||||
function! s:fmt_row(cells, max_lens, aligns, col1, col2) abort
|
||||
let new_line = s:rxSep()
|
||||
for idx in range(len(a:cells))
|
||||
if idx == a:col1
|
||||
@ -334,28 +465,36 @@ function! s:fmt_row(cells, max_lens, col1, col2)
|
||||
let idx = a:col1
|
||||
endif
|
||||
let value = a:cells[idx]
|
||||
let new_line .= s:fmt_cell(value, a:max_lens[idx]).s:rxSep()
|
||||
let new_line .= s:fmt_cell(value, a:max_lens[idx], a:aligns[idx]).s:rxSep()
|
||||
endfor
|
||||
|
||||
let idx = len(a:cells)
|
||||
while idx < len(a:max_lens)
|
||||
let new_line .= s:fmt_cell('', a:max_lens[idx]).s:rxSep()
|
||||
let new_line .= s:fmt_cell('', a:max_lens[idx], a:aligns[idx]).s:rxSep()
|
||||
let idx += 1
|
||||
endwhile
|
||||
return new_line
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:fmt_cell_sep(max_len)
|
||||
function! s:fmt_cell_sep(max_len, align) abort
|
||||
let cell = ''
|
||||
if a:max_len == 0
|
||||
return repeat('-', 3)
|
||||
let cell .= '-'
|
||||
else
|
||||
return repeat('-', a:max_len+2)
|
||||
let cell .= repeat('-', a:max_len)
|
||||
endif
|
||||
if a:align ==# 'right'
|
||||
return cell.'-:'
|
||||
elseif a:align ==# 'left'
|
||||
return cell.'--'
|
||||
else
|
||||
return ':'.cell.':'
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:fmt_sep(max_lens, col1, col2)
|
||||
function! s:fmt_sep(max_lens, aligns, col1, col2) abort
|
||||
let new_line = s:rxSep()
|
||||
for idx in range(len(a:max_lens))
|
||||
if idx == a:col1
|
||||
@ -363,52 +502,59 @@ function! s:fmt_sep(max_lens, col1, col2)
|
||||
elseif idx == a:col2
|
||||
let idx = a:col1
|
||||
endif
|
||||
let new_line .= s:fmt_cell_sep(a:max_lens[idx]).s:rxSep()
|
||||
let new_line .= s:fmt_cell_sep(a:max_lens[idx], a:aligns[idx]).s:rxSep()
|
||||
endfor
|
||||
return new_line
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:kbd_create_new_row(cols, goto_first)
|
||||
function! s:kbd_create_new_row(cols, goto_first) abort
|
||||
let cmd = "\<ESC>o".s:create_empty_row(a:cols)
|
||||
let cmd .= "\<ESC>:call vimwiki#tbl#format(line('.'))\<CR>"
|
||||
let cmd .= "\<ESC>:call vimwiki#tbl#format(line('.'), 2)\<CR>"
|
||||
let cmd .= "\<ESC>0"
|
||||
if a:goto_first
|
||||
let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'c', line('.'))\<CR>"
|
||||
else
|
||||
let cmd .= (col('.')-1)."l"
|
||||
let cmd .= (col('.')-1).'l'
|
||||
let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\<CR>"
|
||||
endif
|
||||
let cmd .= "a"
|
||||
let cmd .= 'a'
|
||||
|
||||
return cmd
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:kbd_goto_next_row()
|
||||
function! s:kbd_goto_next_row() abort
|
||||
let cmd = "\<ESC>j"
|
||||
let cmd .= ":call search('.\\(".s:rxSep()."\\)', 'c', line('.'))\<CR>"
|
||||
let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\<CR>"
|
||||
let cmd .= "a"
|
||||
let cmd .= 'a'
|
||||
return cmd
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:kbd_goto_prev_row()
|
||||
function! s:kbd_goto_prev_row() abort
|
||||
let cmd = "\<ESC>k"
|
||||
let cmd .= ":call search('.\\(".s:rxSep()."\\)', 'c', line('.'))\<CR>"
|
||||
let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\<CR>"
|
||||
let cmd .= "a"
|
||||
let cmd .= 'a'
|
||||
return cmd
|
||||
endfunction
|
||||
|
||||
|
||||
" Used in s:kbd_goto_next_col
|
||||
function! vimwiki#tbl#goto_next_col()
|
||||
function! vimwiki#tbl#goto_next_col() abort
|
||||
let curcol = virtcol('.')
|
||||
let lnum = line('.')
|
||||
let newcol = s:get_indent(lnum)
|
||||
let max_lens = s:get_cell_max_lens(lnum)
|
||||
let depth = 2
|
||||
let newcol = s:get_indent(lnum, depth)
|
||||
let rows = s:get_rows(lnum, depth)
|
||||
let startlnum = rows[0][0]
|
||||
let cells = []
|
||||
for [lnum, row] in rows
|
||||
call add(cells, vimwiki#tbl#get_cells(row, 1))
|
||||
endfor
|
||||
let max_lens = s:get_cell_max_lens(lnum, cells, startlnum, rows)
|
||||
for cell_len in values(max_lens)
|
||||
if newcol >= curcol-1
|
||||
break
|
||||
@ -420,11 +566,11 @@ function! vimwiki#tbl#goto_next_col()
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:kbd_goto_next_col(jumpdown)
|
||||
function! s:kbd_goto_next_col(jumpdown) abort
|
||||
let cmd = "\<ESC>"
|
||||
if a:jumpdown
|
||||
let seps = s:count_separators_down(line('.'))
|
||||
let cmd .= seps."j0"
|
||||
let cmd .= seps.'j0'
|
||||
endif
|
||||
let cmd .= ":call vimwiki#tbl#goto_next_col()\<CR>a"
|
||||
return cmd
|
||||
@ -432,11 +578,18 @@ endfunction
|
||||
|
||||
|
||||
" Used in s:kbd_goto_prev_col
|
||||
function! vimwiki#tbl#goto_prev_col()
|
||||
function! vimwiki#tbl#goto_prev_col() abort
|
||||
let curcol = virtcol('.')
|
||||
let lnum = line('.')
|
||||
let newcol = s:get_indent(lnum)
|
||||
let max_lens = s:get_cell_max_lens(lnum)
|
||||
let depth = 2
|
||||
let newcol = s:get_indent(lnum, depth)
|
||||
let rows = s:get_rows(lnum, depth)
|
||||
let startlnum = rows[0][0]
|
||||
let cells = []
|
||||
for [lnum, row] in rows
|
||||
call add(cells, vimwiki#tbl#get_cells(row, 1))
|
||||
endfor
|
||||
let max_lens = s:get_cell_max_lens(lnum, cells, startlnum, rows)
|
||||
let prev_cell_len = 0
|
||||
for cell_len in values(max_lens)
|
||||
let delta = cell_len + 3 " +3 == 2 spaces + 1 separator |<space>...<space>
|
||||
@ -454,12 +607,12 @@ function! vimwiki#tbl#goto_prev_col()
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:kbd_goto_prev_col(jumpup)
|
||||
function! s:kbd_goto_prev_col(jumpup) abort
|
||||
let cmd = "\<ESC>"
|
||||
if a:jumpup
|
||||
let seps = s:count_separators_up(line('.'))
|
||||
let cmd .= seps."k"
|
||||
let cmd .= "$"
|
||||
let cmd .= seps.'k'
|
||||
let cmd .= '$'
|
||||
endif
|
||||
let cmd .= ":call vimwiki#tbl#goto_prev_col()\<CR>a"
|
||||
" let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'b', line('.'))\<CR>"
|
||||
@ -469,10 +622,10 @@ function! s:kbd_goto_prev_col(jumpup)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#kbd_cr()
|
||||
function! vimwiki#tbl#kbd_cr() abort
|
||||
let lnum = line('.')
|
||||
if !s:is_table(getline(lnum))
|
||||
return ""
|
||||
return ''
|
||||
endif
|
||||
|
||||
if s:is_separator(getline(lnum+1)) || !s:is_table(getline(lnum+1))
|
||||
@ -484,7 +637,7 @@ function! vimwiki#tbl#kbd_cr()
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#kbd_tab()
|
||||
function! vimwiki#tbl#kbd_tab() abort
|
||||
let lnum = line('.')
|
||||
if !s:is_table(getline(lnum))
|
||||
return "\<Tab>"
|
||||
@ -501,7 +654,7 @@ function! vimwiki#tbl#kbd_tab()
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#kbd_shift_tab()
|
||||
function! vimwiki#tbl#kbd_shift_tab() abort
|
||||
let lnum = line('.')
|
||||
if !s:is_table(getline(lnum))
|
||||
return "\<S-Tab>"
|
||||
@ -511,14 +664,14 @@ function! vimwiki#tbl#kbd_shift_tab()
|
||||
let is_sep = s:is_separator_tail(getline(lnum))
|
||||
"echomsg "DEBUG kbd_tab> ".first
|
||||
if (is_sep || first) && !s:is_table(getline(lnum-1))
|
||||
return ""
|
||||
return ''
|
||||
endif
|
||||
return s:kbd_goto_prev_col(is_sep || first)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#format(lnum, ...)
|
||||
if !(&filetype ==? 'vimwiki')
|
||||
function! vimwiki#tbl#format(lnum, ...) abort
|
||||
if !vimwiki#u#ft_is_vw()
|
||||
return
|
||||
endif
|
||||
let line = getline(a:lnum)
|
||||
@ -526,6 +679,8 @@ function! vimwiki#tbl#format(lnum, ...)
|
||||
return
|
||||
endif
|
||||
|
||||
let depth = a:0 == 1 ? a:1 : 0
|
||||
|
||||
if a:0 == 2
|
||||
let col1 = a:1
|
||||
let col2 = a:2
|
||||
@ -534,23 +689,26 @@ function! vimwiki#tbl#format(lnum, ...)
|
||||
let col2 = 0
|
||||
endif
|
||||
|
||||
let indent = s:get_indent(a:lnum)
|
||||
let indent = s:get_indent(a:lnum, depth)
|
||||
if &expandtab
|
||||
let indentstring = repeat(' ', indent)
|
||||
else
|
||||
let indentstring = repeat(' ', indent / &tabstop) . repeat(' ', indent % &tabstop)
|
||||
execute "let indentstring = repeat('\<TAB>', indent / &tabstop) . repeat(' ', indent % &tabstop)"
|
||||
endif
|
||||
|
||||
for [lnum, row] in s:get_aligned_rows(a:lnum, col1, col2)
|
||||
" getting N = depth last rows is enough for having been formatted tables
|
||||
for [lnum, row] in s:get_aligned_rows(a:lnum, col1, col2, depth)
|
||||
let row = indentstring.row
|
||||
if getline(lnum) != row
|
||||
call setline(lnum, row)
|
||||
endif
|
||||
endfor
|
||||
|
||||
let &tw = s:textwidth
|
||||
let &textwidth = s:textwidth
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#create(...)
|
||||
function! vimwiki#tbl#create(...) abort
|
||||
if a:0 > 1
|
||||
let cols = a:1
|
||||
let rows = a:2
|
||||
@ -586,17 +744,17 @@ function! vimwiki#tbl#create(...)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#align_or_cmd(cmd)
|
||||
function! vimwiki#tbl#align_or_cmd(cmd, ...) abort
|
||||
if s:is_table(getline('.'))
|
||||
call vimwiki#tbl#format(line('.'))
|
||||
call call('vimwiki#tbl#format', [line('.')] + a:000)
|
||||
else
|
||||
exe 'normal! '.a:cmd
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#reset_tw(lnum)
|
||||
if !(&filetype ==? 'vimwiki')
|
||||
function! vimwiki#tbl#reset_tw(lnum) abort
|
||||
if !vimwiki#u#ft_is_vw()
|
||||
return
|
||||
endif
|
||||
let line = getline(a:lnum)
|
||||
@ -604,13 +762,13 @@ function! vimwiki#tbl#reset_tw(lnum)
|
||||
return
|
||||
endif
|
||||
|
||||
let s:textwidth = &tw
|
||||
let &tw = 0
|
||||
let s:textwidth = &textwidth
|
||||
let &textwidth = 0
|
||||
endfunction
|
||||
|
||||
|
||||
" TODO: move_column_left and move_column_right are good candidates to be refactored.
|
||||
function! vimwiki#tbl#move_column_left()
|
||||
function! vimwiki#tbl#move_column_left() abort
|
||||
|
||||
"echomsg "DEBUG move_column_left: "
|
||||
|
||||
@ -645,7 +803,7 @@ function! vimwiki#tbl#move_column_left()
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#move_column_right()
|
||||
function! vimwiki#tbl#move_column_right() abort
|
||||
|
||||
let line = getline('.')
|
||||
|
||||
@ -677,27 +835,27 @@ function! vimwiki#tbl#move_column_right()
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#get_rows(lnum)
|
||||
function! vimwiki#tbl#get_rows(lnum) abort
|
||||
return s:get_rows(a:lnum)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#is_table(line)
|
||||
function! vimwiki#tbl#is_table(line) abort
|
||||
return s:is_table(a:line)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#is_separator(line)
|
||||
function! vimwiki#tbl#is_separator(line) abort
|
||||
return s:is_separator(a:line)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#cell_splitter()
|
||||
function! vimwiki#tbl#cell_splitter() abort
|
||||
return s:cell_splitter()
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tbl#sep_splitter()
|
||||
function! vimwiki#tbl#sep_splitter() abort
|
||||
return s:sep_splitter()
|
||||
endfunction
|
||||
|
||||
|
@ -3,7 +3,16 @@
|
||||
" Description: Utility functions
|
||||
" Home: https://github.com/vimwiki/vimwiki/
|
||||
|
||||
function! vimwiki#u#trim(string, ...)
|
||||
|
||||
" Execute: string v:count times
|
||||
function! vimwiki#u#count_exe(cmd) abort
|
||||
for i in range( max([1, v:count]) )
|
||||
exe a:cmd
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#u#trim(string, ...) abort
|
||||
let chars = ''
|
||||
if a:0 > 0
|
||||
let chars = a:1
|
||||
@ -15,58 +24,134 @@ endfunction
|
||||
|
||||
|
||||
" Builtin cursor doesn't work right with unicode characters.
|
||||
function! vimwiki#u#cursor(lnum, cnum)
|
||||
function! vimwiki#u#cursor(lnum, cnum) abort
|
||||
exe a:lnum
|
||||
exe 'normal! 0'.a:cnum.'|'
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#u#is_windows()
|
||||
return has("win32") || has("win64") || has("win95") || has("win16")
|
||||
" Returns: OS name, human readable
|
||||
function! vimwiki#u#os_name() abort
|
||||
if vimwiki#u#is_windows()
|
||||
return 'Windows'
|
||||
elseif vimwiki#u#is_macos()
|
||||
return 'Mac'
|
||||
else
|
||||
return 'Linux'
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#u#is_macos()
|
||||
if has("mac") || has("macunix") || has("gui_mac")
|
||||
function! vimwiki#u#is_windows() abort
|
||||
return has('win32') || has('win64') || has('win95') || has('win16')
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#u#is_macos() abort
|
||||
if has('mac') || has('macunix') || has('gui_mac')
|
||||
return 1
|
||||
endif
|
||||
" that still doesn't mean we are not on Mac OS
|
||||
let os = substitute(system('uname'), '\n', '', '')
|
||||
return os == 'Darwin' || os == 'Mac'
|
||||
return os ==? 'Darwin' || os ==? 'Mac'
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#u#count_first_sym(line)
|
||||
function! vimwiki#u#count_first_sym(line) abort
|
||||
let first_sym = matchstr(a:line, '\S')
|
||||
return len(matchstr(a:line, first_sym.'\+'))
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#u#escape(string)
|
||||
function! vimwiki#u#escape(string) abort
|
||||
return escape(a:string, '~.*[]\^$')
|
||||
endfunction
|
||||
|
||||
|
||||
" Load concrete Wiki syntax: sets regexes and templates for headers and links
|
||||
function vimwiki#u#reload_regexes()
|
||||
function! vimwiki#u#reload_regexes() abort
|
||||
execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'.vim'
|
||||
endfunction
|
||||
|
||||
|
||||
" Load syntax-specific functionality
|
||||
function vimwiki#u#reload_regexes_custom()
|
||||
function! vimwiki#u#reload_regexes_custom() abort
|
||||
execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'_custom.vim'
|
||||
endfunction
|
||||
|
||||
|
||||
" Backward compatible version of the built-in function shiftwidth()
|
||||
if exists('*shiftwidth')
|
||||
func vimwiki#u#sw()
|
||||
function! vimwiki#u#sw() abort
|
||||
return shiftwidth()
|
||||
endfunc
|
||||
else
|
||||
func vimwiki#u#sw()
|
||||
return &sw
|
||||
function! vimwiki#u#sw() abort
|
||||
return &shiftwidth
|
||||
endfunc
|
||||
endif
|
||||
|
||||
" a:mode single character indicating the mode as defined by :h maparg
|
||||
" a:key the key sequence to map
|
||||
" a:plug the plug command the key sequence should be mapped to
|
||||
" a:1 optional argument with the following functionality:
|
||||
" if a:1==1 then the hasmapto(<Plug>) check is skipped.
|
||||
" this can be used to map different keys to the same <Plug> definition
|
||||
" if a:1==2 then the mapping is not <buffer> specific i.e. it is global
|
||||
function! vimwiki#u#map_key(mode, key, plug, ...) abort
|
||||
if a:0 && a:1 == 2
|
||||
" global mappings
|
||||
if !hasmapto(a:plug) && maparg(a:key, a:mode) ==# ''
|
||||
exe a:mode . 'map ' . a:key . ' ' . a:plug
|
||||
endif
|
||||
elseif a:0 && a:1 == 1
|
||||
" vimwiki buffer mappings, repeat mapping to the same <Plug> definition
|
||||
exe a:mode . 'map <buffer> ' . a:key . ' ' . a:plug
|
||||
else
|
||||
" vimwiki buffer mappings
|
||||
if !hasmapto(a:plug)
|
||||
exe a:mode . 'map <buffer> ' . a:key . ' ' . a:plug
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
" returns 1 if line is a code block or math block
|
||||
"
|
||||
" The last two conditions are needed for this to correctly
|
||||
" detect nested syntaxes within code blocks
|
||||
function! vimwiki#u#is_codeblock(lnum) abort
|
||||
let syn_g = synIDattr(synID(a:lnum,1,1),'name')
|
||||
if syn_g =~# 'Vimwiki\(Pre.*\|IndentedCodeBlock\|Math.*\)'
|
||||
\ || (syn_g !~# 'Vimwiki.*' && syn_g !=? '')
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Sets the filetype to vimwiki
|
||||
" If g:vimwiki_filetypes variable is set
|
||||
" the filetype will be vimwiki.<ft1>.<ft2> etc.
|
||||
function! vimwiki#u#ft_set() abort
|
||||
let ftypelist = vimwiki#vars#get_global('filetypes')
|
||||
let ftype = 'vimwiki'
|
||||
for ftypeadd in ftypelist
|
||||
let ftype = ftype . '.' . ftypeadd
|
||||
endfor
|
||||
let &filetype = ftype
|
||||
endfunction
|
||||
|
||||
" Returns: 1 if filetype is vimwiki, 0 else
|
||||
" If multiple fileytpes are in use 1 is returned only if the
|
||||
" first ft is vimwiki which should always be the case unless
|
||||
" the user manually changes it to something else
|
||||
function! vimwiki#u#ft_is_vw() abort
|
||||
" Clause: is filetype defined
|
||||
if &filetype ==# '' | return 0 | endif
|
||||
if split(&filetype, '\.')[0] ==? 'vimwiki'
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
endif
|
||||
endfunction
|
||||
|
@ -26,7 +26,7 @@
|
||||
" ------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
function! s:populate_global_variables()
|
||||
function! s:populate_global_variables() abort
|
||||
|
||||
let g:vimwiki_global_vars = {}
|
||||
|
||||
@ -86,6 +86,7 @@ function! s:populate_global_variables()
|
||||
" buffer (and not on a link) to create a link
|
||||
" basically, it's Ascii alphanumeric characters plus #|./@-_~ plus all
|
||||
" non-Ascii characters, except that . is not accepted as the last character
|
||||
" TODO look behind for . reduces the second part of the regex that is the same with '.' added
|
||||
let g:vimwiki_global_vars.rxWord = '[^[:blank:]!"$%&''()*+,:;<=>?\[\]\\^`{}]*[^[:blank:]!"$%&''()*+.,:;<=>?\[\]\\^`{}]'
|
||||
|
||||
let g:vimwiki_global_vars.rx_wikilink_prefix1 = g:vimwiki_global_vars.rx_wikilink_prefix .
|
||||
@ -139,12 +140,16 @@ function! s:populate_global_variables()
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:read_global_settings_from_user()
|
||||
function! s:read_global_settings_from_user() abort
|
||||
let global_settings = {
|
||||
\ 'CJK_length': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'auto_chdir': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'auto_header': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'autowriteall': {'type': type(0), 'default': 1, 'min': 0, 'max': 1},
|
||||
\ 'conceallevel': {'type': type(0), 'default': 2, 'min': 0, 'max': 3},
|
||||
\ 'conceal_onechar_markers': {'type': type(0), 'default': 1, 'min': 0, 'max': 1},
|
||||
\ 'conceal_pre': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'create_link': {'type': type(0), 'default': 1, 'min':0, 'max': 1},
|
||||
\ 'diary_months': {'type': type({}), 'default':
|
||||
\ {
|
||||
\ 1: 'January', 2: 'February', 3: 'March',
|
||||
@ -153,24 +158,41 @@ function! s:read_global_settings_from_user()
|
||||
\ 10: 'October', 11: 'November', 12: 'December'
|
||||
\ }},
|
||||
\ 'dir_link': {'type': type(''), 'default': ''},
|
||||
\ 'ext2syntax': {'type': type({}), 'default': {}},
|
||||
\ 'ext2syntax': {'type': type({}), 'default': {'.md': 'markdown', '.mkdn': 'markdown',
|
||||
\ '.mdwn': 'markdown', '.mdown': 'markdown', '.markdown': 'markdown', '.mw': 'media'}},
|
||||
\ 'folding': {'type': type(''), 'default': '', 'possible_values': ['', 'expr', 'syntax',
|
||||
\ 'list', 'custom', ':quick', 'expr:quick', 'syntax:quick', 'list:quick',
|
||||
\ 'custom:quick']},
|
||||
\ 'filetypes': {'type': type([]), 'default': []},
|
||||
\ 'global_ext': {'type': type(0), 'default': 1, 'min': 0, 'max': 1},
|
||||
\ 'hl_cb_checked': {'type': type(0), 'default': 0, 'min': 0, 'max': 2},
|
||||
\ 'hl_headers': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'html_header_numbering': {'type': type(0), 'default': 0, 'min': 0, 'max': 6},
|
||||
\ 'html_header_numbering_sym': {'type': type(''), 'default': ''},
|
||||
\ 'key_mappings': {'type': type({}), 'default':
|
||||
\ {
|
||||
\ 'all_maps': 1, 'global': 1, 'headers': 1, 'text_objs': 1,
|
||||
\ 'table_format': 1, 'table_mappings': 1, 'lists': 1, 'links': 1,
|
||||
\ 'html': 1, 'mouse': 0,
|
||||
\ }},
|
||||
\ 'list_ignore_newline': {'type': type(0), 'default': 1, 'min': 0, 'max': 1},
|
||||
\ 'text_ignore_newline': {'type': type(0), 'default': 1, 'min': 0, 'max': 1},
|
||||
\ 'links_header': {'type': type(''), 'default': 'Generated Links', 'min_length': 1},
|
||||
\ 'links_header_level': {'type': type(0), 'default': 1, 'min': 1, 'max': 6},
|
||||
\ 'listsyms': {'type': type(''), 'default': ' .oOX', 'min_length': 2},
|
||||
\ 'listsym_rejected': {'type': type(''), 'default': '-', 'length': 1},
|
||||
\ 'map_prefix': {'type': type(''), 'default': '<Leader>w'},
|
||||
\ 'markdown_header_style': {'type': type(0), 'default': 1, 'min':0, 'max': 2},
|
||||
\ 'markdown_link_ext': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'menu': {'type': type(''), 'default': 'Vimwiki'},
|
||||
\ 'table_auto_fmt': {'type': type(0), 'default': 1, 'min': 0, 'max': 1},
|
||||
\ 'table_reduce_last_col': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'table_mappings': {'type': type(0), 'default': 1, 'min': 0, 'max': 1},
|
||||
\ 'tags_header': {'type': type(''), 'default': 'Generated Tags', 'min_length': 1},
|
||||
\ 'tags_header_level': {'type': type(0), 'default': 1, 'min': 1, 'max': 5},
|
||||
\ 'toc_header': {'type': type(''), 'default': 'Contents', 'min_length': 1},
|
||||
\ 'toc_header_level': {'type': type(0), 'default': 1, 'min': 1, 'max': 6},
|
||||
\ 'toc_link_format': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'url_maxsave': {'type': type(0), 'default': 15, 'min': 0},
|
||||
\ 'use_calendar': {'type': type(0), 'default': 1, 'min': 0, 'max': 1},
|
||||
\ 'use_mouse': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
@ -190,6 +212,8 @@ function! s:read_global_settings_from_user()
|
||||
call s:check_users_value(key, users_value, value_infos, 1)
|
||||
|
||||
let g:vimwiki_global_vars[key] = users_value
|
||||
" Remove users_value to prevent type mismatch (E706) errors in vim <7.4.1546
|
||||
unlet users_value
|
||||
else
|
||||
let g:vimwiki_global_vars[key] = global_settings[key].default
|
||||
endif
|
||||
@ -221,27 +245,91 @@ function! s:read_global_settings_from_user()
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:normalize_global_settings()
|
||||
function! s:normalize_global_settings() abort
|
||||
let keys = keys(g:vimwiki_global_vars.ext2syntax)
|
||||
for ext in keys
|
||||
" ensure the file extensions in ext2syntax start with a dot
|
||||
if ext[0] != '.'
|
||||
let new_ext = '.' . ext
|
||||
let g:vimwiki_global_vars.ext2syntax[new_ext] = g:vimwiki_global_vars.ext2syntax[ext]
|
||||
call remove(g:vimwiki_global_vars.ext2syntax, ext)
|
||||
endif
|
||||
" for convenience, we also allow the term 'mediawiki'
|
||||
if g:vimwiki_global_vars.ext2syntax[ext] ==# 'mediawiki'
|
||||
let g:vimwiki_global_vars.ext2syntax[ext] = 'media'
|
||||
endif
|
||||
|
||||
" ensure the file extensions in ext2syntax start with a dot
|
||||
" make sure this occurs after anything else that tries to access
|
||||
" the entry using the index 'ext' since this removes that index
|
||||
if ext[0] !=# '.'
|
||||
let new_ext = '.' . ext
|
||||
let g:vimwiki_global_vars.ext2syntax[new_ext] = g:vimwiki_global_vars.ext2syntax[ext]
|
||||
call remove(g:vimwiki_global_vars.ext2syntax, ext)
|
||||
endif
|
||||
endfor
|
||||
|
||||
" ensure key_mappings dictionary has all required keys
|
||||
if !has_key(g:vimwiki_global_vars.key_mappings, 'all_maps')
|
||||
let g:vimwiki_global_vars.key_mappings.all_maps = 1
|
||||
endif
|
||||
if !has_key(g:vimwiki_global_vars.key_mappings, 'global')
|
||||
let g:vimwiki_global_vars.key_mappings.global = 1
|
||||
endif
|
||||
if !has_key(g:vimwiki_global_vars.key_mappings, 'headers')
|
||||
let g:vimwiki_global_vars.key_mappings.headers = 1
|
||||
endif
|
||||
if !has_key(g:vimwiki_global_vars.key_mappings, 'text_objs')
|
||||
let g:vimwiki_global_vars.key_mappings.text_objs = 1
|
||||
endif
|
||||
if !has_key(g:vimwiki_global_vars.key_mappings, 'table_format')
|
||||
let g:vimwiki_global_vars.key_mappings.table_format = 1
|
||||
endif
|
||||
if !has_key(g:vimwiki_global_vars.key_mappings, 'table_mappings')
|
||||
let g:vimwiki_global_vars.key_mappings.table_mappings = 1
|
||||
endif
|
||||
if !has_key(g:vimwiki_global_vars.key_mappings, 'lists')
|
||||
let g:vimwiki_global_vars.key_mappings.lists = 1
|
||||
endif
|
||||
if !has_key(g:vimwiki_global_vars.key_mappings, 'links')
|
||||
let g:vimwiki_global_vars.key_mappings.links = 1
|
||||
endif
|
||||
if !has_key(g:vimwiki_global_vars.key_mappings, 'html')
|
||||
let g:vimwiki_global_vars.key_mappings.html = 1
|
||||
endif
|
||||
if !has_key(g:vimwiki_global_vars.key_mappings, 'mouse')
|
||||
let g:vimwiki_global_vars.key_mappings.mouse = 0
|
||||
endif
|
||||
|
||||
" disable all key mappings if all_maps == 0
|
||||
if !g:vimwiki_global_vars.key_mappings.all_maps
|
||||
let g:vimwiki_global_vars.key_mappings.global = 0
|
||||
let g:vimwiki_global_vars.key_mappings.headers = 0
|
||||
let g:vimwiki_global_vars.key_mappings.text_objs = 0
|
||||
let g:vimwiki_global_vars.key_mappings.table_format = 0
|
||||
let g:vimwiki_global_vars.key_mappings.table_mappings = 0
|
||||
let g:vimwiki_global_vars.table_mappings = 0 " kept for backwards compatibility
|
||||
let g:vimwiki_global_vars.key_mappings.lists = 0
|
||||
let g:vimwiki_global_vars.key_mappings.links = 0
|
||||
let g:vimwiki_global_vars.key_mappings.html = 0
|
||||
let g:vimwiki_global_vars.key_mappings.mouse = 0
|
||||
let g:vimwiki_global_vars.use_mouse = 0 " kept for backwards compatibility
|
||||
endif
|
||||
|
||||
" TODO remove these checks and the table_mappings and use_mouse variables
|
||||
" backwards compatibility checks
|
||||
" if the old option isn't its default value then overwrite the new option
|
||||
if g:vimwiki_global_vars.table_mappings == 0
|
||||
let g:vimwiki_global_vars.key_mappings.table_mappings = 0 && g:vimwiki_global_vars.key_mappings.table_mappings == 1
|
||||
endif
|
||||
if g:vimwiki_global_vars.use_mouse == 1 && g:vimwiki_global_vars.key_mappings.mouse == 0
|
||||
let g:vimwiki_global_vars.key_mappings.mouse = 1
|
||||
endif
|
||||
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:populate_wikilocal_options()
|
||||
let s:margin_set_by_user = 0
|
||||
function! s:populate_wikilocal_options() abort
|
||||
let default_values = {
|
||||
\ 'auto_diary_index': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'auto_export': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'auto_generate_links': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'auto_generate_tags': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'auto_tags': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'auto_toc': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'automatic_nested_syntaxes': {'type': type(0), 'default': 1, 'min': 0, 'max': 1},
|
||||
@ -250,12 +338,16 @@ function! s:populate_wikilocal_options()
|
||||
\ 'custom_wiki2html_args': {'type': type(''), 'default': ''},
|
||||
\ 'diary_header': {'type': type(''), 'default': 'Diary', 'min_length': 1},
|
||||
\ 'diary_index': {'type': type(''), 'default': 'diary', 'min_length': 1},
|
||||
\ 'diary_rel_path': {'type': type(''), 'default': 'diary/', 'min_length': 1},
|
||||
\ 'diary_rel_path': {'type': type(''), 'default': 'diary/', 'min_length': 0},
|
||||
\ 'diary_caption_level': {'type': type(0), 'default': 0, 'min': -1, 'max': 6},
|
||||
\ 'diary_sort': {'type': type(''), 'default': 'desc', 'possible_values': ['asc', 'desc']},
|
||||
\ 'exclude_files': {'type': type([]), 'default': []},
|
||||
\ 'ext': {'type': type(''), 'default': '.wiki', 'min_length': 1},
|
||||
\ 'index': {'type': type(''), 'default': 'index', 'min_length': 1},
|
||||
\ 'links_space_char': {'type': type(''), 'default': ' ', 'min_length': 1},
|
||||
\ 'list_margin': {'type': type(0), 'default': -1, 'min': -1},
|
||||
\ 'maxhi': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'name': {'type': type(''), 'default': ''},
|
||||
\ 'nested_syntaxes': {'type': type({}), 'default': {}},
|
||||
\ 'path': {'type': type(''), 'default': $HOME . '/vimwiki/', 'min_length': 1},
|
||||
\ 'path_html': {'type': type(''), 'default': ''},
|
||||
@ -264,6 +356,7 @@ function! s:populate_wikilocal_options()
|
||||
\ 'template_default': {'type': type(''), 'default': 'default', 'min_length': 1},
|
||||
\ 'template_ext': {'type': type(''), 'default': '.tpl'},
|
||||
\ 'template_path': {'type': type(''), 'default': $HOME . '/vimwiki/templates/'},
|
||||
\ 'html_filename_parameterization': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ }
|
||||
|
||||
let g:vimwiki_wikilocal_vars = []
|
||||
@ -285,6 +378,9 @@ function! s:populate_wikilocal_options()
|
||||
for key in keys(default_values)
|
||||
if has_key(users_wiki_settings, key)
|
||||
call s:check_users_value(key, users_wiki_settings[key], default_values[key], 0)
|
||||
if key ==# 'list_margin'
|
||||
let s:margin_set_by_user = 1
|
||||
endif
|
||||
let new_wiki_settings[key] = users_wiki_settings[key]
|
||||
else
|
||||
let new_wiki_settings[key] = default_wiki_settings[key]
|
||||
@ -325,7 +421,7 @@ function! s:populate_wikilocal_options()
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:check_users_value(key, users_value, value_infos, comes_from_global_variable)
|
||||
function! s:check_users_value(key, users_value, value_infos, comes_from_global_variable) abort
|
||||
let type_code_to_name = {
|
||||
\ type(0): 'number',
|
||||
\ type(''): 'string',
|
||||
@ -336,50 +432,54 @@ function! s:check_users_value(key, users_value, value_infos, comes_from_global_v
|
||||
\ printf('''g:vimwiki_%s''', a:key) :
|
||||
\ printf('''%s'' in g:vimwiki_list', a:key)
|
||||
|
||||
let help_text = a:comes_from_global_variable ?
|
||||
\ 'g:vimwiki_' :
|
||||
\ 'vimwiki-option-'
|
||||
|
||||
if has_key(a:value_infos, 'type') && type(a:users_value) != a:value_infos.type
|
||||
echom printf('Vimwiki Error: The provided value of the option %s is a %s, ' .
|
||||
\ 'but expected is a %s. See '':h g:vimwiki_%s''.', setting_origin,
|
||||
\ 'but expected is a %s. See '':h '.help_text.'%s''.', setting_origin,
|
||||
\ type_code_to_name[type(a:users_value)], type_code_to_name[a:value_infos.type], a:key)
|
||||
endif
|
||||
|
||||
if a:value_infos.type == type(0) && has_key(a:value_infos, 'min') &&
|
||||
\ a:users_value < a:value_infos.min
|
||||
echom printf('Vimwiki Error: The provided value ''%i'' of the option %s is'
|
||||
\ . ' too small. The minimum value is %i. See '':h g:vimwiki_%s''.', a:users_value,
|
||||
\ . ' too small. The minimum value is %i. See '':h '.help_text.'%s''.', a:users_value,
|
||||
\ setting_origin, a:value_infos.min, a:key)
|
||||
endif
|
||||
|
||||
if a:value_infos.type == type(0) && has_key(a:value_infos, 'max') &&
|
||||
\ a:users_value > a:value_infos.max
|
||||
echom printf('Vimwiki Error: The provided value ''%i'' of the option %s is'
|
||||
\ . ' too large. The maximum value is %i. See '':h g:vimwiki_%s''.', a:users_value,
|
||||
\ . ' too large. The maximum value is %i. See '':h '.help_text.'%s''.', a:users_value,
|
||||
\ setting_origin, a:value_infos.max, a:key)
|
||||
endif
|
||||
|
||||
if has_key(a:value_infos, 'possible_values') &&
|
||||
\ index(a:value_infos.possible_values, a:users_value) == -1
|
||||
echom printf('Vimwiki Error: The provided value ''%s'' of the option %s is'
|
||||
\ . ' invalid. Allowed values are %s. See ''g:vimwiki_%s''.', a:users_value,
|
||||
\ . ' invalid. Allowed values are %s. See '':h '.help_text.'%s''.', a:users_value,
|
||||
\ setting_origin, string(a:value_infos.possible_values), a:key)
|
||||
endif
|
||||
|
||||
if a:value_infos.type == type('') && has_key(a:value_infos, 'length') &&
|
||||
\ strwidth(a:users_value) != a:value_infos.length
|
||||
echom printf('Vimwiki Error: The provided value ''%s'' of the option %s must'
|
||||
\ . ' contain exactly %i character(s) but has %i. See '':h g:vimwiki_%s''.',
|
||||
\ . ' contain exactly %i character(s) but has %i. See '':h '.help_text.'_%s''.',
|
||||
\ a:users_value, setting_origin, a:value_infos.length, strwidth(a:users_value), a:key)
|
||||
endif
|
||||
|
||||
if a:value_infos.type == type('') && has_key(a:value_infos, 'min_length') &&
|
||||
\ strwidth(a:users_value) < a:value_infos.min_length
|
||||
echom printf('Vimwiki Error: The provided value ''%s'' of the option %s must'
|
||||
\ . ' have at least %d character(s) but has %d. See '':h g:vimwiki_%s''.', a:users_value,
|
||||
\ . ' have at least %d character(s) but has %d. See '':h '.help_text.'%s''.', a:users_value,
|
||||
\ setting_origin, a:value_infos.min_length, strwidth(a:users_value), a:key)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:normalize_wikilocal_settings()
|
||||
function! s:normalize_wikilocal_settings() abort
|
||||
for wiki_settings in g:vimwiki_wikilocal_vars
|
||||
let wiki_settings['path'] = s:normalize_path(wiki_settings['path'])
|
||||
|
||||
@ -395,7 +495,7 @@ function! s:normalize_wikilocal_settings()
|
||||
let wiki_settings['diary_rel_path'] = s:normalize_path(wiki_settings['diary_rel_path'])
|
||||
|
||||
let ext = wiki_settings['ext']
|
||||
if !empty(ext) && ext[0] != '.'
|
||||
if !empty(ext) && ext[0] !=# '.'
|
||||
let wiki_settings['ext'] = '.' . ext
|
||||
endif
|
||||
|
||||
@ -403,11 +503,17 @@ function! s:normalize_wikilocal_settings()
|
||||
if wiki_settings.syntax ==# 'mediawiki'
|
||||
let wiki_settings.syntax = 'media'
|
||||
endif
|
||||
|
||||
if wiki_settings.syntax ==# 'markdown' && !s:margin_set_by_user
|
||||
" default list margin to 0
|
||||
let wiki_settings.list_margin = 0
|
||||
endif
|
||||
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:normalize_path(path)
|
||||
function! s:normalize_path(path) abort
|
||||
" trim trailing / and \ because otherwise resolve() doesn't work quite right
|
||||
let path = substitute(a:path, '[/\\]\+$', '', '')
|
||||
if path !~# '^scp:'
|
||||
@ -418,7 +524,7 @@ function! s:normalize_path(path)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#vars#populate_syntax_vars(syntax)
|
||||
function! vimwiki#vars#populate_syntax_vars(syntax) abort
|
||||
if !exists('g:vimwiki_syntax_variables')
|
||||
let g:vimwiki_syntax_variables = {}
|
||||
endif
|
||||
@ -441,6 +547,9 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
|
||||
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i] =
|
||||
\ '^\s*'.header_symbol.'\{'.i.'}[^'.header_symbol.'].*[^'.header_symbol.']'
|
||||
\ .header_symbol.'\{'.i.'}\s*$'
|
||||
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_Text'] =
|
||||
\ '^\s*'.header_symbol.'\{'.i.'}\zs[^'.header_symbol.'].*[^'.header_symbol.']\ze'
|
||||
\ .header_symbol.'\{'.i.'}\s*$'
|
||||
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_Start'] =
|
||||
\ '^\s*'.header_symbol.'\{'.i.'}[^'.header_symbol.'].*[^'.header_symbol.']'
|
||||
\ .header_symbol.'\{'.i.'}\s*$'
|
||||
@ -457,6 +566,8 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
|
||||
\ repeat(header_symbol, i).' __Header__'
|
||||
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i] =
|
||||
\ '^\s*'.header_symbol.'\{'.i.'}[^'.header_symbol.'].*$'
|
||||
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_Text'] =
|
||||
\ '^\s*'.header_symbol.'\{'.i.'}\zs[^'.header_symbol.'].*\ze$'
|
||||
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_Start'] =
|
||||
\ '^\s*'.header_symbol.'\{'.i.'}[^'.header_symbol.'].*$'
|
||||
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_End'] =
|
||||
@ -527,7 +638,7 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
|
||||
if match(vimwiki#vars#get_global('listsyms'), vimwiki#vars#get_global('listsym_rejected')) != -1
|
||||
echomsg 'Vimwiki Warning: the value of g:vimwiki_listsym_rejected ('''
|
||||
\ . vimwiki#vars#get_global('listsym_rejected')
|
||||
\ . ''') must not be a part of g:vimwiki_listsyms (''' .
|
||||
\ . ''') must not be a part of g:vimwiki_listsyms ('''
|
||||
\ . vimwiki#vars#get_global('listsyms') . ''')'
|
||||
endif
|
||||
let g:vimwiki_syntax_variables[a:syntax].rxListItemWithoutCB =
|
||||
@ -555,7 +666,7 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
|
||||
" let g:vimwiki_rxWeblink = '[\["(|]\@<!'. g:vimwiki_rxWeblinkUrl .
|
||||
" \ '\%([),:;.!?]\=\%([ \t]\|$\)\)\@='
|
||||
let g:vimwiki_syntax_variables[a:syntax].rxWeblink =
|
||||
\ '\<'. g:vimwiki_global_vars.rxWeblinkUrl . '\S*'
|
||||
\ '\<'. g:vimwiki_global_vars.rxWeblinkUrl . '[^[:space:]>]*'
|
||||
" 0a) match URL within URL
|
||||
let g:vimwiki_syntax_variables[a:syntax].rxWeblinkMatchUrl =
|
||||
\ g:vimwiki_syntax_variables[a:syntax].rxWeblink
|
||||
@ -599,7 +710,7 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:populate_extra_markdown_vars()
|
||||
function! s:populate_extra_markdown_vars() abort
|
||||
let mkd_syntax = g:vimwiki_syntax_variables['markdown']
|
||||
|
||||
" 0a) match [[URL|DESCRIPTION]]
|
||||
@ -622,18 +733,6 @@ function! s:populate_extra_markdown_vars()
|
||||
" [DESCRIPTION][URL]
|
||||
let mkd_syntax.WikiLink1Template2 = wikilink_md_prefix. '__LinkDescription__'.
|
||||
\ wikilink_md_separator. '__LinkUrl__'. wikilink_md_suffix
|
||||
let mkd_syntax.WikiLinkMatchUrlTemplate .=
|
||||
\ '\|' .
|
||||
\ mkd_syntax.rx_wikilink_md_prefix .
|
||||
\ '.*' .
|
||||
\ rx_wikilink_md_separator .
|
||||
\ '\zs__LinkUrl__\ze\%(#.*\)\?' .
|
||||
\ mkd_syntax.rx_wikilink_md_suffix .
|
||||
\ '\|' .
|
||||
\ mkd_syntax.rx_wikilink_md_prefix .
|
||||
\ '\zs__LinkUrl__\ze\%(#.*\)\?' .
|
||||
\ rx_wikilink_md_separator .
|
||||
\ mkd_syntax.rx_wikilink_md_suffix
|
||||
|
||||
let valid_chars = '[^\\\[\]]'
|
||||
let mkd_syntax.rxWikiLink1Url = valid_chars.'\{-}'
|
||||
@ -686,41 +785,75 @@ function! s:populate_extra_markdown_vars()
|
||||
|
||||
let mkd_syntax.rxWeblink1Prefix = '['
|
||||
let mkd_syntax.rxWeblink1Suffix = ')'
|
||||
let mkd_syntax.rxWeblink1EscapeCharsSuffix = '\(\\\)\@<!\()\)'
|
||||
let mkd_syntax.rxWeblink1Separator = ']('
|
||||
let mkd_syntax.rxWeblink1Ext = ''
|
||||
if vimwiki#vars#get_global('markdown_link_ext')
|
||||
let mkd_syntax.rxWeblink1Ext = vimwiki#vars#get_wikilocal('ext')
|
||||
endif
|
||||
" [DESCRIPTION](URL)
|
||||
let mkd_syntax.Weblink1Template = mkd_syntax.rxWeblink1Prefix . '__LinkDescription__'.
|
||||
\ mkd_syntax.rxWeblink1Separator. '__LinkUrl__'.
|
||||
\ mkd_syntax.rxWeblink1Separator. '__LinkUrl__'. mkd_syntax.rxWeblink1Ext.
|
||||
\ mkd_syntax.rxWeblink1Suffix
|
||||
" [DESCRIPTION](ANCHOR)
|
||||
let mkd_syntax.Weblink2Template = mkd_syntax.rxWeblink1Prefix . '__LinkDescription__'.
|
||||
\ mkd_syntax.rxWeblink1Separator. '__LinkUrl__'. mkd_syntax.rxWeblink1Suffix
|
||||
" [DESCRIPTION](FILE#ANCHOR)
|
||||
let mkd_syntax.Weblink3Template = mkd_syntax.rxWeblink1Prefix . '__LinkDescription__'.
|
||||
\ mkd_syntax.rxWeblink1Separator. '__LinkUrl__'. mkd_syntax.rxWeblink1Ext.
|
||||
\ '#__LinkAnchor__'. mkd_syntax.rxWeblink1Suffix
|
||||
|
||||
let valid_chars = '[^\\]'
|
||||
let valid_chars = '[^\\\]]'
|
||||
" spaces and '\' must be allowed for filename and escaped chars
|
||||
let valid_chars_url = '[^[:cntrl:]]'
|
||||
|
||||
let mkd_syntax.rxWeblink1Prefix = vimwiki#u#escape(mkd_syntax.rxWeblink1Prefix)
|
||||
let mkd_syntax.rxWeblink1Suffix = vimwiki#u#escape(mkd_syntax.rxWeblink1Suffix)
|
||||
let mkd_syntax.rxWeblink1Separator = vimwiki#u#escape(mkd_syntax.rxWeblink1Separator)
|
||||
let mkd_syntax.rxWeblink1Url = valid_chars.'\{-}'
|
||||
let mkd_syntax.rxWeblink1Url = valid_chars_url.'\{-}'
|
||||
let mkd_syntax.rxWeblink1Descr = valid_chars.'\{-}'
|
||||
let mkd_syntax.WikiLinkMatchUrlTemplate =
|
||||
\ mkd_syntax.rx_wikilink_md_prefix .
|
||||
\ '.*' .
|
||||
\ rx_wikilink_md_separator .
|
||||
\ '\zs__LinkUrl__\ze\%(#.*\)\?\%('.vimwiki#vars#get_wikilocal('ext').'\)\?'.
|
||||
\ mkd_syntax.rx_wikilink_md_suffix .
|
||||
\ '\|' .
|
||||
\ mkd_syntax.rx_wikilink_md_prefix .
|
||||
\ '\zs__LinkUrl__\ze\%(#.*\)\?\%('.vimwiki#vars#get_wikilocal('ext').'\)\?'.
|
||||
\ rx_wikilink_md_separator .
|
||||
\ mkd_syntax.rx_wikilink_md_suffix .
|
||||
\ '\|' .
|
||||
\ mkd_syntax.rxWeblink1Prefix.
|
||||
\ '.*' .
|
||||
\ mkd_syntax.rxWeblink1Separator.
|
||||
\ '\zs__LinkUrl__\ze\%(#.*\)\?\%('.vimwiki#vars#get_wikilocal('ext').'\)\?'.
|
||||
\ mkd_syntax.rxWeblink1EscapeCharsSuffix
|
||||
|
||||
" 1. [DESCRIPTION](URL)
|
||||
" 1a) match [DESCRIPTION](URL)
|
||||
let mkd_syntax.rxWeblink1 = mkd_syntax.rxWeblink1Prefix.
|
||||
\ mkd_syntax.rxWeblink1Url . mkd_syntax.rxWeblink1Separator.
|
||||
\ mkd_syntax.rxWeblink1Descr . mkd_syntax.rxWeblink1Suffix
|
||||
\ mkd_syntax.rxWeblink1Descr . mkd_syntax.rxWeblink1Separator.
|
||||
\ mkd_syntax.rxWeblink1Url . mkd_syntax.rxWeblink1EscapeCharsSuffix
|
||||
" 1b) match URL within [DESCRIPTION](URL)
|
||||
let mkd_syntax.rxWeblink1MatchUrl = mkd_syntax.rxWeblink1Prefix.
|
||||
\ mkd_syntax.rxWeblink1Descr. mkd_syntax.rxWeblink1Separator.
|
||||
\ '\zs' . mkd_syntax.rxWeblink1Url . '\ze' . mkd_syntax.rxWeblink1Suffix
|
||||
\ '\zs' . mkd_syntax.rxWeblink1Url . '\ze' . mkd_syntax.rxWeblink1EscapeCharsSuffix
|
||||
" 1c) match DESCRIPTION within [DESCRIPTION](URL)
|
||||
let mkd_syntax.rxWeblink1MatchDescr = mkd_syntax.rxWeblink1Prefix.
|
||||
\ '\zs'.mkd_syntax.rxWeblink1Descr.'\ze'. mkd_syntax.rxWeblink1Separator.
|
||||
\ mkd_syntax.rxWeblink1Url. mkd_syntax.rxWeblink1Suffix
|
||||
\ mkd_syntax.rxWeblink1Url. mkd_syntax.rxWeblink1EscapeCharsSuffix
|
||||
|
||||
" image ![DESCRIPTION](URL)
|
||||
let mkd_syntax.rxImage = '!' . mkd_syntax.rxWeblink1Prefix.
|
||||
\ mkd_syntax.rxWeblink1Descr . mkd_syntax.rxWeblink1Separator.
|
||||
\ mkd_syntax.rxWeblink1Url . mkd_syntax.rxWeblink1EscapeCharsSuffix
|
||||
|
||||
" TODO: image links too !!
|
||||
let mkd_syntax.rxWeblink1Prefix1 = mkd_syntax.rxWeblink1Prefix
|
||||
let mkd_syntax.rxWeblink1Suffix1 = mkd_syntax.rxWeblink1Separator.
|
||||
\ mkd_syntax.rxWeblink1Url . mkd_syntax.rxWeblink1Suffix
|
||||
\ mkd_syntax.rxWeblink1Url . mkd_syntax.rxWeblink1EscapeCharsSuffix
|
||||
|
||||
" *a) match ANY weblink
|
||||
let mkd_syntax.rxWeblink = ''.
|
||||
" *a) match ANY weblink (exclude image links starting with !)
|
||||
let mkd_syntax.rxWeblink = '\(!\)\@<!'.
|
||||
\ mkd_syntax.rxWeblink1.'\|'.
|
||||
\ mkd_syntax.rxWeblink0
|
||||
" *b) match URL within ANY weblink
|
||||
@ -733,7 +866,8 @@ function! s:populate_extra_markdown_vars()
|
||||
\ mkd_syntax.rxWeblinkMatchDescr0
|
||||
|
||||
let mkd_syntax.rxAnyLink = mkd_syntax.rxWikiLink.'\|'.
|
||||
\ g:vimwiki_global_vars.rxWikiIncl.'\|'.mkd_syntax.rxWeblink
|
||||
\ g:vimwiki_global_vars.rxWikiIncl.'\|'.mkd_syntax.rxWeblink .'\|'.
|
||||
\ mkd_syntax.rxImage
|
||||
|
||||
let mkd_syntax.rxMkdRef = '\['.g:vimwiki_global_vars.rxWikiLinkDescr.']:\%(\s\+\|\n\)'.
|
||||
\ mkd_syntax.rxWeblink0
|
||||
@ -745,13 +879,13 @@ function! s:populate_extra_markdown_vars()
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#vars#init()
|
||||
function! vimwiki#vars#init() abort
|
||||
call s:populate_global_variables()
|
||||
call s:populate_wikilocal_options()
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#vars#get_syntaxlocal(key, ...)
|
||||
function! vimwiki#vars#get_syntaxlocal(key, ...) abort
|
||||
if a:0
|
||||
let syntax = a:1
|
||||
else
|
||||
@ -767,10 +901,11 @@ endfunction
|
||||
|
||||
" Get a variable for the buffer we are currently in or for the given buffer (number or name).
|
||||
" Populate the variable, if it doesn't exist.
|
||||
function! vimwiki#vars#get_bufferlocal(key, ...)
|
||||
function! vimwiki#vars#get_bufferlocal(key, ...) abort
|
||||
let buffer = a:0 ? a:1 : '%'
|
||||
|
||||
let value = getbufvar(buffer, 'vimwiki_'.a:key, '/\/\')
|
||||
" 'get(getbufvar(...' handles vim < v7.3.831 that didn't allow a default value for getbufvar
|
||||
let value = get(getbufvar(buffer, ''), 'vimwiki_'.a:key, '/\/\')
|
||||
if type(value) != 1 || value !=# '/\/\'
|
||||
return value
|
||||
elseif a:key ==# 'wiki_nr'
|
||||
@ -782,12 +917,12 @@ function! vimwiki#vars#get_bufferlocal(key, ...)
|
||||
call setbufvar(buffer, 'vimwiki_invsubdir', vimwiki#base#invsubdir(subdir))
|
||||
elseif a:key ==# 'existing_wikifiles'
|
||||
call setbufvar(buffer, 'vimwiki_existing_wikifiles',
|
||||
\ vimwiki#base#get_wikilinks(vimwiki#vars#get_bufferlocal('wiki_nr'), 1))
|
||||
\ vimwiki#base#get_wikilinks(vimwiki#vars#get_bufferlocal('wiki_nr'), 1, ''))
|
||||
elseif a:key ==# 'existing_wikidirs'
|
||||
call setbufvar(buffer, 'vimwiki_existing_wikidirs',
|
||||
\ vimwiki#base#get_wiki_directories(vimwiki#vars#get_bufferlocal('wiki_nr')))
|
||||
elseif a:key ==# 'prev_link'
|
||||
call setbufvar(buffer, 'vimwiki_prev_link', [])
|
||||
elseif a:key ==# 'prev_links'
|
||||
call setbufvar(buffer, 'vimwiki_prev_links', [])
|
||||
elseif a:key ==# 'markdown_refs'
|
||||
call setbufvar(buffer, 'vimwiki_markdown_refs', vimwiki#markdown_base#scan_reflinks())
|
||||
else
|
||||
@ -798,20 +933,20 @@ function! vimwiki#vars#get_bufferlocal(key, ...)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#vars#set_bufferlocal(key, value, ...)
|
||||
function! vimwiki#vars#set_bufferlocal(key, value, ...) abort
|
||||
let buffer = a:0 ? a:1 : '%'
|
||||
call setbufvar(buffer, 'vimwiki_' . a:key, a:value)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#vars#get_global(key)
|
||||
function! vimwiki#vars#get_global(key) abort
|
||||
return g:vimwiki_global_vars[a:key]
|
||||
endfunction
|
||||
|
||||
|
||||
" the second argument can be a wiki number. When absent, the wiki of the currently active buffer is
|
||||
" used
|
||||
function! vimwiki#vars#get_wikilocal(key, ...)
|
||||
function! vimwiki#vars#get_wikilocal(key, ...) abort
|
||||
if a:0
|
||||
return g:vimwiki_wikilocal_vars[a:1][a:key]
|
||||
else
|
||||
@ -820,12 +955,12 @@ function! vimwiki#vars#get_wikilocal(key, ...)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#vars#get_wikilocal_default(key)
|
||||
function! vimwiki#vars#get_wikilocal_default(key) abort
|
||||
return g:vimwiki_wikilocal_vars[-1][a:key]
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#vars#set_wikilocal(key, value, wiki_nr)
|
||||
function! vimwiki#vars#set_wikilocal(key, value, wiki_nr) abort
|
||||
if a:wiki_nr == len(g:vimwiki_wikilocal_vars) - 1
|
||||
call insert(g:vimwiki_wikilocal_vars, {}, -1)
|
||||
endif
|
||||
@ -833,7 +968,7 @@ function! vimwiki#vars#set_wikilocal(key, value, wiki_nr)
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#vars#add_temporary_wiki(settings)
|
||||
function! vimwiki#vars#add_temporary_wiki(settings) abort
|
||||
let new_temp_wiki_settings = copy(g:vimwiki_wikilocal_vars[-1])
|
||||
for [key, value] in items(a:settings)
|
||||
let new_temp_wiki_settings[key] = value
|
||||
@ -844,7 +979,6 @@ endfunction
|
||||
|
||||
|
||||
" number of registered wikis + temporary
|
||||
function! vimwiki#vars#number_of_wikis()
|
||||
function! vimwiki#vars#number_of_wikis() abort
|
||||
return len(g:vimwiki_wikilocal_vars) - 1
|
||||
endfunction
|
||||
|
||||
|
BIN
doc/entries.png
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 333 KiB |
BIN
doc/lists.png
Before Width: | Height: | Size: 276 KiB After Width: | Height: | Size: 420 KiB |
10
doc/logo.svg
Normal file
@ -0,0 +1,10 @@
|
||||
<svg width="200" height="43" viewBox="0 0 372 80" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M45.592 20.804C48.4347 22.4987 49.856 24.3027 49.856 26.216C49.856 27.3093 49.3093 28.8127 48.216 30.726L31.242 59.836C30.6953 60.7653 29.8207 61.6127 28.618 62.378C27.4153 63.0887 26.2127 63.444 25.01 63.444C23.862 63.444 22.7413 63.1707 21.648 62.624C20.6093 62.0227 19.8713 61.4213 19.434 60.82L18.696 59.918L1.64 30.726C0.546667 28.922 0 27.446 0 26.298C0 24.33 1.42133 22.4987 4.264 20.804C6.34133 19.6013 7.98133 19 9.184 19C10.3867 19 11.316 19.3827 11.972 20.148C12.6827 20.8587 13.4207 21.952 14.186 23.428L24.928 44.092L35.67 23.428C36.2713 22.3893 36.7087 21.6513 36.982 21.214C37.31 20.722 37.802 20.2573 38.458 19.82C39.114 19.328 39.9887 19.082 41.082 19.082C42.1753 19.082 43.6787 19.656 45.592 20.804Z" fill="black"/>
|
||||
<path d="M54.341 27.036C54.341 25.7787 54.3683 24.8493 54.423 24.248C54.5323 23.592 54.7783 22.854 55.161 22.034C55.9263 20.6127 58.0583 19.902 61.557 19.902C64.181 19.902 66.0397 20.3667 67.133 21.296C68.0623 22.0613 68.5544 23.2367 68.609 24.822C68.6637 25.3687 68.691 26.1613 68.691 27.2V55.9C68.691 57.1573 68.6363 58.114 68.527 58.77C68.4724 59.3713 68.2263 60.082 67.789 60.902C67.0784 62.3233 64.9737 63.034 61.475 63.034C58.031 63.034 55.9263 62.296 55.161 60.82C54.7783 60 54.5323 59.2893 54.423 58.688C54.3683 58.0867 54.341 57.13 54.341 55.818V27.036Z" fill="black"/>
|
||||
<path d="M89.3454 25.56C91.9147 21.6787 95.0034 19.738 98.6114 19.738C104.187 19.738 108.342 22.116 111.075 26.872C111.677 26.052 112.387 25.2047 113.207 24.33C114.082 23.4007 115.449 22.4167 117.307 21.378C119.166 20.2847 121.079 19.738 123.047 19.738C127.421 19.738 131.083 21.4327 134.035 24.822C136.987 28.1567 138.463 33.7053 138.463 41.468V55.818C138.463 57.0753 138.409 58.032 138.299 58.688C138.245 59.2893 137.999 60 137.561 60.82C136.851 62.296 134.746 63.034 131.247 63.034C127.803 63.034 125.699 62.2687 124.933 60.738C124.551 59.918 124.305 59.2073 124.195 58.606C124.141 57.95 124.113 56.9933 124.113 55.736V41.386C124.113 36.63 122.419 34.252 119.029 34.252C117.116 34.252 115.804 34.8807 115.093 36.138C114.437 37.3953 114.109 39.172 114.109 41.468V55.818C114.109 57.13 114.055 58.0867 113.945 58.688C113.891 59.2893 113.645 60 113.207 60.82C112.442 62.296 110.31 63.034 106.811 63.034C103.367 63.034 101.263 62.2687 100.497 60.738C100.115 59.918 99.8687 59.2073 99.7594 58.606C99.7047 57.95 99.6774 56.9933 99.6774 55.736V41.386C99.6774 36.63 97.9827 34.252 94.5934 34.252C91.3134 34.252 89.6734 36.63 89.6734 41.386V55.9C89.6734 57.1573 89.6187 58.114 89.5094 58.77C89.4547 59.3713 89.2087 60.082 88.7714 60.902C87.9514 62.3233 85.8194 63.034 82.3754 63.034C78.9314 63.034 76.8267 62.296 76.0614 60.82C75.6787 60 75.4327 59.2893 75.3234 58.688C75.2687 58.0867 75.2414 57.13 75.2414 55.818V26.954C75.2414 25.6967 75.2687 24.7673 75.3234 24.166C75.4327 23.51 75.7061 22.7993 76.1434 22.034C76.9634 20.558 78.9041 19.82 81.9654 19.82C85.0267 19.82 87.0221 20.312 87.9514 21.296C88.8807 22.28 89.3454 23.7013 89.3454 25.56Z" fill="black"/>
|
||||
<path d="M219.3 71.3359C216.999 70.2839 215.158 68.7386 213.777 66.7002C212.462 64.6618 211.147 62.3932 209.832 59.8945C209.634 59.5 209.437 59.1055 209.24 58.7109C209.042 58.3164 208.845 57.9548 208.648 57.626L207.267 55.0615L206.478 53.4834L205.294 54.5684L203.519 56.1465L202.533 57.1328C200.823 58.7109 199.081 60.2891 197.305 61.8672C195.596 63.3796 193.754 64.7604 191.782 66.0098C189.875 67.1934 187.836 68.1797 185.667 68.9688C183.562 69.6921 181.261 70.0866 178.762 70.1523L176.592 69.0674C175.343 68.4098 174.291 67.818 173.436 67.292C172.581 66.7659 171.595 65.944 170.477 64.8262C170.148 64.2344 169.852 63.6755 169.589 63.1494C169.392 62.6234 169.162 62.0973 168.899 61.5713C168.176 60.2562 167.584 59.0726 167.124 58.0205C166.663 56.9684 166.203 55.7848 165.743 54.4697C165.94 53.5492 166.236 52.0039 166.63 49.834C167.025 47.5983 167.485 45.1654 168.011 42.5352C168.603 39.9049 169.195 37.2747 169.787 34.6445C170.444 31.9486 171.102 29.6143 171.759 27.6416C172.351 25.932 173.009 24.1237 173.732 22.2168C174.521 20.3099 175.343 18.5674 176.198 16.9893C177.118 15.3454 178.105 13.9645 179.157 12.8467C180.209 11.6631 181.327 10.9727 182.51 10.7754C182.839 11.2357 183.201 11.5645 183.595 11.7617C183.99 11.959 184.351 12.1234 184.68 12.2549C185.601 13.57 186.488 14.6878 187.343 15.6084C188.264 16.529 189.316 17.4495 190.5 18.3701C190.171 20.014 189.678 21.8551 189.02 23.8936C188.428 25.8662 187.771 27.8717 187.047 29.9102C186.39 31.8828 185.732 33.8226 185.075 35.7295C184.417 37.6364 183.891 39.2803 183.497 40.6611C183.102 41.779 182.773 43.0283 182.51 44.4092C181.918 46.8421 181.36 50.1628 180.833 54.3711C181.623 54.1738 182.477 53.7464 183.398 53.0889C184.319 52.4313 185.206 51.7409 186.061 51.0176C187.047 50.2285 188.034 49.3408 189.02 48.3545C190.269 47.1051 191.321 45.9544 192.176 44.9023C193.031 43.8503 193.82 42.7653 194.543 41.6475C195.333 40.5296 196.122 39.3132 196.911 37.998C197.7 36.6172 198.653 35.0062 199.771 33.165C200.757 31.5869 201.777 29.9102 202.829 28.1348C203.946 26.2936 205.031 24.5511 206.083 22.9072C207.201 21.1976 208.286 19.6523 209.338 18.2715C210.39 16.8906 211.344 15.8057 212.199 15.0166C212.725 15.6742 213.382 16.2988 214.171 16.8906C215.026 17.4824 215.914 17.9427 216.834 18.2715C217.229 18.8633 217.591 19.4222 217.919 19.9482C218.314 20.4085 218.676 20.8359 219.004 21.2305C219.399 21.8223 219.761 22.3812 220.089 22.9072C220.484 23.4333 220.846 23.9593 221.174 24.4854C221.109 24.9456 221.01 25.5374 220.878 26.2607C220.747 26.984 220.583 27.7731 220.385 28.6279C220.254 29.4827 220.089 30.3704 219.892 31.291C219.695 32.1458 219.498 32.9678 219.3 33.7568C218.774 36.2555 218.38 38.1296 218.117 39.3789C217.854 40.6283 217.656 41.6146 217.525 42.3379C217.459 43.0612 217.393 43.6859 217.328 44.2119C217.328 44.6722 217.328 45.3298 217.328 46.1846C217.262 46.8421 217.295 47.4997 217.426 48.1572C217.492 48.749 217.624 49.3737 217.821 50.0312C218.018 50.6888 218.281 51.2806 218.61 51.8066L222.555 48.749C223.673 47.8942 224.725 46.7435 225.711 45.2969C226.764 43.7845 227.75 42.0749 228.67 40.168C229.657 38.1953 230.61 36.0583 231.531 33.7568C232.451 31.4554 233.372 29.1211 234.292 26.7539C235.673 23.2689 237.054 19.8825 238.435 16.5947C239.882 13.307 241.263 10.7754 242.578 9C244.024 9.92057 245.274 10.874 246.326 11.8604C247.444 12.7809 248.397 13.8001 249.186 14.918C249.975 16.0358 250.6 17.318 251.06 18.7646C251.586 20.2113 251.948 21.9209 252.145 23.8936C250.961 26.195 249.811 28.5622 248.693 30.9951C247.641 33.4281 246.622 35.861 245.635 38.2939C244.32 41.4502 242.939 44.6064 241.493 47.7627C240.112 50.9189 238.567 53.9437 236.857 56.8369C235.147 59.6644 233.24 62.2946 231.136 64.7275C229.032 67.0947 226.599 69.1003 223.837 70.7441C223.114 70.5469 222.489 70.4482 221.963 70.4482C220.911 70.4482 220.024 70.7441 219.3 71.3359Z" fill="#E5E5E5"/>
|
||||
<path d="M268.025 63.1494C268.354 65.1221 268.222 66.6673 267.63 67.7852C267.104 68.903 266.315 69.7249 265.263 70.251C264.277 70.8428 263.126 71.1716 261.811 71.2373C260.496 71.3031 259.247 71.2373 258.063 71.04C257.405 70.1195 256.814 68.9688 256.288 67.5879C255.762 66.207 255.268 64.7933 254.808 63.3467C254.348 61.8343 253.92 60.3548 253.526 58.9082C253.197 57.4616 252.901 56.1794 252.638 55.0615C252.967 54.2725 253.164 53.3848 253.23 52.3984C253.361 51.3464 253.427 50.2943 253.427 49.2422C253.493 48.1901 253.526 47.138 253.526 46.0859C253.592 44.9681 253.69 43.916 253.822 42.9297C254.282 40.168 254.94 37.5378 255.794 35.0391C256.715 32.5404 257.438 29.943 257.964 27.2471C258.096 26.6553 258.03 26.0964 257.767 25.5703C257.57 25.0443 257.537 24.5511 257.668 24.0908C257.734 23.8278 257.931 23.6634 258.26 23.5977C258.589 23.4661 258.786 23.236 258.852 22.9072C259.049 22.1839 259.082 21.5921 258.951 21.1318C258.885 20.6715 259.016 20.1126 259.345 19.4551C259.674 18.929 260.069 18.1729 260.529 17.1865C261.055 16.1344 261.252 15.0495 261.121 13.9316C261.712 13.5371 262.271 13.0768 262.797 12.5508C263.323 12.0247 263.849 11.5645 264.375 11.1699C264.967 10.7096 265.592 10.3151 266.25 9.98633C266.973 9.65755 267.828 9.49316 268.814 9.49316C269.34 10.1507 269.669 10.874 269.8 11.6631C269.998 12.4521 270.162 13.2412 270.293 14.0303C270.491 14.8193 270.754 15.5755 271.083 16.2988C271.411 16.9564 271.97 17.4824 272.759 17.877C272.759 18.403 272.759 19.0605 272.759 19.8496C272.759 20.6387 272.792 21.4277 272.858 22.2168C272.924 22.9401 273.055 23.6305 273.252 24.2881C273.515 24.8799 273.91 25.2744 274.436 25.4717C273.252 28.6279 272.135 31.7513 271.083 34.8418C270.096 37.9323 269.274 41.0557 268.617 44.2119C267.959 47.3024 267.532 50.4258 267.334 53.582C267.203 56.7383 267.433 59.9274 268.025 63.1494Z" fill="#E5E5E5"/>
|
||||
<path d="M338.942 66.5029C335.786 66.6344 332.991 66.5687 330.558 66.3057C328.191 66.0426 325.857 65.418 323.555 64.4316C323.424 64.3659 323.292 64.2015 323.161 63.9385C323.029 63.6755 322.898 63.4782 322.766 63.3467C322.372 63.1494 321.878 63.0837 321.287 63.1494C320.761 63.1494 320.3 63.0837 319.906 62.9521C319.38 62.6891 318.558 62.196 317.44 61.4727C316.322 60.6836 315.303 59.9603 314.382 59.3027C313.199 58.3822 312.081 57.4616 311.029 56.541C309.977 55.6204 309.056 54.6341 308.267 53.582C308.07 53.319 307.807 53.1875 307.478 53.1875C307.149 53.1217 306.853 53.0231 306.59 52.8916C304.683 54.0752 303.072 55.5547 301.757 57.3301C300.442 59.1055 299.193 60.9137 298.009 62.7549C296.826 64.596 295.576 66.3385 294.261 67.9824C292.946 69.6263 291.269 70.8757 289.231 71.7305C288.639 71.7305 288.113 71.6318 287.653 71.4346C287.193 71.2373 286.765 70.9743 286.371 70.6455C285.976 70.3825 285.582 70.1195 285.187 69.8564C284.792 69.5934 284.365 69.3962 283.905 69.2646C283.905 68.4756 283.74 67.7523 283.412 67.0947C283.149 66.4372 282.853 65.8125 282.524 65.2207C282.261 64.6289 282.064 64.07 281.932 63.5439C281.801 62.9521 281.932 62.3932 282.327 61.8672C281.932 61.4727 281.34 61.0452 280.551 60.585C280.946 60.1904 281.11 59.8288 281.044 59.5C281.044 59.1712 280.979 58.8424 280.847 58.5137C280.716 58.1849 280.584 57.8232 280.453 57.4287C280.387 57.0342 280.486 56.6396 280.749 56.2451C281.077 56.2451 281.472 56.1794 281.932 56.0479C281.538 55.5218 281.34 55.2259 281.34 55.1602C281.406 55.0286 281.34 54.8643 281.143 54.667C281.012 54.2725 281.077 54.0423 281.34 53.9766C281.603 53.8451 281.866 53.7135 282.129 53.582C282.392 50.36 282.951 47.3682 283.806 44.6064C284.661 41.8447 285.614 39.1816 286.667 36.6172C287.719 34.0527 288.738 31.4554 289.724 28.8252C290.776 26.195 291.631 23.3675 292.289 20.3428C293.012 19.6195 293.571 18.7646 293.965 17.7783C294.426 16.792 294.886 15.8057 295.346 14.8193C295.872 13.833 296.431 12.8796 297.023 11.959C297.68 10.9727 298.568 10.1836 299.686 9.5918C300.607 9.65755 301.429 9.92057 302.152 10.3809C302.875 10.7754 303.763 10.9398 304.815 10.874C305.012 11.2028 305.177 11.5316 305.308 11.8604C305.505 12.1891 305.736 12.5179 305.999 12.8467L307.478 12.5508C308.201 13.1426 308.826 13.8988 309.352 14.8193C309.944 15.6742 310.338 16.5947 310.536 17.5811C310.733 18.5674 310.7 19.5208 310.437 20.4414C310.174 21.2962 309.549 21.9867 308.563 22.5127C308.629 22.8415 308.629 23.1045 308.563 23.3018C308.563 23.4333 308.53 23.5648 308.464 23.6963C308.399 23.8278 308.366 23.9593 308.366 24.0908C308.366 24.2223 308.464 24.4196 308.662 24.6826C307.347 25.6689 306.36 27.0498 305.703 28.8252C305.045 30.6006 304.683 32.1787 304.618 33.5596C305.407 32.7705 306.262 32.0143 307.182 31.291C308.168 30.502 309.155 29.7458 310.141 29.0225C311.193 28.2992 312.18 27.6087 313.1 26.9512C314.086 26.2936 314.974 25.6361 315.763 24.9785C317.933 23.0059 320.004 21.4277 321.977 20.2441C324.015 18.9948 326.153 17.6139 328.388 16.1016C328.914 15.9701 329.309 15.9701 329.572 16.1016C329.901 16.1673 330.229 16.266 330.558 16.3975C330.558 16.0029 330.427 15.7728 330.164 15.707C329.966 15.6413 329.901 15.3783 329.966 14.918C330.953 14.6549 331.807 14.359 332.531 14.0303C333.254 13.6357 334.043 13.2741 334.898 12.9453C335.49 13.5371 336.049 14.1618 336.575 14.8193C337.101 15.4111 337.824 15.7728 338.745 15.9043C339.073 16.6276 339.468 17.1865 339.928 17.5811C340.389 17.9098 340.849 18.2386 341.309 18.5674C341.769 18.8962 342.164 19.2907 342.493 19.751C342.887 20.2113 343.117 20.9346 343.183 21.9209C342.92 22.3812 342.624 22.8743 342.295 23.4004C342.032 23.9264 341.769 24.5511 341.506 25.2744C340.191 26.458 338.843 27.5101 337.462 28.4307C336.147 29.3512 334.799 30.2389 333.418 31.0938C332.038 31.9486 330.624 32.8034 329.177 33.6582C327.731 34.513 326.251 35.5322 324.739 36.7158C324.41 37.1761 323.983 37.6035 323.457 37.998C322.996 38.3268 322.503 38.6885 321.977 39.083C321.451 39.4118 320.958 39.7734 320.498 40.168C320.037 40.5625 319.676 41.0228 319.413 41.5488C319.215 41.6146 319.018 41.6475 318.821 41.6475C318.624 41.6475 318.426 41.6803 318.229 41.7461C318.032 42.2064 317.703 42.568 317.243 42.8311C316.848 43.0941 316.585 43.4557 316.454 43.916C317.44 46.0202 318.722 47.6312 320.3 48.749C321.878 49.8669 323.654 50.6888 325.626 51.2148C327.599 51.6751 329.736 51.9382 332.038 52.0039C334.339 52.0039 336.739 52.0039 339.238 52.0039C339.501 51.9382 339.599 51.8066 339.534 51.6094C339.534 51.3464 339.698 51.2477 340.027 51.3135C341.605 51.8395 342.821 52.5957 343.676 53.582C344.531 54.5026 345.55 55.4232 346.734 56.3438C346.602 58.8424 345.846 60.9137 344.465 62.5576C343.084 64.2015 341.243 65.5166 338.942 66.5029Z" fill="#E5E5E5"/>
|
||||
<path d="M365.573 63.1494C365.902 65.1221 365.77 66.6673 365.178 67.7852C364.652 68.903 363.863 69.7249 362.811 70.251C361.825 70.8428 360.674 71.1716 359.359 71.2373C358.044 71.3031 356.794 71.2373 355.611 71.04C354.953 70.1195 354.361 68.9688 353.835 67.5879C353.309 66.207 352.816 64.7933 352.356 63.3467C351.896 61.8343 351.468 60.3548 351.074 58.9082C350.745 57.4616 350.449 56.1794 350.186 55.0615C350.515 54.2725 350.712 53.3848 350.778 52.3984C350.909 51.3464 350.975 50.2943 350.975 49.2422C351.041 48.1901 351.074 47.138 351.074 46.0859C351.139 44.9681 351.238 43.916 351.37 42.9297C351.83 40.168 352.487 37.5378 353.342 35.0391C354.263 32.5404 354.986 29.943 355.512 27.2471C355.644 26.6553 355.578 26.0964 355.315 25.5703C355.118 25.0443 355.085 24.5511 355.216 24.0908C355.282 23.8278 355.479 23.6634 355.808 23.5977C356.137 23.4661 356.334 23.236 356.4 22.9072C356.597 22.1839 356.63 21.5921 356.499 21.1318C356.433 20.6715 356.564 20.1126 356.893 19.4551C357.222 18.929 357.616 18.1729 358.077 17.1865C358.603 16.1344 358.8 15.0495 358.668 13.9316C359.26 13.5371 359.819 13.0768 360.345 12.5508C360.871 12.0247 361.397 11.5645 361.923 11.1699C362.515 10.7096 363.14 10.3151 363.797 9.98633C364.521 9.65755 365.375 9.49316 366.362 9.49316C366.888 10.1507 367.217 10.874 367.348 11.6631C367.545 12.4521 367.71 13.2412 367.841 14.0303C368.039 14.8193 368.302 15.5755 368.63 16.2988C368.959 16.9564 369.518 17.4824 370.307 17.877C370.307 18.403 370.307 19.0605 370.307 19.8496C370.307 20.6387 370.34 21.4277 370.406 22.2168C370.472 22.9401 370.603 23.6305 370.8 24.2881C371.063 24.8799 371.458 25.2744 371.984 25.4717C370.8 28.6279 369.682 31.7513 368.63 34.8418C367.644 37.9323 366.822 41.0557 366.165 44.2119C365.507 47.3024 365.08 50.4258 364.882 53.582C364.751 56.7383 364.981 59.9274 365.573 63.1494Z" fill="#E5E5E5"/>
|
||||
<rect x="144.77" width="15" height="80" rx="4" fill="#00FFA3"/>
|
||||
</svg>
|
After Width: | Height: | Size: 15 KiB |
BIN
doc/splash.png
Normal file
After Width: | Height: | Size: 9.5 KiB |
BIN
doc/todos.png
Before Width: | Height: | Size: 249 KiB After Width: | Height: | Size: 360 KiB |
1422
doc/vimwiki.txt
BIN
doc/wiki.png
Before Width: | Height: | Size: 305 KiB After Width: | Height: | Size: 466 KiB |
@ -2,7 +2,7 @@
|
||||
" Vimwiki filetype plugin file
|
||||
" Home: https://github.com/vimwiki/vimwiki/
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
if exists('b:did_ftplugin')
|
||||
finish
|
||||
endif
|
||||
let b:did_ftplugin = 1 " Don't load another plugin for this buffer
|
||||
@ -11,7 +11,7 @@ let b:did_ftplugin = 1 " Don't load another plugin for this buffer
|
||||
|
||||
setlocal commentstring=%%%s
|
||||
|
||||
if vimwiki#vars#get_global('conceallevel') && exists("+conceallevel")
|
||||
if vimwiki#vars#get_global('conceallevel') && exists('+conceallevel')
|
||||
let &l:conceallevel = vimwiki#vars#get_global('conceallevel')
|
||||
endif
|
||||
|
||||
@ -19,11 +19,11 @@ endif
|
||||
execute 'setlocal suffixesadd='.vimwiki#vars#get_wikilocal('ext')
|
||||
setlocal isfname-=[,]
|
||||
|
||||
exe "setlocal tags+=" . escape(vimwiki#tags#metadata_file_path(), ' \|"')
|
||||
exe 'setlocal tags+=' . escape(vimwiki#tags#metadata_file_path(), ' \|"')
|
||||
|
||||
|
||||
|
||||
function! Complete_wikifiles(findstart, base)
|
||||
function! Complete_wikifiles(findstart, base) abort
|
||||
if a:findstart == 1
|
||||
let column = col('.')-2
|
||||
let line = getline('.')[:column]
|
||||
@ -50,14 +50,14 @@ function! Complete_wikifiles(findstart, base)
|
||||
" Completion works for wikilinks/anchors, and for tags. s:line_content
|
||||
" tells us which string came before a:base. There seems to be no easier
|
||||
" solution, because calling col('.') here returns garbage.
|
||||
if s:line_context == ''
|
||||
if s:line_context ==? ''
|
||||
return []
|
||||
elseif s:line_context == ':'
|
||||
elseif s:line_context ==# ':'
|
||||
" Tags completion
|
||||
let tags = vimwiki#tags#get_tags()
|
||||
if a:base != ''
|
||||
if a:base !=? ''
|
||||
call filter(tags,
|
||||
\ "v:val[:" . (len(a:base)-1) . "] == '" . substitute(a:base, "'", "''", '') . "'" )
|
||||
\ 'v:val[:' . (len(a:base)-1) . "] == '" . substitute(a:base, "'", "''", '') . "'" )
|
||||
endif
|
||||
return tags
|
||||
elseif a:base !~# '#'
|
||||
@ -80,7 +80,7 @@ function! Complete_wikifiles(findstart, base)
|
||||
let scheme = ''
|
||||
endif
|
||||
|
||||
let links = vimwiki#base#get_wikilinks(wikinumber, 1)
|
||||
let links = vimwiki#base#get_wikilinks(wikinumber, 1, '')
|
||||
let result = []
|
||||
for wikifile in links
|
||||
if wikifile =~ '^'.vimwiki#u#escape(prefix)
|
||||
@ -93,7 +93,7 @@ function! Complete_wikifiles(findstart, base)
|
||||
" we look for anchors in the given wikifile
|
||||
|
||||
let segments = split(a:base, '#', 1)
|
||||
let given_wikifile = segments[0] == '' ? expand('%:t:r') : segments[0]
|
||||
let given_wikifile = segments[0] ==? '' ? expand('%:t:r') : segments[0]
|
||||
let link_infos = vimwiki#base#resolve_link(given_wikifile.'#')
|
||||
let wikifile = link_infos.filename
|
||||
let syntax = vimwiki#vars#get_wikilocal('syntax', link_infos.index)
|
||||
@ -129,35 +129,21 @@ setlocal formatoptions+=n
|
||||
|
||||
let &formatlistpat = vimwiki#vars#get_syntaxlocal('rxListItem')
|
||||
|
||||
if !empty(&langmap)
|
||||
" Valid only if langmap is a comma separated pairs of chars
|
||||
let s:l_o = matchstr(&langmap, '\C,\zs.\zeo,')
|
||||
if s:l_o
|
||||
exe 'nnoremap <silent> <buffer> '.s:l_o.' :call vimwiki#lst#kbd_o()<CR>a'
|
||||
endif
|
||||
|
||||
let s:l_O = matchstr(&langmap, '\C,\zs.\zeO,')
|
||||
if s:l_O
|
||||
exe 'nnoremap <silent> <buffer> '.s:l_O.' :call vimwiki#lst#kbd_O()<CR>a'
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
|
||||
" ------------------------------------------------
|
||||
" Folding stuff
|
||||
" ------------------------------------------------
|
||||
|
||||
function! VimwikiFoldListLevel(lnum)
|
||||
function! VimwikiFoldListLevel(lnum) abort
|
||||
return vimwiki#lst#fold_level(a:lnum)
|
||||
endfunction
|
||||
|
||||
|
||||
function! VimwikiFoldLevel(lnum)
|
||||
function! VimwikiFoldLevel(lnum) abort
|
||||
let line = getline(a:lnum)
|
||||
|
||||
" Header/section folding...
|
||||
if line =~# vimwiki#vars#get_syntaxlocal('rxHeader')
|
||||
if line =~# vimwiki#vars#get_syntaxlocal('rxHeader') && !vimwiki#u#is_codeblock(a:lnum)
|
||||
return '>'.vimwiki#u#count_first_sym(line)
|
||||
" Code block folding...
|
||||
elseif line =~# vimwiki#vars#get_syntaxlocal('rxPreStart')
|
||||
@ -165,21 +151,21 @@ function! VimwikiFoldLevel(lnum)
|
||||
elseif line =~# vimwiki#vars#get_syntaxlocal('rxPreEnd')
|
||||
return 's1'
|
||||
else
|
||||
return "="
|
||||
return '='
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
" Constants used by VimwikiFoldText
|
||||
" use \u2026 and \u21b2 (or \u2424) if enc=utf-8 to save screen space
|
||||
let s:ellipsis = (&enc ==? 'utf-8') ? "\u2026" : "..."
|
||||
let s:ellipsis = (&encoding ==? 'utf-8') ? "\u2026" : '...'
|
||||
let s:ell_len = strlen(s:ellipsis)
|
||||
let s:newline = (&enc ==? 'utf-8') ? "\u21b2 " : " "
|
||||
let s:newline = (&encoding ==? 'utf-8') ? "\u21b2 " : ' '
|
||||
let s:tolerance = 5
|
||||
|
||||
|
||||
" unused
|
||||
function! s:shorten_text_simple(text, len)
|
||||
function! s:shorten_text_simple(text, len) abort
|
||||
let spare_len = a:len - len(a:text)
|
||||
return (spare_len>=0) ? [a:text,spare_len] : [a:text[0:a:len].s:ellipsis, -1]
|
||||
endfunction
|
||||
@ -188,7 +174,7 @@ endfunction
|
||||
" s:shorten_text(text, len) = [string, spare] with "spare" = len-strlen(string)
|
||||
" for long enough "text", the string's length is within s:tolerance of "len"
|
||||
" (so that -s:tolerance <= spare <= s:tolerance, "string" ends with s:ellipsis)
|
||||
function! s:shorten_text(text, len)
|
||||
function! s:shorten_text(text, len) abort
|
||||
" returns [string, spare]
|
||||
" strlen() returns lenght in bytes, not in characters, so we'll have to do a
|
||||
" trick here -- replace all non-spaces with dot, calculate lengths and
|
||||
@ -206,7 +192,7 @@ function! s:shorten_text(text, len)
|
||||
endfunction
|
||||
|
||||
|
||||
function! VimwikiFoldText()
|
||||
function! VimwikiFoldText() abort
|
||||
let line = getline(v:foldstart)
|
||||
let main_text = substitute(line, '^\s*', repeat(' ',indent(v:foldstart)), '')
|
||||
let fold_len = v:foldend - v:foldstart + 1
|
||||
@ -248,15 +234,22 @@ command! -buffer Vimwiki2HTMLBrowse
|
||||
\ call vimwiki#base#system_open_link(vimwiki#html#Wiki2HTML(
|
||||
\ expand(vimwiki#vars#get_wikilocal('path_html')),
|
||||
\ expand('%')))
|
||||
command! -buffer VimwikiAll2HTML
|
||||
\ call vimwiki#html#WikiAll2HTML(expand(vimwiki#vars#get_wikilocal('path_html')))
|
||||
command! -buffer -bang VimwikiAll2HTML
|
||||
\ call vimwiki#html#WikiAll2HTML(expand(vimwiki#vars#get_wikilocal('path_html')), <bang>0)
|
||||
|
||||
command! -buffer VimwikiTOC call vimwiki#base#table_of_contents(1)
|
||||
|
||||
command! -buffer VimwikiNextTask call vimwiki#base#find_next_task()
|
||||
command! -buffer VimwikiNextLink call vimwiki#base#find_next_link()
|
||||
command! -buffer VimwikiPrevLink call vimwiki#base#find_prev_link()
|
||||
command! -buffer VimwikiDeleteLink call vimwiki#base#delete_link()
|
||||
command! -buffer VimwikiRenameLink call vimwiki#base#rename_link()
|
||||
command! -buffer VimwikiDeleteFile call vimwiki#base#delete_link()
|
||||
command! -buffer VimwikiDeleteLink
|
||||
\ call vimwiki#base#deprecate("VimwikiDeleteLink", "VimwikiDeleteFile") |
|
||||
\ call vimwiki#base#delete_link()
|
||||
command! -buffer VimwikiRenameFile call vimwiki#base#rename_link()
|
||||
command! -buffer VimwikiRenameLink
|
||||
\ call vimwiki#base#deprecate("VimwikiRenameLink", "VimwikiRenameFile") |
|
||||
\ call vimwiki#base#rename_link()
|
||||
command! -buffer VimwikiFollowLink call vimwiki#base#follow_link('nosplit', 0, 1)
|
||||
command! -buffer VimwikiGoBackLink call vimwiki#base#go_back_link()
|
||||
command! -buffer -nargs=* VimwikiSplitLink call vimwiki#base#follow_link('hsplit', <f-args>)
|
||||
@ -266,18 +259,15 @@ command! -buffer -nargs=? VimwikiNormalizeLink call vimwiki#base#normalize_link(
|
||||
|
||||
command! -buffer VimwikiTabnewLink call vimwiki#base#follow_link('tab', 0, 1)
|
||||
|
||||
command! -buffer VimwikiGenerateLinks call vimwiki#base#generate_links()
|
||||
command! -buffer -nargs=? VimwikiGenerateLinks call vimwiki#base#generate_links(1, <f-args>)
|
||||
|
||||
command! -buffer -nargs=0 VimwikiBacklinks call vimwiki#base#backlinks()
|
||||
command! -buffer -nargs=0 VWB call vimwiki#base#backlinks()
|
||||
|
||||
exe 'command! -buffer -nargs=* VimwikiSearch lvimgrep <args> '.
|
||||
\ escape(vimwiki#vars#get_wikilocal('path').'**/*'.vimwiki#vars#get_wikilocal('ext'), ' ')
|
||||
command! -buffer -nargs=* VimwikiSearch call vimwiki#base#search(<q-args>)
|
||||
command! -buffer -nargs=* VWS call vimwiki#base#search(<q-args>)
|
||||
|
||||
exe 'command! -buffer -nargs=* VWS lvimgrep <args> '.
|
||||
\ escape(vimwiki#vars#get_wikilocal('path').'**/*'.vimwiki#vars#get_wikilocal('ext'), ' ')
|
||||
|
||||
command! -buffer -nargs=+ -complete=custom,vimwiki#base#complete_links_escaped
|
||||
command! -buffer -nargs=* -complete=customlist,vimwiki#base#complete_links_escaped
|
||||
\ VimwikiGoto call vimwiki#base#goto(<f-args>)
|
||||
|
||||
command! -buffer VimwikiCheckLinks call vimwiki#base#check_links()
|
||||
@ -305,8 +295,8 @@ command! -buffer VimwikiListToggle call vimwiki#lst#toggle_list_item()
|
||||
|
||||
" table commands
|
||||
command! -buffer -nargs=* VimwikiTable call vimwiki#tbl#create(<f-args>)
|
||||
command! -buffer VimwikiTableAlignQ call vimwiki#tbl#align_or_cmd('gqq')
|
||||
command! -buffer VimwikiTableAlignW call vimwiki#tbl#align_or_cmd('gww')
|
||||
command! -buffer -nargs=? VimwikiTableAlignQ call vimwiki#tbl#align_or_cmd('gqq', <f-args>)
|
||||
command! -buffer -nargs=? VimwikiTableAlignW call vimwiki#tbl#align_or_cmd('gww', <f-args>)
|
||||
command! -buffer VimwikiTableMoveColumnLeft call vimwiki#tbl#move_column_left()
|
||||
command! -buffer VimwikiTableMoveColumnRight call vimwiki#tbl#move_column_right()
|
||||
|
||||
@ -319,7 +309,11 @@ command! -buffer -bang VimwikiRebuildTags call vimwiki#tags#update_tags(1, '<ban
|
||||
command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags
|
||||
\ VimwikiSearchTags VimwikiSearch /:<args>:/
|
||||
command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags
|
||||
\ VimwikiGenerateTags call vimwiki#tags#generate_tags(<f-args>)
|
||||
\ VimwikiGenerateTagLinks call vimwiki#tags#generate_tags(1, <f-args>)
|
||||
command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags
|
||||
\ VimwikiGenerateTags
|
||||
\ call vimwiki#base#deprecate("VimwikiGenerateTags", "VimwikiGenerateTagLinks") |
|
||||
\ call vimwiki#tags#generate_tags(1, <f-args>)
|
||||
|
||||
command! -buffer VimwikiPasteUrl call vimwiki#html#PasteUrl(expand('%:p'))
|
||||
command! -buffer VimwikiCatUrl call vimwiki#html#CatUrl(expand('%:p'))
|
||||
@ -329,7 +323,8 @@ command! -buffer VimwikiCatUrl call vimwiki#html#CatUrl(expand('%:p'))
|
||||
" Keybindings
|
||||
" ------------------------------------------------
|
||||
|
||||
if vimwiki#vars#get_global('use_mouse')
|
||||
" mouse mappings
|
||||
if str2nr(vimwiki#vars#get_global('key_mappings').mouse)
|
||||
nmap <buffer> <S-LeftMouse> <NOP>
|
||||
nmap <buffer> <C-LeftMouse> <NOP>
|
||||
nnoremap <silent><buffer> <2-LeftMouse>
|
||||
@ -339,339 +334,333 @@ if vimwiki#vars#get_global('use_mouse')
|
||||
nnoremap <silent><buffer> <RightMouse><LeftMouse> :VimwikiGoBackLink<CR>
|
||||
endif
|
||||
|
||||
|
||||
if !hasmapto('<Plug>Vimwiki2HTML')
|
||||
exe 'nmap <buffer> '.vimwiki#vars#get_global('map_prefix').'h <Plug>Vimwiki2HTML'
|
||||
endif
|
||||
" <Plug> HTML definitions
|
||||
nnoremap <script><buffer> <Plug>Vimwiki2HTML :Vimwiki2HTML<CR>
|
||||
|
||||
if !hasmapto('<Plug>Vimwiki2HTMLBrowse')
|
||||
exe 'nmap <buffer> '.vimwiki#vars#get_global('map_prefix').'hh <Plug>Vimwiki2HTMLBrowse'
|
||||
endif
|
||||
nnoremap <script><buffer> <Plug>Vimwiki2HTMLBrowse :Vimwiki2HTMLBrowse<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiFollowLink')
|
||||
nmap <silent><buffer> <CR> <Plug>VimwikiFollowLink
|
||||
" default HTML key mappings
|
||||
if str2nr(vimwiki#vars#get_global('key_mappings').html)
|
||||
call vimwiki#u#map_key('n', vimwiki#vars#get_global('map_prefix').'h', '<Plug>Vimwiki2HTML')
|
||||
call vimwiki#u#map_key('n', vimwiki#vars#get_global('map_prefix').'hh', '<Plug>Vimwiki2HTMLBrowse')
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiFollowLink :VimwikiFollowLink<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiSplitLink')
|
||||
nmap <silent><buffer> <S-CR> <Plug>VimwikiSplitLink
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiSplitLink :VimwikiSplitLink<CR>
|
||||
" <Plug> links definitions
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiFollowLink
|
||||
\ :VimwikiFollowLink<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiSplitLink
|
||||
\ :VimwikiSplitLink<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiVSplitLink
|
||||
\ :VimwikiVSplitLink<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLink
|
||||
\ :VimwikiNormalizeLink 0<CR>
|
||||
vnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLinkVisual
|
||||
\ :<C-U>VimwikiNormalizeLink 1<CR>
|
||||
vnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLinkVisualCR
|
||||
\ :<C-U>VimwikiNormalizeLink 1<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiTabnewLink
|
||||
\ :VimwikiTabnewLink<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiGoBackLink
|
||||
\ :VimwikiGoBackLink<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiNextLink
|
||||
\ :VimwikiNextLink<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiPrevLink
|
||||
\ :VimwikiPrevLink<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiGoto
|
||||
\ :VimwikiGoto<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiDeleteFile
|
||||
\ :VimwikiDeleteFile<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiRenameFile
|
||||
\ :VimwikiRenameFile<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiDiaryNextDay
|
||||
\ :VimwikiDiaryNextDay<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiDiaryPrevDay
|
||||
\ :VimwikiDiaryPrevDay<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiVSplitLink')
|
||||
nmap <silent><buffer> <C-CR> <Plug>VimwikiVSplitLink
|
||||
" default links key mappings
|
||||
if str2nr(vimwiki#vars#get_global('key_mappings').links)
|
||||
call vimwiki#u#map_key('n', '<CR>', '<Plug>VimwikiFollowLink')
|
||||
call vimwiki#u#map_key('n', '<S-CR>', '<Plug>VimwikiSplitLink')
|
||||
call vimwiki#u#map_key('n', '<C-CR>', '<Plug>VimwikiVSplitLink')
|
||||
call vimwiki#u#map_key('n', '+', '<Plug>VimwikiNormalizeLink')
|
||||
call vimwiki#u#map_key('v', '+', '<Plug>VimwikiNormalizeLinkVisual')
|
||||
call vimwiki#u#map_key('v', '<CR>', '<Plug>VimwikiNormalizeLinkVisualCR')
|
||||
call vimwiki#u#map_key('n', '<D-CR>', '<Plug>VimwikiTabnewLink')
|
||||
call vimwiki#u#map_key('n', '<C-S-CR>', '<Plug>VimwikiTabnewLink', 1)
|
||||
call vimwiki#u#map_key('n', '<BS>', '<Plug>VimwikiGoBackLink')
|
||||
call vimwiki#u#map_key('n', '<TAB>', '<Plug>VimwikiNextLink')
|
||||
call vimwiki#u#map_key('n', '<S-TAB>', '<Plug>VimwikiPrevLink')
|
||||
call vimwiki#u#map_key('n', vimwiki#vars#get_global('map_prefix').'n', '<Plug>VimwikiGoto')
|
||||
call vimwiki#u#map_key('n', vimwiki#vars#get_global('map_prefix').'d', '<Plug>VimwikiDeleteFile')
|
||||
call vimwiki#u#map_key('n', vimwiki#vars#get_global('map_prefix').'r', '<Plug>VimwikiRenameFile')
|
||||
call vimwiki#u#map_key('n', '<C-Down>', '<Plug>VimwikiDiaryNextDay')
|
||||
call vimwiki#u#map_key('n', '<C-Up>', '<Plug>VimwikiDiaryPrevDay')
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiVSplitLink :VimwikiVSplitLink<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiNormalizeLink')
|
||||
nmap <silent><buffer> + <Plug>VimwikiNormalizeLink
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLink :VimwikiNormalizeLink 0<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiNormalizeLinkVisual')
|
||||
vmap <silent><buffer> + <Plug>VimwikiNormalizeLinkVisual
|
||||
endif
|
||||
vnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLinkVisual :<C-U>VimwikiNormalizeLink 1<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiNormalizeLinkVisualCR')
|
||||
vmap <silent><buffer> <CR> <Plug>VimwikiNormalizeLinkVisualCR
|
||||
endif
|
||||
vnoremap <silent><script><buffer>
|
||||
\ <Plug>VimwikiNormalizeLinkVisualCR :<C-U>VimwikiNormalizeLink 1<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiTabnewLink')
|
||||
nmap <silent><buffer> <D-CR> <Plug>VimwikiTabnewLink
|
||||
nmap <silent><buffer> <C-S-CR> <Plug>VimwikiTabnewLink
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiTabnewLink :VimwikiTabnewLink<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiGoBackLink')
|
||||
nmap <silent><buffer> <BS> <Plug>VimwikiGoBackLink
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiGoBackLink :VimwikiGoBackLink<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiNextLink')
|
||||
nmap <silent><buffer> <TAB> <Plug>VimwikiNextLink
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiNextLink :VimwikiNextLink<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiPrevLink')
|
||||
nmap <silent><buffer> <S-TAB> <Plug>VimwikiPrevLink
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiPrevLink :VimwikiPrevLink<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiDeleteLink')
|
||||
exe 'nmap <silent><buffer> '.vimwiki#vars#get_global('map_prefix').'d <Plug>VimwikiDeleteLink'
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiDeleteLink :VimwikiDeleteLink<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiRenameLink')
|
||||
exe 'nmap <silent><buffer> '.vimwiki#vars#get_global('map_prefix').'r <Plug>VimwikiRenameLink'
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiRenameLink :VimwikiRenameLink<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiDiaryNextDay')
|
||||
nmap <silent><buffer> <C-Down> <Plug>VimwikiDiaryNextDay
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiDiaryNextDay :VimwikiDiaryNextDay<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiDiaryPrevDay')
|
||||
nmap <silent><buffer> <C-Up> <Plug>VimwikiDiaryPrevDay
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiDiaryPrevDay :VimwikiDiaryPrevDay<CR>
|
||||
|
||||
" List mappings
|
||||
if !hasmapto('<Plug>VimwikiToggleListItem')
|
||||
nmap <silent><buffer> <C-Space> <Plug>VimwikiToggleListItem
|
||||
vmap <silent><buffer> <C-Space> <Plug>VimwikiToggleListItem
|
||||
if has("unix")
|
||||
nmap <silent><buffer> <C-@> <Plug>VimwikiToggleListItem
|
||||
vmap <silent><buffer> <C-@> <Plug>VimwikiToggleListItem
|
||||
endif
|
||||
endif
|
||||
if !hasmapto('<Plug>VimwikiToggleRejectedListItem')
|
||||
nmap <silent><buffer> glx <Plug>VimwikiToggleRejectedListItem
|
||||
vmap <silent><buffer> glx <Plug>VimwikiToggleRejectedListItem
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiToggleListItem :VimwikiToggleListItem<CR>
|
||||
vnoremap <silent><script><buffer> <Plug>VimwikiToggleListItem :VimwikiToggleListItem<CR>
|
||||
nnoremap <silent><script><buffer>
|
||||
\ <Plug>VimwikiToggleRejectedListItem :VimwikiToggleRejectedListItem<CR>
|
||||
vnoremap <silent><script><buffer>
|
||||
\ <Plug>VimwikiToggleRejectedListItem :VimwikiToggleRejectedListItem<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiIncrementListItem')
|
||||
nmap <silent><buffer> gln <Plug>VimwikiIncrementListItem
|
||||
vmap <silent><buffer> gln <Plug>VimwikiIncrementListItem
|
||||
endif
|
||||
if !hasmapto('<Plug>VimwikiDecrementListItem')
|
||||
nmap <silent><buffer> glp <Plug>VimwikiDecrementListItem
|
||||
vmap <silent><buffer> glp <Plug>VimwikiDecrementListItem
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiIncrementListItem :VimwikiIncrementListItem<CR>
|
||||
vnoremap <silent><script><buffer> <Plug>VimwikiIncrementListItem :VimwikiIncrementListItem<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiDecrementListItem :VimwikiDecrementListItem<CR>
|
||||
vnoremap <silent><script><buffer> <Plug>VimwikiDecrementListItem :VimwikiDecrementListItem<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiDecreaseLvlSingleItem', 'i')
|
||||
imap <silent><buffer> <C-D> <Plug>VimwikiDecreaseLvlSingleItem
|
||||
endif
|
||||
" <Plug> lists definitions
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiNextTask
|
||||
\ :VimwikiNextTask<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiToggleListItem
|
||||
\ :VimwikiToggleListItem<CR>
|
||||
vnoremap <silent><script><buffer> <Plug>VimwikiToggleListItem
|
||||
\ :VimwikiToggleListItem<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiToggleRejectedListItem
|
||||
\ :VimwikiToggleRejectedListItem<CR>
|
||||
vnoremap <silent><script><buffer> <Plug>VimwikiToggleRejectedListItem
|
||||
\ :VimwikiToggleRejectedListItem<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiIncrementListItem
|
||||
\ :VimwikiIncrementListItem<CR>
|
||||
vnoremap <silent><script><buffer> <Plug>VimwikiIncrementListItem
|
||||
\ :VimwikiIncrementListItem<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiDecrementListItem
|
||||
\ :VimwikiDecrementListItem<CR>
|
||||
vnoremap <silent><script><buffer> <Plug>VimwikiDecrementListItem
|
||||
\ :VimwikiDecrementListItem<CR>
|
||||
inoremap <silent><script><buffer> <Plug>VimwikiDecreaseLvlSingleItem
|
||||
\ <C-O>:VimwikiListChangeLvl decrease 0<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiIncreaseLvlSingleItem', 'i')
|
||||
imap <silent><buffer> <C-T> <Plug>VimwikiIncreaseLvlSingleItem
|
||||
endif
|
||||
inoremap <silent><script><buffer> <Plug>VimwikiIncreaseLvlSingleItem
|
||||
\ <C-O>:VimwikiListChangeLvl increase 0<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiListNextSymbol', 'i')
|
||||
imap <silent><buffer> <C-L><C-J> <Plug>VimwikiListNextSymbol
|
||||
endif
|
||||
inoremap <silent><script><buffer> <Plug>VimwikiListNextSymbol
|
||||
\ <C-O>:VimwikiListChangeSymbolI next<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiListPrevSymbol', 'i')
|
||||
imap <silent><buffer> <C-L><C-K> <Plug>VimwikiListPrevSymbol
|
||||
endif
|
||||
inoremap <silent><script><buffer> <Plug>VimwikiListPrevSymbol
|
||||
\ <C-O>:VimwikiListChangeSymbolI prev<CR>
|
||||
inoremap <silent><script><buffer> <Plug>VimwikiListToggle
|
||||
\ <Esc>:VimwikiListToggle<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiRenumberList
|
||||
\ :VimwikiRenumberList<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiRenumberAllLists
|
||||
\ :VimwikiRenumberAllLists<CR>
|
||||
noremap <silent><script><buffer> <Plug>VimwikiDecreaseLvlSingleItem
|
||||
\ :VimwikiListChangeLvl decrease 0<CR>
|
||||
noremap <silent><script><buffer> <Plug>VimwikiIncreaseLvlSingleItem
|
||||
\ :VimwikiListChangeLvl increase 0<CR>
|
||||
noremap <silent><script><buffer> <Plug>VimwikiDecreaseLvlWholeItem
|
||||
\ :VimwikiListChangeLvl decrease 1<CR>
|
||||
noremap <silent><script><buffer> <Plug>VimwikiIncreaseLvlWholeItem
|
||||
\ :VimwikiListChangeLvl increase 1<CR>
|
||||
noremap <silent><script><buffer> <Plug>VimwikiRemoveSingleCB
|
||||
\ :VimwikiRemoveSingleCB<CR>
|
||||
noremap <silent><script><buffer> <Plug>VimwikiRemoveCBInList
|
||||
\ :VimwikiRemoveCBInList<CR>
|
||||
nnoremap <silent><buffer> <Plug>VimwikiListo
|
||||
\ :<C-U>call vimwiki#u#count_exe('call vimwiki#lst#kbd_o()')<CR>
|
||||
nnoremap <silent><buffer> <Plug>VimwikiListO
|
||||
\ :<C-U>call vimwiki#u#count_exe('call vimwiki#lst#kbd_O()')<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiListToggle', 'i')
|
||||
imap <silent><buffer> <C-L><C-M> <Plug>VimwikiListToggle
|
||||
endif
|
||||
inoremap <silent><script><buffer> <Plug>VimwikiListToggle <Esc>:VimwikiListToggle<CR>
|
||||
" default lists key mappings
|
||||
if str2nr(vimwiki#vars#get_global('key_mappings').lists)
|
||||
call vimwiki#u#map_key('n', 'gnt', '<Plug>VimwikiNextTask')
|
||||
call vimwiki#u#map_key('n', '<C-Space>', '<Plug>VimwikiToggleListItem')
|
||||
call vimwiki#u#map_key('v', '<C-Space>', '<Plug>VimwikiToggleListItem', 1)
|
||||
if has('unix')
|
||||
call vimwiki#u#map_key('n', '<C-@>', '<Plug>VimwikiToggleListItem', 1)
|
||||
call vimwiki#u#map_key('v', '<C-@>', '<Plug>VimwikiToggleListItem', 1)
|
||||
endif
|
||||
call vimwiki#u#map_key('n', 'glx', '<Plug>VimwikiToggleRejectedListItem')
|
||||
call vimwiki#u#map_key('v', 'glx', '<Plug>VimwikiToggleRejectedListItem', 1)
|
||||
call vimwiki#u#map_key('n', 'gln', '<Plug>VimwikiIncrementListItem')
|
||||
call vimwiki#u#map_key('v', 'gln', '<Plug>VimwikiIncrementListItem', 1)
|
||||
call vimwiki#u#map_key('n', 'glp', '<Plug>VimwikiDecrementListItem')
|
||||
call vimwiki#u#map_key('v', 'glp', '<Plug>VimwikiDecrementListItem', 1)
|
||||
call vimwiki#u#map_key('i', '<C-D>', '<Plug>VimwikiDecreaseLvlSingleItem')
|
||||
call vimwiki#u#map_key('i', '<C-T>', '<Plug>VimwikiIncreaseLvlSingleItem')
|
||||
call vimwiki#u#map_key('n', 'glh', '<Plug>VimwikiDecreaseLvlSingleItem', 1)
|
||||
call vimwiki#u#map_key('n', 'gll', '<Plug>VimwikiIncreaseLvlSingleItem', 1)
|
||||
call vimwiki#u#map_key('n', 'gLh', '<Plug>VimwikiDecreaseLvlWholeItem')
|
||||
call vimwiki#u#map_key('n', 'gLH', '<Plug>VimwikiDecreaseLvlWholeItem', 1)
|
||||
call vimwiki#u#map_key('n', 'gLl', '<Plug>VimwikiIncreaseLvlWholeItem')
|
||||
call vimwiki#u#map_key('n', 'gLL', '<Plug>VimwikiIncreaseLvlWholeItem', 1)
|
||||
call vimwiki#u#map_key('i', '<C-L><C-J>', '<Plug>VimwikiListNextSymbol')
|
||||
call vimwiki#u#map_key('i', '<C-L><C-K>', '<Plug>VimwikiListPrevSymbol')
|
||||
call vimwiki#u#map_key('i', '<C-L><C-M>', '<Plug>VimwikiListToggle')
|
||||
call vimwiki#u#map_key('n', 'glr', '<Plug>VimwikiRenumberList')
|
||||
call vimwiki#u#map_key('n', 'gLr', '<Plug>VimwikiRenumberAllLists')
|
||||
call vimwiki#u#map_key('n', 'gLR', '<Plug>VimwikiRenumberAllLists', 1)
|
||||
call vimwiki#u#map_key('n', 'gl', '<Plug>VimwikiRemoveSingleCB')
|
||||
call vimwiki#u#map_key('n', 'gL', '<Plug>VimwikiRemoveCBInList')
|
||||
call vimwiki#u#map_key('n', 'o', '<Plug>VimwikiListo')
|
||||
call vimwiki#u#map_key('n', 'O', '<Plug>VimwikiListO')
|
||||
|
||||
nnoremap <silent> <buffer> o :<C-U>call vimwiki#lst#kbd_o()<CR>
|
||||
nnoremap <silent> <buffer> O :<C-U>call vimwiki#lst#kbd_O()<CR>
|
||||
" handle case of existing VimwikiReturn mappings outside the <Plug> definition
|
||||
if maparg('<CR>', 'i') !~# '.*VimwikiReturn*.'
|
||||
if has('patch-7.3.489')
|
||||
" expand iabbrev on enter
|
||||
inoremap <silent><buffer> <CR> <C-]><Esc>:VimwikiReturn 1 5<CR>
|
||||
else
|
||||
inoremap <silent><buffer> <CR> <Esc>:VimwikiReturn 1 5<CR>
|
||||
endif
|
||||
endif
|
||||
if maparg('<S-CR>', 'i') !~# '.*VimwikiReturn*.'
|
||||
inoremap <silent><buffer> <S-CR> <Esc>:VimwikiReturn 2 2<CR>
|
||||
endif
|
||||
|
||||
if !hasmapto('<Plug>VimwikiRenumberList')
|
||||
nmap <silent><buffer> glr <Plug>VimwikiRenumberList
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiRenumberList :VimwikiRenumberList<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiRenumberAllLists')
|
||||
nmap <silent><buffer> gLr <Plug>VimwikiRenumberAllLists
|
||||
nmap <silent><buffer> gLR <Plug>VimwikiRenumberAllLists
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiRenumberAllLists :VimwikiRenumberAllLists<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiDecreaseLvlSingleItem')
|
||||
map <silent><buffer> glh <Plug>VimwikiDecreaseLvlSingleItem
|
||||
endif
|
||||
noremap <silent><script><buffer>
|
||||
\ <Plug>VimwikiDecreaseLvlSingleItem :VimwikiListChangeLvl decrease 0<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiIncreaseLvlSingleItem')
|
||||
map <silent><buffer> gll <Plug>VimwikiIncreaseLvlSingleItem
|
||||
endif
|
||||
noremap <silent><script><buffer>
|
||||
\ <Plug>VimwikiIncreaseLvlSingleItem :VimwikiListChangeLvl increase 0<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiDecreaseLvlWholeItem')
|
||||
map <silent><buffer> gLh <Plug>VimwikiDecreaseLvlWholeItem
|
||||
map <silent><buffer> gLH <Plug>VimwikiDecreaseLvlWholeItem
|
||||
endif
|
||||
noremap <silent><script><buffer>
|
||||
\ <Plug>VimwikiDecreaseLvlWholeItem :VimwikiListChangeLvl decrease 1<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiIncreaseLvlWholeItem')
|
||||
map <silent><buffer> gLl <Plug>VimwikiIncreaseLvlWholeItem
|
||||
map <silent><buffer> gLL <Plug>VimwikiIncreaseLvlWholeItem
|
||||
endif
|
||||
noremap <silent><script><buffer>
|
||||
\ <Plug>VimwikiIncreaseLvlWholeItem :VimwikiListChangeLvl increase 1<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiRemoveSingleCB')
|
||||
map <silent><buffer> gl<Space> <Plug>VimwikiRemoveSingleCB
|
||||
endif
|
||||
noremap <silent><script><buffer> <Plug>VimwikiRemoveSingleCB :VimwikiRemoveSingleCB<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiRemoveCBInList')
|
||||
map <silent><buffer> gL<Space> <Plug>VimwikiRemoveCBInList
|
||||
endif
|
||||
noremap <silent><script><buffer> <Plug>VimwikiRemoveCBInList :VimwikiRemoveCBInList<CR>
|
||||
|
||||
for s:char in vimwiki#vars#get_syntaxlocal('bullet_types')
|
||||
" change symbol for bulleted lists
|
||||
for s:char in vimwiki#vars#get_syntaxlocal('bullet_types')
|
||||
if !hasmapto(':VimwikiChangeSymbolTo '.s:char.'<CR>')
|
||||
exe 'noremap <silent><buffer> gl'.s:char.' :VimwikiChangeSymbolTo '.s:char.'<CR>'
|
||||
endif
|
||||
if !hasmapto(':VimwikiChangeSymbolInListTo '.s:char.'<CR>')
|
||||
exe 'noremap <silent><buffer> gL'.s:char.' :VimwikiChangeSymbolInListTo '.s:char.'<CR>'
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
|
||||
for s:typ in vimwiki#vars#get_syntaxlocal('number_types')
|
||||
" change symbol for numbered lists
|
||||
for s:typ in vimwiki#vars#get_syntaxlocal('number_types')
|
||||
if !hasmapto(':VimwikiChangeSymbolTo '.s:typ.'<CR>')
|
||||
exe 'noremap <silent><buffer> gl'.s:typ[0].' :VimwikiChangeSymbolTo '.s:typ.'<CR>'
|
||||
endif
|
||||
if !hasmapto(':VimwikiChangeSymbolInListTo '.s:typ.'<CR>')
|
||||
exe 'noremap <silent><buffer> gL'.s:typ[0].' :VimwikiChangeSymbolInListTo '.s:typ.'<CR>'
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
|
||||
" insert items in a list using langmap characters (see :h langmap)
|
||||
if !empty(&langmap)
|
||||
" Valid only if langmap is a comma separated pairs of chars
|
||||
let s:l_o = matchstr(&langmap, '\C,\zs.\zeo,')
|
||||
if s:l_o
|
||||
exe 'nnoremap <silent><buffer> '.s:l_o.' :call vimwiki#lst#kbd_o()<CR>a'
|
||||
endif
|
||||
|
||||
function! s:CR(normal, just_mrkr)
|
||||
if vimwiki#vars#get_global('table_mappings')
|
||||
let s:l_O = matchstr(&langmap, '\C,\zs.\zeO,')
|
||||
if s:l_O
|
||||
exe 'nnoremap <silent><buffer> '.s:l_O.' :call vimwiki#lst#kbd_O()<CR>a'
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
function! s:CR(normal, just_mrkr) abort
|
||||
let res = vimwiki#tbl#kbd_cr()
|
||||
if res != ""
|
||||
exe "normal! " . res . "\<Right>"
|
||||
if res !=? ''
|
||||
exe 'normal! ' . res . "\<Right>"
|
||||
startinsert
|
||||
return
|
||||
endif
|
||||
endif
|
||||
call vimwiki#lst#kbd_cr(a:normal, a:just_mrkr)
|
||||
endfunction
|
||||
|
||||
if !hasmapto('VimwikiReturn', 'i')
|
||||
if maparg('<CR>', 'i') !~? '<Esc>:VimwikiReturn'
|
||||
inoremap <silent><buffer> <CR> <Esc>:VimwikiReturn 1 5<CR>
|
||||
endif
|
||||
if maparg('<S-CR>', 'i') !~? '<Esc>:VimwikiReturn'
|
||||
inoremap <silent><buffer> <S-CR> <Esc>:VimwikiReturn 2 2<CR>
|
||||
endif
|
||||
" insert mode table mappings
|
||||
if str2nr(vimwiki#vars#get_global('key_mappings').table_mappings)
|
||||
inoremap <expr><buffer> <Tab> vimwiki#tbl#kbd_tab()
|
||||
inoremap <expr><buffer> <S-Tab> vimwiki#tbl#kbd_shift_tab()
|
||||
endif
|
||||
|
||||
"Table mappings
|
||||
if vimwiki#vars#get_global('table_mappings')
|
||||
inoremap <expr> <buffer> <Tab> vimwiki#tbl#kbd_tab()
|
||||
inoremap <expr> <buffer> <S-Tab> vimwiki#tbl#kbd_shift_tab()
|
||||
endif
|
||||
" <Plug> table formatting definitions
|
||||
nnoremap <silent><buffer> <Plug>VimwikiTableAlignQ
|
||||
\ :VimwikiTableAlignQ<CR>
|
||||
nnoremap <silent><buffer> <Plug>VimwikiTableAlignQ1
|
||||
\ :VimwikiTableAlignQ 2<CR>
|
||||
nnoremap <silent><buffer> <Plug>VimwikiTableAlignW
|
||||
\ :VimwikiTableAlignW<CR>
|
||||
nnoremap <silent><buffer> <Plug>VimwikiTableAlignW1
|
||||
\ :VimwikiTableAlignW 2<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiTableMoveColumnLeft
|
||||
\ :VimwikiTableMoveColumnLeft<CR>
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiTableMoveColumnRight
|
||||
\ :VimwikiTableMoveColumnRight<CR>
|
||||
|
||||
|
||||
|
||||
nnoremap <buffer> gqq :VimwikiTableAlignQ<CR>
|
||||
nnoremap <buffer> gww :VimwikiTableAlignW<CR>
|
||||
if !hasmapto('<Plug>VimwikiTableMoveColumnLeft')
|
||||
nmap <silent><buffer> <A-Left> <Plug>VimwikiTableMoveColumnLeft
|
||||
" default table formatting key mappings
|
||||
if str2nr(vimwiki#vars#get_global('key_mappings').table_format)
|
||||
call vimwiki#u#map_key('n', 'gqq', '<Plug>VimwikiTableAlignQ')
|
||||
call vimwiki#u#map_key('n', 'gq1', '<Plug>VimwikiTableAlignQ1')
|
||||
call vimwiki#u#map_key('n', 'gww', '<Plug>VimwikiTableAlignW')
|
||||
call vimwiki#u#map_key('n', 'gw1', '<Plug>VimwikiTableAlignW1')
|
||||
call vimwiki#u#map_key('n', '<A-Left>', '<Plug>VimwikiTableMoveColumnLeft')
|
||||
call vimwiki#u#map_key('n', '<A-Right>', '<Plug>VimwikiTableMoveColumnRight')
|
||||
endif
|
||||
nnoremap <silent><script><buffer> <Plug>VimwikiTableMoveColumnLeft :VimwikiTableMoveColumnLeft<CR>
|
||||
if !hasmapto('<Plug>VimwikiTableMoveColumnRight')
|
||||
nmap <silent><buffer> <A-Right> <Plug>VimwikiTableMoveColumnRight
|
||||
|
||||
" <Plug> text object definitions
|
||||
onoremap <silent><buffer> <Plug>VimwikiTextObjHeader
|
||||
\ :<C-U>call vimwiki#base#TO_header(0, 0, v:count1)<CR>
|
||||
vnoremap <silent><buffer> <Plug>VimwikiTextObjHeaderV
|
||||
\ :<C-U>call vimwiki#base#TO_header(0, 0, v:count1)<CR>
|
||||
onoremap <silent><buffer> <Plug>VimwikiTextObjHeaderContent
|
||||
\ :<C-U>call vimwiki#base#TO_header(1, 0, v:count1)<CR>
|
||||
vnoremap <silent><buffer> <Plug>VimwikiTextObjHeaderContentV
|
||||
\ :<C-U>call vimwiki#base#TO_header(1, 0, v:count1)<CR>
|
||||
onoremap <silent><buffer> <Plug>VimwikiTextObjHeaderSub
|
||||
\ :<C-U>call vimwiki#base#TO_header(0, 1, v:count1)<CR>
|
||||
vnoremap <silent><buffer> <Plug>VimwikiTextObjHeaderSubV
|
||||
\ :<C-U>call vimwiki#base#TO_header(0, 1, v:count1)<CR>
|
||||
onoremap <silent><buffer> <Plug>VimwikiTextObjHeaderSubContent
|
||||
\ :<C-U>call vimwiki#base#TO_header(1, 1, v:count1)<CR>
|
||||
vnoremap <silent><buffer> <Plug>VimwikiTextObjHeaderSubContentV
|
||||
\ :<C-U>call vimwiki#base#TO_header(1, 1, v:count1)<CR>
|
||||
onoremap <silent><buffer> <Plug>VimwikiTextObjTableCell
|
||||
\ :<C-U>call vimwiki#base#TO_table_cell(0, 0)<CR>
|
||||
vnoremap <silent><buffer> <Plug>VimwikiTextObjTableCellV
|
||||
\ :<C-U>call vimwiki#base#TO_table_cell(0, 1)<CR>
|
||||
onoremap <silent><buffer> <Plug>VimwikiTextObjTableCellInner
|
||||
\ :<C-U>call vimwiki#base#TO_table_cell(1, 0)<CR>
|
||||
vnoremap <silent><buffer> <Plug>VimwikiTextObjTableCellInnerV
|
||||
\ :<C-U>call vimwiki#base#TO_table_cell(1, 1)<CR>
|
||||
onoremap <silent><buffer> <Plug>VimwikiTextObjColumn
|
||||
\ :<C-U>call vimwiki#base#TO_table_col(0, 0)<CR>
|
||||
vnoremap <silent><buffer> <Plug>VimwikiTextObjColumnV
|
||||
\ :<C-U>call vimwiki#base#TO_table_col(0, 1)<CR>
|
||||
onoremap <silent><buffer> <Plug>VimwikiTextObjColumnInner
|
||||
\ :<C-U>call vimwiki#base#TO_table_col(1, 0)<CR>
|
||||
vnoremap <silent><buffer> <Plug>VimwikiTextObjColumnInnerV
|
||||
\ :<C-U>call vimwiki#base#TO_table_col(1, 1)<CR>
|
||||
onoremap <silent><buffer> <Plug>VimwikiTextObjListChildren
|
||||
\ :<C-U>call vimwiki#lst#TO_list_item(0, 0)<CR>
|
||||
vnoremap <silent><buffer> <Plug>VimwikiTextObjListChildrenV
|
||||
\ :<C-U>call vimwiki#lst#TO_list_item(0, 1)<CR>
|
||||
onoremap <silent><buffer> <Plug>VimwikiTextObjListSingle
|
||||
\ :<C-U>call vimwiki#lst#TO_list_item(1, 0)<CR>
|
||||
vnoremap <silent><buffer> <Plug>VimwikiTextObjListSingleV
|
||||
\ :<C-U>call vimwiki#lst#TO_list_item(1, 1)<CR>
|
||||
|
||||
" default text object key mappings
|
||||
if str2nr(vimwiki#vars#get_global('key_mappings').text_objs)
|
||||
call vimwiki#u#map_key('o', 'ah', '<Plug>VimwikiTextObjHeader')
|
||||
call vimwiki#u#map_key('v', 'ah', '<Plug>VimwikiTextObjHeaderV')
|
||||
call vimwiki#u#map_key('o', 'ih', '<Plug>VimwikiTextObjHeaderContent')
|
||||
call vimwiki#u#map_key('v', 'ih', '<Plug>VimwikiTextObjHeaderContentV')
|
||||
call vimwiki#u#map_key('o', 'aH', '<Plug>VimwikiTextObjHeaderSub')
|
||||
call vimwiki#u#map_key('v', 'aH', '<Plug>VimwikiTextObjHeaderSubV')
|
||||
call vimwiki#u#map_key('o', 'iH', '<Plug>VimwikiTextObjHeaderSubContent')
|
||||
call vimwiki#u#map_key('v', 'iH', '<Plug>VimwikiTextObjHeaderSubContentV')
|
||||
call vimwiki#u#map_key('o', 'a\', '<Plug>VimwikiTextObjTableCell')
|
||||
call vimwiki#u#map_key('v', 'a\', '<Plug>VimwikiTextObjTableCellV')
|
||||
call vimwiki#u#map_key('o', 'i\', '<Plug>VimwikiTextObjTableCellInner')
|
||||
call vimwiki#u#map_key('v', 'i\', '<Plug>VimwikiTextObjTableCellInnerV')
|
||||
call vimwiki#u#map_key('o', 'ac', '<Plug>VimwikiTextObjColumn')
|
||||
call vimwiki#u#map_key('v', 'ac', '<Plug>VimwikiTextObjColumnV')
|
||||
call vimwiki#u#map_key('o', 'ic', '<Plug>VimwikiTextObjColumnInner')
|
||||
call vimwiki#u#map_key('v', 'ic', '<Plug>VimwikiTextObjColumnInnerV')
|
||||
call vimwiki#u#map_key('o', 'al', '<Plug>VimwikiTextObjListChildren')
|
||||
call vimwiki#u#map_key('v', 'al', '<Plug>VimwikiTextObjListChildrenV')
|
||||
call vimwiki#u#map_key('o', 'il', '<Plug>VimwikiTextObjListSingle')
|
||||
call vimwiki#u#map_key('v', 'il', '<Plug>VimwikiTextObjListSingleV')
|
||||
endif
|
||||
nnoremap <silent><script><buffer>
|
||||
\ <Plug>VimwikiTableMoveColumnRight :VimwikiTableMoveColumnRight<CR>
|
||||
|
||||
" <Plug> header definitions
|
||||
nnoremap <silent><buffer> <Plug>VimwikiAddHeaderLevel
|
||||
\ :<C-U>call vimwiki#base#AddHeaderLevel(v:count)<CR>
|
||||
nnoremap <silent><buffer> <Plug>VimwikiRemoveHeaderLevel
|
||||
\ :<C-U>call vimwiki#base#RemoveHeaderLevel(v:count)<CR>
|
||||
nnoremap <silent><buffer> <Plug>VimwikiGoToParentHeader
|
||||
\ :<C-u>call vimwiki#base#goto_parent_header()<CR>
|
||||
nnoremap <silent><buffer> <Plug>VimwikiGoToNextHeader
|
||||
\ :<C-u>call vimwiki#base#goto_next_header()<CR>
|
||||
nnoremap <silent><buffer> <Plug>VimwikiGoToPrevHeader
|
||||
\ :<C-u>call vimwiki#base#goto_prev_header()<CR>
|
||||
nnoremap <silent><buffer> <Plug>VimwikiGoToNextSiblingHeader
|
||||
\ :<C-u>call vimwiki#base#goto_sibling(+1)<CR>
|
||||
nnoremap <silent><buffer> <Plug>VimwikiGoToPrevSiblingHeader
|
||||
\ :<C-u>call vimwiki#base#goto_sibling(-1)<CR>
|
||||
|
||||
|
||||
" ------------------------------------------------
|
||||
" Text objects
|
||||
" ------------------------------------------------
|
||||
|
||||
onoremap <silent><buffer> ah :<C-U>call vimwiki#base#TO_header(0, 0, v:count1)<CR>
|
||||
vnoremap <silent><buffer> ah :<C-U>call vimwiki#base#TO_header(0, 0, v:count1)<CR>
|
||||
|
||||
onoremap <silent><buffer> ih :<C-U>call vimwiki#base#TO_header(1, 0, v:count1)<CR>
|
||||
vnoremap <silent><buffer> ih :<C-U>call vimwiki#base#TO_header(1, 0, v:count1)<CR>
|
||||
|
||||
onoremap <silent><buffer> aH :<C-U>call vimwiki#base#TO_header(0, 1, v:count1)<CR>
|
||||
vnoremap <silent><buffer> aH :<C-U>call vimwiki#base#TO_header(0, 1, v:count1)<CR>
|
||||
|
||||
onoremap <silent><buffer> iH :<C-U>call vimwiki#base#TO_header(1, 1, v:count1)<CR>
|
||||
vnoremap <silent><buffer> iH :<C-U>call vimwiki#base#TO_header(1, 1, v:count1)<CR>
|
||||
|
||||
onoremap <silent><buffer> a\ :<C-U>call vimwiki#base#TO_table_cell(0, 0)<CR>
|
||||
vnoremap <silent><buffer> a\ :<C-U>call vimwiki#base#TO_table_cell(0, 1)<CR>
|
||||
|
||||
onoremap <silent><buffer> i\ :<C-U>call vimwiki#base#TO_table_cell(1, 0)<CR>
|
||||
vnoremap <silent><buffer> i\ :<C-U>call vimwiki#base#TO_table_cell(1, 1)<CR>
|
||||
|
||||
onoremap <silent><buffer> ac :<C-U>call vimwiki#base#TO_table_col(0, 0)<CR>
|
||||
vnoremap <silent><buffer> ac :<C-U>call vimwiki#base#TO_table_col(0, 1)<CR>
|
||||
|
||||
onoremap <silent><buffer> ic :<C-U>call vimwiki#base#TO_table_col(1, 0)<CR>
|
||||
vnoremap <silent><buffer> ic :<C-U>call vimwiki#base#TO_table_col(1, 1)<CR>
|
||||
|
||||
onoremap <silent><buffer> al :<C-U>call vimwiki#lst#TO_list_item(0, 0)<CR>
|
||||
vnoremap <silent><buffer> al :<C-U>call vimwiki#lst#TO_list_item(0, 1)<CR>
|
||||
|
||||
onoremap <silent><buffer> il :<C-U>call vimwiki#lst#TO_list_item(1, 0)<CR>
|
||||
vnoremap <silent><buffer> il :<C-U>call vimwiki#lst#TO_list_item(1, 1)<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiAddHeaderLevel')
|
||||
nmap <silent><buffer> = <Plug>VimwikiAddHeaderLevel
|
||||
" default header key mappings
|
||||
if str2nr(vimwiki#vars#get_global('key_mappings').headers)
|
||||
call vimwiki#u#map_key('n', '=', '<Plug>VimwikiAddHeaderLevel')
|
||||
call vimwiki#u#map_key('n', '-', '<Plug>VimwikiRemoveHeaderLevel')
|
||||
call vimwiki#u#map_key('n', ']u', '<Plug>VimwikiGoToParentHeader')
|
||||
call vimwiki#u#map_key('n', '[u', '<Plug>VimwikiGoToParentHeader', 1)
|
||||
call vimwiki#u#map_key('n', ']]', '<Plug>VimwikiGoToNextHeader')
|
||||
call vimwiki#u#map_key('n', '[[', '<Plug>VimwikiGoToPrevHeader')
|
||||
call vimwiki#u#map_key('n', ']=', '<Plug>VimwikiGoToNextSiblingHeader')
|
||||
call vimwiki#u#map_key('n', '[=', '<Plug>VimwikiGoToPrevSiblingHeader')
|
||||
endif
|
||||
nnoremap <silent><buffer> <Plug>VimwikiAddHeaderLevel :<C-U>call vimwiki#base#AddHeaderLevel()<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiRemoveHeaderLevel')
|
||||
nmap <silent><buffer> - <Plug>VimwikiRemoveHeaderLevel
|
||||
endif
|
||||
nnoremap <silent><buffer> <Plug>VimwikiRemoveHeaderLevel :
|
||||
\<C-U>call vimwiki#base#RemoveHeaderLevel()<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiGoToParentHeader')
|
||||
nmap <silent><buffer> ]u <Plug>VimwikiGoToParentHeader
|
||||
nmap <silent><buffer> [u <Plug>VimwikiGoToParentHeader
|
||||
endif
|
||||
nnoremap <silent><buffer> <Plug>VimwikiGoToParentHeader :
|
||||
\<C-u>call vimwiki#base#goto_parent_header()<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiGoToNextHeader')
|
||||
nmap <silent><buffer> ]] <Plug>VimwikiGoToNextHeader
|
||||
endif
|
||||
nnoremap <silent><buffer> <Plug>VimwikiGoToNextHeader :
|
||||
\<C-u>call vimwiki#base#goto_next_header()<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiGoToPrevHeader')
|
||||
nmap <silent><buffer> [[ <Plug>VimwikiGoToPrevHeader
|
||||
endif
|
||||
nnoremap <silent><buffer> <Plug>VimwikiGoToPrevHeader :
|
||||
\<C-u>call vimwiki#base#goto_prev_header()<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiGoToNextSiblingHeader')
|
||||
nmap <silent><buffer> ]= <Plug>VimwikiGoToNextSiblingHeader
|
||||
endif
|
||||
nnoremap <silent><buffer> <Plug>VimwikiGoToNextSiblingHeader :
|
||||
\<C-u>call vimwiki#base#goto_sibling(+1)<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiGoToPrevSiblingHeader')
|
||||
nmap <silent><buffer> [= <Plug>VimwikiGoToPrevSiblingHeader
|
||||
endif
|
||||
nnoremap <silent><buffer> <Plug>VimwikiGoToPrevSiblingHeader :
|
||||
\<C-u>call vimwiki#base#goto_sibling(-1)<CR>
|
||||
|
||||
|
||||
|
||||
if vimwiki#vars#get_wikilocal('auto_export')
|
||||
@ -693,7 +682,20 @@ endif
|
||||
if vimwiki#vars#get_wikilocal('auto_tags')
|
||||
" Automatically update tags metadata on page write.
|
||||
augroup vimwiki
|
||||
au BufWritePost <buffer> call vimwiki#tags#update_tags(0, '')
|
||||
au BufWritePre <buffer> call vimwiki#tags#update_tags(0, '')
|
||||
augroup END
|
||||
endif
|
||||
|
||||
if vimwiki#vars#get_wikilocal('auto_generate_links')
|
||||
" Automatically generate links *before* the file is written
|
||||
augroup vimwiki
|
||||
au BufWritePre <buffer> call vimwiki#base#generate_links(0)
|
||||
augroup END
|
||||
endif
|
||||
|
||||
if vimwiki#vars#get_wikilocal('auto_generate_tags')
|
||||
" Automatically generate tags *before* the file is written
|
||||
augroup vimwiki
|
||||
au BufWritePre <buffer> call vimwiki#tags#generate_tags(0)
|
||||
augroup END
|
||||
endif
|
||||
|
@ -4,19 +4,19 @@
|
||||
" GetLatestVimScripts: 2226 1 :AutoInstall: vimwiki
|
||||
|
||||
|
||||
if exists("g:loaded_vimwiki") || &cp
|
||||
if exists('g:loaded_vimwiki') || &compatible
|
||||
finish
|
||||
endif
|
||||
let g:loaded_vimwiki = 1
|
||||
|
||||
" Set to version number for release, otherwise -1 for dev-branch
|
||||
let s:plugin_vers = "2.4.1"
|
||||
let s:plugin_vers = -1
|
||||
|
||||
" Get the directory the script is installed in
|
||||
let s:plugin_dir = expand('<sfile>:p:h:h')
|
||||
|
||||
let s:old_cpo = &cpo
|
||||
set cpo&vim
|
||||
let s:old_cpo = &cpoptions
|
||||
set cpoptions&vim
|
||||
|
||||
|
||||
if exists('g:vimwiki_autowriteall')
|
||||
@ -27,7 +27,7 @@ endif
|
||||
|
||||
|
||||
" this is called when the cursor leaves the buffer
|
||||
function! s:setup_buffer_leave()
|
||||
function! s:setup_buffer_leave() abort
|
||||
" don't do anything if it's not managed by Vimwiki (that is, when it's not in
|
||||
" a registered wiki and not a temporary wiki)
|
||||
if vimwiki#vars#get_bufferlocal('wiki_nr') == -1
|
||||
@ -43,7 +43,7 @@ endfunction
|
||||
|
||||
|
||||
" create a new temporary wiki for the current buffer
|
||||
function! s:create_temporary_wiki()
|
||||
function! s:create_temporary_wiki() abort
|
||||
let path = expand('%:p:h')
|
||||
let ext = '.'.expand('%:e')
|
||||
|
||||
@ -70,7 +70,7 @@ endfunction
|
||||
" This function is called when Vim opens a new buffer with a known wiki
|
||||
" extension. Both when the buffer has never been opened in this session and
|
||||
" when it has.
|
||||
function! s:setup_new_wiki_buffer()
|
||||
function! s:setup_new_wiki_buffer() abort
|
||||
let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
if wiki_nr == -1 " it's not in a known wiki directory
|
||||
if vimwiki#vars#get_global('global_ext')
|
||||
@ -82,37 +82,47 @@ function! s:setup_new_wiki_buffer()
|
||||
endif
|
||||
|
||||
if vimwiki#vars#get_wikilocal('maxhi')
|
||||
call vimwiki#vars#set_bufferlocal('existing_wikifiles', vimwiki#base#get_wikilinks(wiki_nr, 1))
|
||||
call vimwiki#vars#set_bufferlocal('existing_wikifiles', vimwiki#base#get_wikilinks(wiki_nr, 1, ''))
|
||||
call vimwiki#vars#set_bufferlocal('existing_wikidirs',
|
||||
\ vimwiki#base#get_wiki_directories(wiki_nr))
|
||||
endif
|
||||
|
||||
" this makes that ftplugin/vimwiki.vim and afterwards syntax/vimwiki.vim are
|
||||
" sourced
|
||||
setfiletype vimwiki
|
||||
call vimwiki#u#ft_set()
|
||||
|
||||
endfunction
|
||||
|
||||
|
||||
" this is called when the cursor enters the buffer
|
||||
function! s:setup_buffer_enter()
|
||||
function! s:setup_buffer_enter() abort
|
||||
" don't do anything if it's not managed by Vimwiki (that is, when it's not in
|
||||
" a registered wiki and not a temporary wiki)
|
||||
if vimwiki#vars#get_bufferlocal('wiki_nr') == -1
|
||||
return
|
||||
endif
|
||||
|
||||
if &filetype != 'vimwiki'
|
||||
setfiletype vimwiki
|
||||
call s:set_global_options()
|
||||
endfunction
|
||||
|
||||
|
||||
" this is called when the buffer enters a window or when running a diff
|
||||
function! s:setup_buffer_win_enter() abort
|
||||
" don't do anything if it's not managed by Vimwiki (that is, when it's not in
|
||||
" a registered wiki and not a temporary wiki)
|
||||
if vimwiki#vars#get_bufferlocal('wiki_nr') == -1
|
||||
return
|
||||
endif
|
||||
|
||||
call s:set_global_options()
|
||||
if !vimwiki#u#ft_is_vw()
|
||||
call vimwiki#u#ft_set()
|
||||
endif
|
||||
|
||||
call s:set_windowlocal_options()
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:setup_cleared_syntax()
|
||||
function! s:setup_cleared_syntax() abort
|
||||
" highlight groups that get cleared
|
||||
" on colorscheme change because they are not linked to Vim-predefined groups
|
||||
hi def VimwikiBold term=bold cterm=bold gui=bold
|
||||
@ -122,15 +132,15 @@ function! s:setup_cleared_syntax()
|
||||
if vimwiki#vars#get_global('hl_headers') == 1
|
||||
for i in range(1,6)
|
||||
execute 'hi def VimwikiHeader'.i.' guibg=bg guifg='
|
||||
\ . vimwiki#vars#get_global('hcolor_guifg_'.&bg)[i-1]
|
||||
\ .' gui=bold ctermfg='.vimwiki#vars#get_global('hcolor_ctermfg_'.&bg)[i-1]
|
||||
\ . vimwiki#vars#get_global('hcolor_guifg_'.&background)[i-1]
|
||||
\ .' gui=bold ctermfg='.vimwiki#vars#get_global('hcolor_ctermfg_'.&background)[i-1]
|
||||
\ .' term=bold cterm=bold'
|
||||
endfor
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:vimwiki_get_known_extensions()
|
||||
function! s:vimwiki_get_known_extensions() abort
|
||||
" Getting all extensions that different wikis could have
|
||||
let extensions = {}
|
||||
for idx in range(vimwiki#vars#number_of_wikis())
|
||||
@ -148,7 +158,7 @@ endfunction
|
||||
" Set settings which are global for Vim, but should only be executed for
|
||||
" Vimwiki buffers. So they must be set when the cursor enters a Vimwiki buffer
|
||||
" and reset when the cursor leaves the buffer.
|
||||
function! s:set_global_options()
|
||||
function! s:set_global_options() abort
|
||||
let s:vimwiki_autowriteall_saved = &autowriteall
|
||||
let &autowriteall = vimwiki#vars#get_global('autowriteall')
|
||||
|
||||
@ -161,7 +171,7 @@ endfunction
|
||||
" Set settings which are local to a window. In a new tab they would be reset to
|
||||
" Vim defaults. So we enforce our settings here when the cursor enters a
|
||||
" Vimwiki buffer.
|
||||
function! s:set_windowlocal_options()
|
||||
function! s:set_windowlocal_options() abort
|
||||
if !&diff " if Vim is currently in diff mode, don't interfere with its folding
|
||||
let foldmethod = vimwiki#vars#get_global('folding')
|
||||
if foldmethod =~? '^expr.*'
|
||||
@ -183,7 +193,7 @@ function! s:set_windowlocal_options()
|
||||
endif
|
||||
endif
|
||||
|
||||
if vimwiki#vars#get_global('conceallevel') && exists("+conceallevel")
|
||||
if vimwiki#vars#get_global('conceallevel') && exists('+conceallevel')
|
||||
let &conceallevel = vimwiki#vars#get_global('conceallevel')
|
||||
endif
|
||||
|
||||
@ -193,19 +203,21 @@ function! s:set_windowlocal_options()
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:get_version()
|
||||
function! s:get_version() abort
|
||||
if s:plugin_vers != -1
|
||||
echo "Stable version: " . string(s:plugin_vers)
|
||||
echo 'Stable version: ' . string(s:plugin_vers)
|
||||
else
|
||||
let l:plugin_rev = system("git --git-dir " . s:plugin_dir . "/.git rev-parse --short HEAD")
|
||||
let l:plugin_branch = system("git --git-dir " . s:plugin_dir . "/.git rev-parse --abbrev-ref HEAD")
|
||||
let l:plugin_date = system("git --git-dir " . s:plugin_dir . "/.git show -s --format=%ci")
|
||||
let l:plugin_rev = system('git --git-dir ' . s:plugin_dir . '/.git rev-parse --short HEAD')
|
||||
let l:plugin_branch = system('git --git-dir ' . s:plugin_dir . '/.git rev-parse --abbrev-ref HEAD')
|
||||
let l:plugin_date = system('git --git-dir ' . s:plugin_dir . '/.git show -s --format=%ci')
|
||||
if v:shell_error == 0
|
||||
echo "Branch: " . l:plugin_branch
|
||||
echo "Revision: " . l:plugin_rev
|
||||
echo "Date: " . l:plugin_date
|
||||
echo 'Os: ' . vimwiki#u#os_name()
|
||||
echo 'Vim: ' . v:version
|
||||
echo 'Branch: ' . l:plugin_branch
|
||||
echo 'Revision: ' . l:plugin_rev
|
||||
echo 'Date: ' . l:plugin_date
|
||||
else
|
||||
echo "Unknown version"
|
||||
echo 'Unknown version'
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
@ -219,26 +231,70 @@ call vimwiki#vars#init()
|
||||
|
||||
|
||||
" Define callback functions which the user can redefine
|
||||
if !exists("*VimwikiLinkHandler")
|
||||
if !exists('*VimwikiLinkHandler')
|
||||
function VimwikiLinkHandler(url)
|
||||
return 0
|
||||
endfunction
|
||||
endif
|
||||
|
||||
if !exists("*VimwikiLinkConverter")
|
||||
if !exists('*VimwikiLinkConverter')
|
||||
function VimwikiLinkConverter(url, source, target)
|
||||
" Return the empty string when unable to process link
|
||||
return ''
|
||||
endfunction
|
||||
endif
|
||||
|
||||
if !exists("*VimwikiWikiIncludeHandler")
|
||||
if !exists('*VimwikiWikiIncludeHandler')
|
||||
function! VimwikiWikiIncludeHandler(value)
|
||||
return ''
|
||||
endfunction
|
||||
endif
|
||||
|
||||
|
||||
" write a level 1 header to new wiki files
|
||||
" a:fname should be an absolute filepath
|
||||
function! s:create_h1(fname) abort
|
||||
if vimwiki#vars#get_global('auto_header')
|
||||
let idx = vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
|
||||
" don't do anything for unregistered wikis
|
||||
if idx == -1
|
||||
return
|
||||
endif
|
||||
|
||||
" don't create header for the diary index page
|
||||
if vimwiki#path#is_equal(a:fname,
|
||||
\ vimwiki#vars#get_wikilocal('path', idx).vimwiki#vars#get_wikilocal('diary_rel_path', idx).
|
||||
\ vimwiki#vars#get_wikilocal('diary_index', idx).vimwiki#vars#get_wikilocal('ext', idx))
|
||||
return
|
||||
endif
|
||||
|
||||
" get tail of filename without extension
|
||||
let title = expand('%:t:r')
|
||||
|
||||
" don't insert header for index page
|
||||
if title ==# vimwiki#vars#get_wikilocal('index', idx)
|
||||
return
|
||||
endif
|
||||
|
||||
" don't substitute space char for diary pages
|
||||
if title !~# '^\d\{4}-\d\d-\d\d'
|
||||
" NOTE: it is possible this could remove desired characters if the 'links_space_char'
|
||||
" character matches characters that are intentionally used in the title.
|
||||
let title = substitute(title, vimwiki#vars#get_wikilocal('links_space_char'), ' ', 'g')
|
||||
endif
|
||||
|
||||
" insert the header
|
||||
if vimwiki#vars#get_wikilocal('syntax') ==? 'markdown'
|
||||
keepjumps call append(0, '# ' . title)
|
||||
for _ in range(vimwiki#vars#get_global('markdown_header_style'))
|
||||
keepjumps call append(1, '')
|
||||
endfor
|
||||
else
|
||||
keepjumps call append(0, '= ' . title . ' =')
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Define autocommands for all known wiki extensions
|
||||
|
||||
@ -254,50 +310,63 @@ endif
|
||||
augroup vimwiki
|
||||
autocmd!
|
||||
autocmd ColorScheme * call s:setup_cleared_syntax()
|
||||
for s:ext in s:known_extensions
|
||||
exe 'autocmd BufNewFile,BufRead *'.s:ext.' call s:setup_new_wiki_buffer()'
|
||||
exe 'autocmd BufEnter *'.s:ext.' call s:setup_buffer_enter()'
|
||||
exe 'autocmd BufLeave *'.s:ext.' call s:setup_buffer_leave()'
|
||||
|
||||
" ['.md', '.mdown'] => *.md,*.mdown
|
||||
let pat = join(map(s:known_extensions, '"*" . v:val'), ',')
|
||||
exe 'autocmd BufNewFile,BufRead '.pat.' call s:setup_new_wiki_buffer()'
|
||||
exe 'autocmd BufEnter '.pat.' call s:setup_buffer_enter()'
|
||||
exe 'autocmd BufLeave '.pat.' call s:setup_buffer_leave()'
|
||||
exe 'autocmd BufWinEnter '.pat.' call s:setup_buffer_win_enter()'
|
||||
if exists('##DiffUpdated')
|
||||
exe 'autocmd DiffUpdated '.pat.' call s:setup_buffer_win_enter()'
|
||||
endif
|
||||
" automatically generate a level 1 header for new files
|
||||
exe 'autocmd BufNewFile '.pat.' call s:create_h1(expand("%:p"))'
|
||||
" Format tables when exit from insert mode. Do not use textwidth to
|
||||
" autowrap tables.
|
||||
if vimwiki#vars#get_global('table_auto_fmt')
|
||||
exe 'autocmd InsertLeave *'.s:ext.' call vimwiki#tbl#format(line("."))'
|
||||
exe 'autocmd InsertEnter *'.s:ext.' call vimwiki#tbl#reset_tw(line("."))'
|
||||
exe 'autocmd InsertLeave '.pat.' call vimwiki#tbl#format(line("."), 2)'
|
||||
exe 'autocmd InsertEnter '.pat.' call vimwiki#tbl#reset_tw(line("."))'
|
||||
endif
|
||||
if vimwiki#vars#get_global('folding') =~? ':quick$'
|
||||
" from http://vim.wikia.com/wiki/Keep_folds_closed_while_inserting_text
|
||||
" Don't screw up folds when inserting text that might affect them, until
|
||||
" leaving insert mode. Foldmethod is local to the window. Protect against
|
||||
" screwing up folding when switching between windows.
|
||||
exe 'autocmd InsertEnter *'.s:ext.' if !exists("w:last_fdm") | let w:last_fdm=&foldmethod'.
|
||||
exe 'autocmd InsertEnter '.pat.' if !exists("w:last_fdm") | let w:last_fdm=&foldmethod'.
|
||||
\ ' | setlocal foldmethod=manual | endif'
|
||||
exe 'autocmd InsertLeave,WinLeave *'.s:ext.' if exists("w:last_fdm") |'.
|
||||
exe 'autocmd InsertLeave,WinLeave '.pat.' if exists("w:last_fdm") |'.
|
||||
\ 'let &l:foldmethod=w:last_fdm | unlet w:last_fdm | endif'
|
||||
endif
|
||||
endfor
|
||||
augroup END
|
||||
|
||||
|
||||
|
||||
command! VimwikiUISelect call vimwiki#base#ui_select()
|
||||
" why not using <count> instead of v:count1?
|
||||
" See https://github.com/vimwiki-backup/vimwiki/issues/324
|
||||
command! -count=1 VimwikiIndex
|
||||
\ call vimwiki#base#goto_index(v:count1)
|
||||
command! -count=1 VimwikiTabIndex
|
||||
\ call vimwiki#base#goto_index(v:count1, 1)
|
||||
|
||||
command! -count=1 VimwikiDiaryIndex
|
||||
\ call vimwiki#diary#goto_diary_index(v:count1)
|
||||
command! -count=1 VimwikiMakeDiaryNote
|
||||
\ call vimwiki#diary#make_note(v:count)
|
||||
command! -count=1 VimwikiTabMakeDiaryNote
|
||||
\ call vimwiki#diary#make_note(v:count, 1)
|
||||
command! -count=1 VimwikiMakeYesterdayDiaryNote
|
||||
\ call vimwiki#diary#make_note(v:count, 0,
|
||||
" these commands take a count e.g. :VimwikiIndex 2
|
||||
" the default behavior is to open the index, diary etc.
|
||||
" for the CURRENT wiki if no count is given
|
||||
command! -count=0 VimwikiIndex
|
||||
\ call vimwiki#base#goto_index(<count>)
|
||||
|
||||
command! -count=0 VimwikiTabIndex
|
||||
\ call vimwiki#base#goto_index(<count>, 1)
|
||||
|
||||
command! -count=0 VimwikiDiaryIndex
|
||||
\ call vimwiki#diary#goto_diary_index(<count>)
|
||||
|
||||
command! -count=0 VimwikiMakeDiaryNote
|
||||
\ call vimwiki#diary#make_note(<count>)
|
||||
|
||||
command! -count=0 VimwikiTabMakeDiaryNote
|
||||
\ call vimwiki#diary#make_note(<count>, 1)
|
||||
|
||||
command! -count=0 VimwikiMakeYesterdayDiaryNote
|
||||
\ call vimwiki#diary#make_note(<count>, 0,
|
||||
\ vimwiki#diary#diary_date_link(localtime() - 60*60*24))
|
||||
command! -count=1 VimwikiMakeTomorrowDiaryNote
|
||||
\ call vimwiki#diary#make_note(v:count, 0,
|
||||
|
||||
command! -count=0 VimwikiMakeTomorrowDiaryNote
|
||||
\ call vimwiki#diary#make_note(<count>, 0,
|
||||
\ vimwiki#diary#diary_date_link(localtime() + 60*60*24))
|
||||
|
||||
command! VimwikiDiaryGenerateLinks
|
||||
@ -306,72 +375,74 @@ command! VimwikiDiaryGenerateLinks
|
||||
command! VimwikiShowVersion call s:get_version()
|
||||
|
||||
|
||||
" <Plug> global definitions
|
||||
nnoremap <silent><script> <Plug>VimwikiIndex
|
||||
\ :<C-U>call vimwiki#base#goto_index(v:count)<CR>
|
||||
nnoremap <silent><script> <Plug>VimwikiTabIndex
|
||||
\ :<C-U>call vimwiki#base#goto_index(v:count, 1)<CR>
|
||||
nnoremap <silent><script> <Plug>VimwikiUISelect
|
||||
\ :VimwikiUISelect<CR>
|
||||
nnoremap <silent><script> <Plug>VimwikiDiaryIndex
|
||||
\ :<C-U>call vimwiki#diary#goto_diary_index(v:count)<CR>
|
||||
nnoremap <silent><script> <Plug>VimwikiDiaryGenerateLinks
|
||||
\ :VimwikiDiaryGenerateLinks<CR>
|
||||
nnoremap <silent><script> <Plug>VimwikiMakeDiaryNote
|
||||
\ :<C-U>call vimwiki#diary#make_note(v:count)<CR>
|
||||
nnoremap <silent><script> <Plug>VimwikiTabMakeDiaryNote
|
||||
\ :<C-U>call vimwiki#diary#make_note(v:count, 1)<CR>
|
||||
nnoremap <silent><script> <Plug>VimwikiMakeYesterdayDiaryNote
|
||||
\ :<C-U>call vimwiki#diary#make_note(v:count, 0,
|
||||
\ vimwiki#diary#diary_date_link(localtime() - 60*60*24))<CR>
|
||||
nnoremap <silent><script> <Plug>VimwikiMakeTomorrowDiaryNote
|
||||
\ :<C-U>call vimwiki#diary#make_note(v:count, 0,
|
||||
\ vimwiki#diary#diary_date_link(localtime() + 60*60*24))<CR>
|
||||
|
||||
" get the user defined prefix (default <leader>w)
|
||||
let s:map_prefix = vimwiki#vars#get_global('map_prefix')
|
||||
|
||||
if !hasmapto('<Plug>VimwikiIndex')
|
||||
exe 'nmap <silent><unique> '.s:map_prefix.'w <Plug>VimwikiIndex'
|
||||
" default global key mappings
|
||||
if str2nr(vimwiki#vars#get_global('key_mappings').global)
|
||||
call vimwiki#u#map_key('n', s:map_prefix . 'w', '<Plug>VimwikiIndex', 2)
|
||||
call vimwiki#u#map_key('n', s:map_prefix . 't', '<Plug>VimwikiTabIndex', 2)
|
||||
call vimwiki#u#map_key('n', s:map_prefix . 's', '<Plug>VimwikiUISelect', 2)
|
||||
call vimwiki#u#map_key('n', s:map_prefix . 'i', '<Plug>VimwikiDiaryIndex', 2)
|
||||
call vimwiki#u#map_key('n', s:map_prefix . '<Leader>i', '<Plug>VimwikiDiaryGenerateLinks', 2)
|
||||
call vimwiki#u#map_key('n', s:map_prefix . '<Leader>w', '<Plug>VimwikiMakeDiaryNote', 2)
|
||||
call vimwiki#u#map_key('n', s:map_prefix . '<Leader>t', '<Plug>VimwikiTabMakeDiaryNote', 2)
|
||||
call vimwiki#u#map_key('n', s:map_prefix . '<Leader>y', '<Plug>VimwikiMakeYesterdayDiaryNote', 2)
|
||||
call vimwiki#u#map_key('n', s:map_prefix . '<Leader>m', '<Plug>VimwikiMakeTomorrowDiaryNote', 2)
|
||||
endif
|
||||
nnoremap <unique><script> <Plug>VimwikiIndex :VimwikiIndex<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiTabIndex')
|
||||
exe 'nmap <silent><unique> '.s:map_prefix.'t <Plug>VimwikiTabIndex'
|
||||
endif
|
||||
nnoremap <unique><script> <Plug>VimwikiTabIndex :VimwikiTabIndex<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiUISelect')
|
||||
exe 'nmap <silent><unique> '.s:map_prefix.'s <Plug>VimwikiUISelect'
|
||||
endif
|
||||
nnoremap <unique><script> <Plug>VimwikiUISelect :VimwikiUISelect<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiDiaryIndex')
|
||||
exe 'nmap <silent><unique> '.s:map_prefix.'i <Plug>VimwikiDiaryIndex'
|
||||
endif
|
||||
nnoremap <unique><script> <Plug>VimwikiDiaryIndex :VimwikiDiaryIndex<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiDiaryGenerateLinks')
|
||||
exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>i <Plug>VimwikiDiaryGenerateLinks'
|
||||
endif
|
||||
nnoremap <unique><script> <Plug>VimwikiDiaryGenerateLinks :VimwikiDiaryGenerateLinks<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiMakeDiaryNote')
|
||||
exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>w <Plug>VimwikiMakeDiaryNote'
|
||||
endif
|
||||
nnoremap <unique><script> <Plug>VimwikiMakeDiaryNote :VimwikiMakeDiaryNote<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiTabMakeDiaryNote')
|
||||
exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>t <Plug>VimwikiTabMakeDiaryNote'
|
||||
endif
|
||||
nnoremap <unique><script> <Plug>VimwikiTabMakeDiaryNote
|
||||
\ :VimwikiTabMakeDiaryNote<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiMakeYesterdayDiaryNote')
|
||||
exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>y <Plug>VimwikiMakeYesterdayDiaryNote'
|
||||
endif
|
||||
nnoremap <unique><script> <Plug>VimwikiMakeYesterdayDiaryNote
|
||||
\ :VimwikiMakeYesterdayDiaryNote<CR>
|
||||
|
||||
if !hasmapto('<Plug>VimwikiMakeTomorrowDiaryNote')
|
||||
exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>m <Plug>VimwikiMakeTomorrowDiaryNote'
|
||||
endif
|
||||
nnoremap <unique><script> <Plug>VimwikiMakeTomorrowDiaryNote
|
||||
\ :VimwikiMakeTomorrowDiaryNote<CR>
|
||||
|
||||
|
||||
|
||||
|
||||
function! s:build_menu(topmenu)
|
||||
function! s:build_menu(topmenu) abort
|
||||
let wnamelist = []
|
||||
for idx in range(vimwiki#vars#number_of_wikis())
|
||||
let norm_path = fnamemodify(vimwiki#vars#get_wikilocal('path', idx), ':h:t')
|
||||
let norm_path = escape(norm_path, '\ \.')
|
||||
execute 'menu '.a:topmenu.'.Open\ index.'.norm_path.
|
||||
let wname = vimwiki#vars#get_wikilocal('name', idx)
|
||||
if wname ==? ''
|
||||
" fall back to the path if wiki isn't named
|
||||
let wname = fnamemodify(vimwiki#vars#get_wikilocal('path', idx), ':h:t')
|
||||
endif
|
||||
|
||||
if index(wnamelist, wname) != -1
|
||||
" append wiki index number to duplicate entries
|
||||
let wname = wname . ' ' . string(idx + 1)
|
||||
endif
|
||||
|
||||
" add entry to the list of names for duplicate checks
|
||||
call add(wnamelist, wname)
|
||||
|
||||
" escape spaces and periods
|
||||
let wname = escape(wname, '\ \.')
|
||||
|
||||
" build the menu
|
||||
execute 'menu '.a:topmenu.'.Open\ index.'.wname.
|
||||
\ ' :call vimwiki#base#goto_index('.(idx+1).')<CR>'
|
||||
execute 'menu '.a:topmenu.'.Open/Create\ diary\ note.'.norm_path.
|
||||
execute 'menu '.a:topmenu.'.Open/Create\ diary\ note.'.wname.
|
||||
\ ' :call vimwiki#diary#make_note('.(idx+1).')<CR>'
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
function! s:build_table_menu(topmenu)
|
||||
function! s:build_table_menu(topmenu) abort
|
||||
exe 'menu '.a:topmenu.'.-Sep- :'
|
||||
exe 'menu '.a:topmenu.'.Table.Create\ (enter\ cols\ rows) :VimwikiTable '
|
||||
exe 'nmenu '.a:topmenu.'.Table.Format<tab>gqq gqq'
|
||||
@ -395,4 +466,4 @@ if vimwiki#vars#get_global('use_calendar')
|
||||
endif
|
||||
|
||||
|
||||
let &cpo = s:old_cpo
|
||||
let &cpoptions = s:old_cpo
|
||||
|
@ -6,7 +6,7 @@
|
||||
" Quit if syntax file is already loaded
|
||||
if v:version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
elseif exists('b:current_syntax')
|
||||
finish
|
||||
endif
|
||||
|
||||
@ -18,7 +18,7 @@ call vimwiki#vars#populate_syntax_vars(s:current_syntax)
|
||||
|
||||
|
||||
" LINKS: highlighting is complicated due to "nonexistent" links feature
|
||||
function! s:add_target_syntax_ON(target, type)
|
||||
function! s:add_target_syntax_ON(target, type) abort
|
||||
let prefix0 = 'syntax match '.a:type.' `'
|
||||
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char'
|
||||
let prefix1 = 'syntax match '.a:type.'T `'
|
||||
@ -28,7 +28,7 @@ function! s:add_target_syntax_ON(target, type)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:add_target_syntax_OFF(target)
|
||||
function! s:add_target_syntax_OFF(target) abort
|
||||
let prefix0 = 'syntax match VimwikiNoExistsLink `'
|
||||
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,VimwikiLinkChar'
|
||||
let prefix1 = 'syntax match VimwikiNoExistsLinkT `'
|
||||
@ -38,7 +38,7 @@ function! s:add_target_syntax_OFF(target)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:highlight_existing_links()
|
||||
function! s:highlight_existing_links() abort
|
||||
" Wikilink
|
||||
" Conditional highlighting that depends on the existence of a wiki file or
|
||||
" directory is only available for *schemeless* wiki links
|
||||
@ -153,37 +153,38 @@ endfor
|
||||
|
||||
|
||||
" possibly concealed chars
|
||||
let s:conceal = exists("+conceallevel") ? ' conceal' : ''
|
||||
let s:conceal = exists('+conceallevel') ? ' conceal' : ''
|
||||
|
||||
execute 'syn match VimwikiEqInChar contained /'.
|
||||
if vimwiki#vars#get_global('conceal_onechar_markers')
|
||||
execute 'syn match VimwikiEqInChar contained /'.
|
||||
\ vimwiki#vars#get_syntaxlocal('char_eqin').'/'.s:conceal
|
||||
execute 'syn match VimwikiBoldChar contained /'.
|
||||
execute 'syn match VimwikiBoldChar contained /'.
|
||||
\ vimwiki#vars#get_syntaxlocal('char_bold').'/'.s:conceal
|
||||
execute 'syn match VimwikiItalicChar contained /'.
|
||||
execute 'syn match VimwikiItalicChar contained /'.
|
||||
\ vimwiki#vars#get_syntaxlocal('char_italic').'/'.s:conceal
|
||||
execute 'syn match VimwikiBoldItalicChar contained /'.
|
||||
execute 'syn match VimwikiBoldItalicChar contained /'.
|
||||
\ vimwiki#vars#get_syntaxlocal('char_bolditalic').'/'.s:conceal
|
||||
execute 'syn match VimwikiItalicBoldChar contained /'.
|
||||
execute 'syn match VimwikiItalicBoldChar contained /'.
|
||||
\ vimwiki#vars#get_syntaxlocal('char_italicbold').'/'.s:conceal
|
||||
execute 'syn match VimwikiCodeChar contained /'.
|
||||
execute 'syn match VimwikiCodeChar contained /'.
|
||||
\ vimwiki#vars#get_syntaxlocal('char_code').'/'.s:conceal
|
||||
execute 'syn match VimwikiDelTextChar contained /'.
|
||||
execute 'syn match VimwikiDelTextChar contained /'.
|
||||
\ vimwiki#vars#get_syntaxlocal('char_deltext').'/'.s:conceal
|
||||
execute 'syn match VimwikiSuperScript contained /'.
|
||||
execute 'syn match VimwikiSuperScript contained /'.
|
||||
\ vimwiki#vars#get_syntaxlocal('char_superscript').'/'.s:conceal
|
||||
execute 'syn match VimwikiSubScript contained /'.
|
||||
execute 'syn match VimwikiSubScript contained /'.
|
||||
\ vimwiki#vars#get_syntaxlocal('char_subscript').'/'.s:conceal
|
||||
|
||||
|
||||
|
||||
endif
|
||||
|
||||
|
||||
let s:options = ' contained transparent contains=NONE'
|
||||
if exists('+conceallevel')
|
||||
let s:options .= s:conceal
|
||||
endif
|
||||
|
||||
" A shortener for long URLs: LinkRest (a middle part of the URL) is concealed
|
||||
" VimwikiLinkRest group is left undefined if link shortening is not desired
|
||||
if exists("+conceallevel") && vimwiki#vars#get_global('url_maxsave') > 0
|
||||
let s:options .= s:conceal
|
||||
if exists('+conceallevel') && vimwiki#vars#get_global('url_maxsave') > 0
|
||||
execute 'syn match VimwikiLinkRest `\%(///\=[^/ \t]\+/\)\zs\S\+\ze'
|
||||
\.'\%([/#?]\w\|\S\{'.vimwiki#vars#get_global('url_maxsave').'}\)`'.' cchar=~'.s:options
|
||||
endif
|
||||
@ -261,18 +262,18 @@ if vimwiki#vars#get_global('hl_cb_checked') == 1
|
||||
execute 'syntax match VimwikiCheckBoxDone /'.vimwiki#vars#get_syntaxlocal('rxListItemWithoutCB')
|
||||
\ . '\s*\[['.vimwiki#vars#get_syntaxlocal('listsyms_list')[-1]
|
||||
\ . vimwiki#vars#get_global('listsym_rejected')
|
||||
\ . ']\]\s.*$/ contains=VimwikiNoExistsLink,VimwikiLink,@Spell'
|
||||
\ . ']\]\s.*$/ contains=VimwikiNoExistsLink,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
|
||||
elseif vimwiki#vars#get_global('hl_cb_checked') == 2
|
||||
execute 'syntax match VimwikiCheckBoxDone /'
|
||||
\ . vimwiki#vars#get_syntaxlocal('rxListItemAndChildren')
|
||||
\ .'/ contains=VimwikiNoExistsLink,VimwikiLink,@Spell'
|
||||
\ .'/ contains=VimwikiNoExistsLink,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
|
||||
endif
|
||||
|
||||
|
||||
execute 'syntax match VimwikiEqIn /'.vimwiki#vars#get_syntaxlocal('rxEqIn').
|
||||
\ '/ contains=VimwikiEqInChar'
|
||||
\ '/ contains=VimwikiEqInChar,@NoSpell'
|
||||
execute 'syntax match VimwikiEqInT /'.vimwiki#vars#get_syntaxlocal('rxEqIn').
|
||||
\ '/ contained contains=VimwikiEqInCharT'
|
||||
\ '/ contained contains=VimwikiEqInCharT,@NoSpell'
|
||||
|
||||
execute 'syntax match VimwikiBold /'.vimwiki#vars#get_syntaxlocal('rxBold').
|
||||
\ '/ contains=VimwikiBoldChar,@Spell'
|
||||
@ -310,7 +311,7 @@ execute 'syntax match VimwikiSubScriptT /'.vimwiki#vars#get_syntaxlocal('rxSubSc
|
||||
\ '/ contained contains=VimwikiSubScriptCharT,@Spell'
|
||||
|
||||
execute 'syntax match VimwikiCode /'.vimwiki#vars#get_syntaxlocal('rxCode').
|
||||
\ '/ contains=VimwikiCodeChar'
|
||||
\ '/ contains=VimwikiCodeChar,@NoSpell'
|
||||
execute 'syntax match VimwikiCodeT /'.vimwiki#vars#get_syntaxlocal('rxCode').
|
||||
\ '/ contained contains=VimwikiCodeCharT'
|
||||
|
||||
@ -318,11 +319,12 @@ execute 'syntax match VimwikiCodeT /'.vimwiki#vars#get_syntaxlocal('rxCode').
|
||||
" <hr> horizontal rule
|
||||
execute 'syntax match VimwikiHR /'.vimwiki#vars#get_syntaxlocal('rxHR').'/'
|
||||
|
||||
execute 'syntax region VimwikiPre start=/'.vimwiki#vars#get_syntaxlocal('rxPreStart').
|
||||
\ '/ end=/'.vimwiki#vars#get_syntaxlocal('rxPreEnd').'/ contains=@Spell'
|
||||
let concealpre = vimwiki#vars#get_global('conceal_pre') ? ' concealends' : ''
|
||||
execute 'syntax region VimwikiPre matchgroup=VimwikiPreDelim start=/'.vimwiki#vars#get_syntaxlocal('rxPreStart').
|
||||
\ '/ end=/'.vimwiki#vars#get_syntaxlocal('rxPreEnd').'/ contains=@NoSpell'.concealpre
|
||||
|
||||
execute 'syntax region VimwikiMath start=/'.vimwiki#vars#get_syntaxlocal('rxMathStart').
|
||||
\ '/ end=/'.vimwiki#vars#get_syntaxlocal('rxMathEnd').'/ contains=@Spell'
|
||||
\ '/ end=/'.vimwiki#vars#get_syntaxlocal('rxMathEnd').'/ contains=@NoSpell'
|
||||
|
||||
|
||||
" placeholders
|
||||
@ -337,7 +339,7 @@ syntax match VimwikiPlaceholderParam /.*/ contained
|
||||
|
||||
|
||||
" html tags
|
||||
if vimwiki#vars#get_global('valid_html_tags') != ''
|
||||
if vimwiki#vars#get_global('valid_html_tags') !=? ''
|
||||
let s:html_tags = join(split(vimwiki#vars#get_global('valid_html_tags'), '\s*,\s*'), '\|')
|
||||
exe 'syntax match VimwikiHTMLtag #\c</\?\%('.s:html_tags.'\)\%(\s\{-1}\S\{-}\)\{-}\s*/\?>#'
|
||||
execute 'syntax match VimwikiBold #\c<b>.\{-}</b># contains=VimwikiHTMLTag'
|
||||
@ -356,7 +358,7 @@ execute 'syntax match VimwikiTag /'.vimwiki#vars#get_syntaxlocal('rxTags').'/'
|
||||
" header groups highlighting
|
||||
if vimwiki#vars#get_global('hl_headers') == 0
|
||||
" Strangely in default colorscheme Title group is not set to bold for cterm...
|
||||
if !exists("g:colors_name")
|
||||
if !exists('g:colors_name')
|
||||
hi Title cterm=bold
|
||||
endif
|
||||
for s:i in range(1,6)
|
||||
@ -365,8 +367,8 @@ if vimwiki#vars#get_global('hl_headers') == 0
|
||||
else
|
||||
for s:i in range(1,6)
|
||||
execute 'hi def VimwikiHeader'.s:i.' guibg=bg guifg='
|
||||
\ .vimwiki#vars#get_global('hcolor_guifg_'.&bg)[s:i-1].' gui=bold ctermfg='
|
||||
\ .vimwiki#vars#get_global('hcolor_ctermfg_'.&bg)[s:i-1].' term=bold cterm=bold'
|
||||
\ .vimwiki#vars#get_global('hcolor_guifg_'.&background)[s:i-1].' gui=bold ctermfg='
|
||||
\ .vimwiki#vars#get_global('hcolor_ctermfg_'.&background)[s:i-1].' term=bold cterm=bold'
|
||||
endfor
|
||||
endif
|
||||
|
||||
@ -383,7 +385,7 @@ hi def link VimwikiBoldT VimwikiBold
|
||||
hi def VimwikiItalic term=italic cterm=italic gui=italic
|
||||
hi def link VimwikiItalicT VimwikiItalic
|
||||
|
||||
hi def VimwikiBoldItalic term=bold cterm=bold gui=bold,italic
|
||||
hi def VimwikiBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
|
||||
hi def link VimwikiItalicBold VimwikiBoldItalic
|
||||
hi def link VimwikiBoldItalicT VimwikiBoldItalic
|
||||
hi def link VimwikiItalicBoldT VimwikiBoldItalic
|
||||
@ -395,6 +397,7 @@ hi def link VimwikiCodeT VimwikiCode
|
||||
|
||||
hi def link VimwikiPre PreProc
|
||||
hi def link VimwikiPreT VimwikiPre
|
||||
hi def link VimwikiPreDelim VimwikiPre
|
||||
|
||||
hi def link VimwikiMath Number
|
||||
hi def link VimwikiMathT VimwikiMath
|
||||
@ -458,13 +461,13 @@ call vimwiki#u#reload_regexes_custom()
|
||||
|
||||
|
||||
" FIXME it now does not make sense to pretend there is a single syntax "vimwiki"
|
||||
let b:current_syntax="vimwiki"
|
||||
let b:current_syntax='vimwiki'
|
||||
|
||||
|
||||
" EMBEDDED syntax setup
|
||||
let s:nested = vimwiki#vars#get_wikilocal('nested_syntaxes')
|
||||
if vimwiki#vars#get_wikilocal('automatic_nested_syntaxes')
|
||||
let s:nested = extend(s:nested, vimwiki#base#detect_nested_syntax(), "keep")
|
||||
let s:nested = extend(s:nested, vimwiki#base#detect_nested_syntax(), 'keep')
|
||||
endif
|
||||
if !empty(s:nested)
|
||||
for [s:hl_syntax, s:vim_syntax] in items(s:nested)
|
||||
|
@ -13,38 +13,36 @@ let s:markdown_syntax = g:vimwiki_syntax_variables['markdown']
|
||||
let s:markdown_syntax.rxEqIn = '\$[^$`]\+\$'
|
||||
let s:markdown_syntax.char_eqin = '\$'
|
||||
|
||||
" text: *strong*
|
||||
" let s:markdown_syntax.rxBold = '\*[^*]\+\*'
|
||||
" text: **strong** or __strong__
|
||||
let s:markdown_syntax.rxBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||
\'\*'.
|
||||
\'\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)'.
|
||||
\'\*'.
|
||||
\'\(\*\|_\)\{2\}'.
|
||||
\'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
|
||||
\'\1\{2\}'.
|
||||
\'\%([[:punct:]]\|\s\|$\)\@='
|
||||
let s:markdown_syntax.char_bold = '*'
|
||||
let s:markdown_syntax.char_bold = '\*\*\|__'
|
||||
|
||||
" text: _emphasis_
|
||||
" let s:markdown_syntax.rxItalic = '_[^_]\+_'
|
||||
" text: _emphasis_ or *emphasis*
|
||||
let s:markdown_syntax.rxItalic = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||
\'_'.
|
||||
\'\%([^_`[:space:]][^_`]*[^_`[:space:]]\|[^_`[:space:]]\)'.
|
||||
\'_'.
|
||||
\'\(\*\|_\)'.
|
||||
\'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
|
||||
\'\1'.
|
||||
\'\%([[:punct:]]\|\s\|$\)\@='
|
||||
let s:markdown_syntax.char_italic = '_'
|
||||
let s:markdown_syntax.char_italic = '\*\|_'
|
||||
|
||||
" text: *_bold italic_* or _*italic bold*_
|
||||
let s:markdown_syntax.rxBoldItalic = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||
\'\*_'.
|
||||
\'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
|
||||
\'_\*'.
|
||||
\'\(\*\)\{3\}'.
|
||||
\'\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)'.
|
||||
\'\1\{3\}'.
|
||||
\'\%([[:punct:]]\|\s\|$\)\@='
|
||||
let s:markdown_syntax.char_bolditalic = '\*_'
|
||||
let s:markdown_syntax.char_bolditalic = '\*\*\*'
|
||||
|
||||
let s:markdown_syntax.rxItalicBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||
\'_\*'.
|
||||
\'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
|
||||
\'\*_'.
|
||||
\'\(_\)\{3\}'.
|
||||
\'\%([^_`[:space:]][^_`]*[^_`[:space:]]\|[^_`[:space:]]\)'.
|
||||
\'\1\{3\}'.
|
||||
\'\%([[:punct:]]\|\s\|$\)\@='
|
||||
let s:markdown_syntax.char_italicbold = '_\*'
|
||||
let s:markdown_syntax.char_italicbold = '___'
|
||||
|
||||
" text: `code`
|
||||
let s:markdown_syntax.rxCode = '`[^`]\+`'
|
||||
@ -69,7 +67,7 @@ let s:markdown_syntax.symH = 0
|
||||
|
||||
|
||||
" <hr>, horizontal rule
|
||||
let s:markdown_syntax.rxHR = '^-----*$'
|
||||
let s:markdown_syntax.rxHR = '\(^---*$\|^___*$\|^\*\*\**$\)'
|
||||
|
||||
" Tables. Each line starts and ends with '|'; each cell is separated by '|'
|
||||
let s:markdown_syntax.rxTableSep = '|'
|
||||
@ -81,9 +79,11 @@ let s:markdown_syntax.number_types = ['1.']
|
||||
let s:markdown_syntax.list_markers = ['-', '*', '+', '1.']
|
||||
let s:markdown_syntax.rxListDefine = '::\%(\s\|$\)'
|
||||
|
||||
" Preformatted text
|
||||
let s:markdown_syntax.rxPreStart = '```'
|
||||
let s:markdown_syntax.rxPreEnd = '```'
|
||||
" Preformatted text (code blocks)
|
||||
let s:markdown_syntax.rxPreStart = '\%(`\{3,}\|\~\{3,}\)'
|
||||
let s:markdown_syntax.rxPreEnd = '\%(`\{3,}\|\~\{3,}\)'
|
||||
" TODO see syntax/vimwiki_markdown_custom.vim for more info
|
||||
" let s:markdown_syntax.rxIndentedCodeBlock = '\%(^\n\)\@1<=\%(\%(\s\{4,}\|\t\+\).*\n\)\+'
|
||||
|
||||
" Math block
|
||||
let s:markdown_syntax.rxMathStart = '\$\$'
|
||||
|
@ -1,10 +1,10 @@
|
||||
" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
|
||||
" Vimwiki syntax file
|
||||
" Description: Defines markdown custom syntax
|
||||
" Home: https://github.com/vimwiki/vimwiki/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function! s:add_target_syntax_ON(target, type)
|
||||
function! s:add_target_syntax_ON(target, type) abort
|
||||
let prefix0 = 'syntax match '.a:type.' `'
|
||||
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char'
|
||||
let prefix1 = 'syntax match '.a:type.'T `'
|
||||
@ -14,7 +14,7 @@ function! s:add_target_syntax_ON(target, type)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:add_target_syntax_OFF(target, type)
|
||||
function! s:add_target_syntax_OFF(target, type) abort
|
||||
let prefix0 = 'syntax match VimwikiNoExistsLink `'
|
||||
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char'
|
||||
let prefix1 = 'syntax match VimwikiNoExistsLinkT `'
|
||||
@ -24,18 +24,18 @@ function! s:add_target_syntax_OFF(target, type)
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:wrap_wikilink1_rx(target)
|
||||
function! s:wrap_wikilink1_rx(target) abort
|
||||
return vimwiki#vars#get_syntaxlocal('rxWikiLink1InvalidPrefix') . a:target.
|
||||
\ vimwiki#vars#get_syntaxlocal('rxWikiLink1InvalidSuffix')
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:existing_mkd_refs()
|
||||
function! s:existing_mkd_refs() abort
|
||||
return keys(vimwiki#markdown_base#scan_reflinks())
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:highlight_existing_links()
|
||||
function! s:highlight_existing_links() abort
|
||||
" Wikilink1
|
||||
" Conditional highlighting that depends on the existence of a wiki file or
|
||||
" directory is only available for *schemeless* wiki links
|
||||
@ -99,6 +99,7 @@ endif
|
||||
|
||||
" Weblink
|
||||
call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWeblink1'), 'VimwikiWeblink1')
|
||||
call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxImage'), 'VimwikiImage')
|
||||
|
||||
|
||||
" WikiLink
|
||||
@ -133,7 +134,7 @@ endfor
|
||||
|
||||
|
||||
" concealed chars
|
||||
if exists("+conceallevel")
|
||||
if exists('+conceallevel')
|
||||
syntax conceal on
|
||||
endif
|
||||
|
||||
@ -157,8 +158,14 @@ execute 'syn match VimwikiWeblink1Char "'.
|
||||
\ vimwiki#vars#get_syntaxlocal('rxWeblink1Prefix1').'"'.s:options
|
||||
execute 'syn match VimwikiWeblink1Char "'.
|
||||
\ vimwiki#vars#get_syntaxlocal('rxWeblink1Suffix1').'"'.s:options
|
||||
"image
|
||||
execute 'syn match VimwikiImageChar "!"'.s:options
|
||||
execute 'syn match VimwikiImageChar "'.
|
||||
\ vimwiki#vars#get_syntaxlocal('rxWeblink1Prefix1').'"'.s:options
|
||||
execute 'syn match VimwikiImageChar "'.
|
||||
\ vimwiki#vars#get_syntaxlocal('rxWeblink1Suffix1').'"'.s:options
|
||||
|
||||
if exists("+conceallevel")
|
||||
if exists('+conceallevel')
|
||||
syntax conceal off
|
||||
endif
|
||||
|
||||
@ -183,9 +190,14 @@ syntax match VimwikiTableRow /^\s*|.\+|\s*$/
|
||||
\ VimwikiEqInT,
|
||||
\ @Spell
|
||||
|
||||
|
||||
" TODO fix behavior within lists https://github.github.com/gfm/#list-items
|
||||
" indented code blocks https://github.github.com/gfm/#indented-code-blocks
|
||||
" execute 'syntax match VimwikiIndentedCodeBlock /' . vimwiki#vars#get_syntaxlocal('rxIndentedCodeBlock') . '/'
|
||||
" hi def link VimwikiIndentedCodeBlock VimwikiPre
|
||||
|
||||
" syntax group highlighting
|
||||
hi def link VimwikiImage VimwikiLink
|
||||
hi def link VimwikiImageT VimwikiLink
|
||||
hi def link VimwikiWeblink1 VimwikiLink
|
||||
hi def link VimwikiWeblink1T VimwikiLink
|
||||
|
||||
|
75
test/README.md
Normal file
@ -0,0 +1,75 @@
|
||||
# Vimwiki Tests
|
||||
|
||||
This directory contains a test framework used to automatically test/verify
|
||||
Vimwiki functionality. It is based on the following tools:
|
||||
|
||||
- [vim-testbed GitHub](https://github.com/tweekmonster/vim-testbed) or on [testbed/vim dockerhub](https://hub.docker.com/r/testbed/vim)
|
||||
- [Vader](https://github.com/junegunn/vader.vim)
|
||||
- [Vint](https://github.com/Kuniwak/vint)
|
||||
|
||||
## Resources
|
||||
|
||||
- [Vim patches](http://ftp.vim.org/pub/vim/patches/)
|
||||
- Example test cases:
|
||||
- [vim-easy-align](https://github.com/junegunn/vim-easy-align/tree/master/test)
|
||||
- [vim-plug](https://github.com/junegunn/vim-plug/tree/master/test)
|
||||
- [ale](https://github.com/w0rp/ale/tree/master/test)
|
||||
- [Other projects](https://github.com/junegunn/vader.vim/wiki/Projects-using-Vader)
|
||||
|
||||
## Building Docker Image
|
||||
|
||||
To build the Docker image run `docker build -t vimwiki .` from the Vimwiki
|
||||
repository root (same location as the Dockerfile).
|
||||
|
||||
## Running Tests
|
||||
|
||||
### Manual Steps
|
||||
|
||||
Starting in the test directory run this command:
|
||||
|
||||
```sh
|
||||
docker run -it --rm -v $PWD/../:/testplugin -v $PWD/../test:/home vimwiki vim_7.4.1099 -u test/vimrc -i NONE
|
||||
```
|
||||
|
||||
This will open a vim instance in the docker container and then all tests
|
||||
can be run with `:Vader test/*` or individual tests can be run.
|
||||
|
||||
**Note:** Substitute `vim_7.4.1099` for any of the vim versions in the Dockerfile.
|
||||
|
||||
### Automated Tests
|
||||
|
||||
The script in the `test/` directory named `run_test.sh` can be used to
|
||||
automatically run all tests for all installed vim versions. The vim/nvim
|
||||
versions are parsed from the Dockerfile. This script will also run `Vint` for all
|
||||
plugin source files. For more information run `./run_tests.sh -h`.
|
||||
|
||||
## Inside the container
|
||||
|
||||
- `$USER` -> `vimtest` : unprivileged => very hard to mess up things
|
||||
- `$HOME` -> `/home/vimtest` : but it is readonly !
|
||||
- `$PWD` -> `/testplugin` : mapped to vimwiki plugin root directory
|
||||
|
||||
For more information, read the [base docker image](https://github.com/tweekmonster/vim-testbed)
|
||||
|
||||
## Known Issues
|
||||
|
||||
1. neovim v0.2.x does not work correctly with Vader output from the docker
|
||||
container. No test results are printed and an error message saying
|
||||
`Vim: Error reading input, exiting...`
|
||||
- Probably need to look into this more and determine if the issue is Vader,
|
||||
Neovim, or Docker.
|
||||
2. Vader does not play nice with the location list. Tests that use the location
|
||||
list should be placed in `independent_runs/`.
|
||||
- [Vader Issue #199](https://github.com/junegunn/vader.vim/issues/199)
|
||||
|
||||
## Notable Vim patches
|
||||
|
||||
- `v7.3.831` `getbufvar` added a default value
|
||||
- `v7.4.236` add ability to check patch with has("patch-7.4.123")
|
||||
- `v7.4.279` added the option to for `globpath()` to return a list
|
||||
- `v7.4.1546` sticky type checking removed (allow a variables type to change)
|
||||
- `v7.4.1989` `filter()` accepts a Funcref
|
||||
- `v7.4.2044` lambda support added - see `:h expr-lambda`
|
||||
- `v7.4.2120` Added function "closure" argument
|
||||
- `v7.4.2137` add `funcref()`
|
||||
- `v8.0` async jobs and timers
|
103
test/command_generate_links.vader
Normal file
@ -0,0 +1,103 @@
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
Execute (Copy Wiki's Resources):
|
||||
Log "Start: Copy Resources"
|
||||
call CopyResources()
|
||||
|
||||
# 1 VimwikiGenerateLinks
|
||||
##########################
|
||||
|
||||
Given (Void):
|
||||
|
||||
Execute (Goto markdown resource wiki):
|
||||
VimwikiIndex 2
|
||||
AssertEqual $HOME . '/testmarkdown/index.md', expand('%')
|
||||
|
||||
Execute (Edit Test file / VimwikiGenerateLinks):
|
||||
edit $HOME/testmarkdown/Test.md
|
||||
AssertEqual $HOME . '/testmarkdown/Test.md', expand('%')
|
||||
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
|
||||
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
|
||||
VimwikiGenerateLinks
|
||||
|
||||
Expect (The links with a header):
|
||||
|
||||
|
||||
# Generated Links
|
||||
|
||||
- [Buzz Bozz](buzz_bozz)
|
||||
- [Test Wiki](index)
|
||||
|
||||
Do (Save Test.md && Re-GenerateLinks):
|
||||
:edit $HOME/testmarkdown/Test.md\<CR>
|
||||
:set bt=\<CR>
|
||||
:write %\<CR>
|
||||
:VimwikiGenerateLinks\<CR>
|
||||
|
||||
Expect (The links with a header with file Test):
|
||||
|
||||
|
||||
# Generated Links
|
||||
|
||||
- [Generated Links](Test)
|
||||
- [Buzz Bozz](buzz_bozz)
|
||||
- [Test Wiki](index)
|
||||
|
||||
|
||||
# 2 VimwikiDiaryGenerateLinks
|
||||
#############################
|
||||
|
||||
Execute (New Command):
|
||||
Log "2. Testing VimwikiDiaryGenerateLinks TODO"
|
||||
set sw=4
|
||||
AssertEqual 4, &sw
|
||||
|
||||
Do (Edit diary/2019-12-10):
|
||||
:edit $HOME/testmarkdown/diary/2019-12-10.md\<CR>
|
||||
iinformative content\<Esc>
|
||||
:call WriteMe()\<CR>
|
||||
|
||||
Do (Edit and save diary/2019-07-13):
|
||||
:edit $HOME/testmarkdown/diary/2019-07-13.md\<CR>
|
||||
i# informative title\<Esc>
|
||||
:call WriteMe()\<CR>
|
||||
|
||||
Do (Edit and save diary/2018-03-01):
|
||||
:edit $HOME/testmarkdown/diary/2019-03-01.md\<CR>
|
||||
:call WriteMe()\<CR>
|
||||
|
||||
|
||||
Do (Edit diary.md && GenerateDiaryLinks):
|
||||
:edit $HOME/testmarkdown/diary/diary.md\<CR>
|
||||
:VimwikiDiaryGenerateLinks\<CR>
|
||||
|
||||
Expect (diary index generated):
|
||||
# Diary
|
||||
|
||||
## 2019
|
||||
|
||||
### December
|
||||
|
||||
- [2019-12-10](2019-12-10)
|
||||
|
||||
### July
|
||||
|
||||
- [informative title](2019-07-13)
|
||||
|
||||
### March
|
||||
|
||||
- [2019-03-01](2019-03-01)
|
||||
|
||||
|
||||
Execute (Clean):
|
||||
Log "End: Clean"
|
||||
call system("rm $HOME/testmarkdown/diary/2019-12-10.md")
|
||||
call system("rm $HOME/testmarkdown/diary/2019-07-13.md")
|
||||
call system("rm $HOME/testmarkdown/diary/2019-03-01.md")
|
||||
call system("rm $HOME/testmarkdown/diary/diary.md")
|
||||
|
||||
|
||||
Include: vader_includes/vader_teardown.vader
|
||||
|
||||
" vim: sw=2 foldmethod=indent foldlevel=30 foldignore=
|
96
test/command_generate_tags.vader
Normal file
@ -0,0 +1,96 @@
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
Execute (Copy Wiki's Resources):
|
||||
Log "Start: Copy Resources"
|
||||
call CopyResources()
|
||||
|
||||
Execute (Setup):
|
||||
set sw=4
|
||||
AssertEqual 4, &sw
|
||||
|
||||
Execute (Edit Test-Tag.md):
|
||||
edit $HOME/testmarkdown/Test-Tag.md
|
||||
AssertEqual $HOME . '/testmarkdown/Test-Tag.md', expand('%')
|
||||
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
|
||||
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
|
||||
Do (Create File Content):
|
||||
:edit $HOME/testmarkdown/Test-Tag.md\<CR>
|
||||
I
|
||||
:top-tag:\<CR>
|
||||
\<CR>
|
||||
# A header\<CR>
|
||||
\<CR>
|
||||
:test-tag:\<CR>
|
||||
\<CR>
|
||||
# Another header\<CR>
|
||||
\<CR>
|
||||
Words here.\<CR>
|
||||
If tag isn't within 2 lines of header then it has a direct link instead of\<CR>
|
||||
a link to the header.\<CR>
|
||||
\<CR>
|
||||
:second-tag:
|
||||
\<Esc>
|
||||
:write\<CR>
|
||||
:VimwikiRebuildTags\<CR>
|
||||
|
||||
Execute (Edit tags file):
|
||||
edit $HOME/testmarkdown/.vimwiki_tags
|
||||
AssertEqual $HOME . '/testmarkdown/.vimwiki_tags', expand('%')
|
||||
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
|
||||
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
|
||||
# Note: tags file uses tabs
|
||||
Expect (Correctly formatted tags file):
|
||||
!_TAG_FILE_FORMAT 2
|
||||
!_TAG_FILE_SORTED 1
|
||||
!_TAG_OUTPUT_MODE vimwiki-tags
|
||||
!_TAG_PROGRAM_AUTHOR Vimwiki
|
||||
!_TAG_PROGRAM_NAME Vimwiki Tags
|
||||
!_TAG_PROGRAM_URL https://github.com/vimwiki/vimwiki
|
||||
!_TAG_PROGRAM_VERSION 2.5
|
||||
second-tag Test-Tag.md 13;" vimwiki:Test-Tag\tTest-Tag#second-tag
|
||||
test-tag Test-Tag.md 5;" vimwiki:Test-Tag\tTest-Tag#A header
|
||||
top-tag Test-Tag.md 1;" vimwiki:Test-Tag\tTest-Tag
|
||||
|
||||
Execute (Generate tags):
|
||||
edit $HOME/testmarkdown/Test-Tag.md
|
||||
VimwikiGenerateTagLinks
|
||||
|
||||
Expect (Correctly generated tags section):
|
||||
:top-tag:
|
||||
|
||||
# A header
|
||||
|
||||
:test-tag:
|
||||
|
||||
# Another header
|
||||
|
||||
Words here.
|
||||
If tag isn't within 2 lines of header then it has a direct link instead of
|
||||
a link to the header.
|
||||
|
||||
:second-tag:
|
||||
|
||||
# Generated Tags
|
||||
|
||||
## second-tag
|
||||
|
||||
- [second-tag](Test-Tag#second-tag)
|
||||
|
||||
## test-tag
|
||||
|
||||
- [A header](Test-Tag#A header)
|
||||
|
||||
## top-tag
|
||||
|
||||
- [Test-Tag](Test-Tag)
|
||||
|
||||
Execute (Clean Test-Tag and .vimwiki_tags):
|
||||
Log "End: Clean"
|
||||
call system("rm $HOME/testmarkdown/Test.md")
|
||||
call system("rm $HOME/testmarkdown/.vimwiki_tags")
|
||||
call system("rm $HOME/testmarkdown/Test-Tag.md")
|
||||
call DeleteHiddenBuffers()
|
||||
|
||||
Include: vader_includes/vader_teardown.vader
|
64
test/command_goto.vader
Normal file
@ -0,0 +1,64 @@
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
|
||||
Execute (Copy Wiki's Resources):
|
||||
Log "Start: Copy Resources"
|
||||
call CopyResources()
|
||||
|
||||
|
||||
Execute (VimwikiGoto buzz_bozz && Assert):
|
||||
VimwikiIndex 2
|
||||
VimwikiGoto buzz_bozz
|
||||
AssertEqual $HOME . '/testmarkdown/buzz_bozz.md', expand('%')
|
||||
|
||||
Do (VimwikiGoto <CR> buzz_bozz && Assert):
|
||||
:VimwikiIndex 2\<CR>
|
||||
:VimwikiGoto\<CR>
|
||||
buzz_bozz\<CR>
|
||||
:AssertEqual $HOME . '/testmarkdown/buzz_bozz.md', expand('%')\<CR>
|
||||
|
||||
Execute (:VimwikiGoto + Completion):
|
||||
VimwikiIndex 2
|
||||
AssertEqual $HOME . '/testmarkdown/index.md', expand('%')
|
||||
let s_complete=string(vimwiki#base#get_globlinks_escaped())
|
||||
Assert -1 != stridx(s_complete, 'buzz_bozz')
|
||||
|
||||
Execute (Create dir1/dir2/test_goto_file.md):
|
||||
call system("mkdir $HOME/testmarkdown/dir1")
|
||||
call system("mkdir $HOME/testmarkdown/dir1/dir2")
|
||||
edit $HOME/testmarkdown/dir1/dir2/test_goto_file.md
|
||||
call WriteMe()
|
||||
|
||||
Execute (:VimwikiGoto + Completion in directory):
|
||||
" Return to base
|
||||
VimwikiIndex 2
|
||||
AssertEqual $HOME . '/testmarkdown/index.md', expand('%')
|
||||
|
||||
" Complete without argment
|
||||
let s_complete1=string(vimwiki#base#get_globlinks_escaped())
|
||||
Assert -1 != stridx(s_complete1, 'test_goto_file')
|
||||
|
||||
" Complete with file argument
|
||||
let s_complete2=string(vimwiki#base#get_globlinks_escaped('test_goto_file'))
|
||||
Assert -1 != stridx(s_complete2, 'test_goto_file')
|
||||
|
||||
" Complete with start of file argument
|
||||
let s_complete3=string(vimwiki#base#get_globlinks_escaped('test_got'))
|
||||
Assert -1 != stridx(s_complete3, 'test_goto_file')
|
||||
|
||||
" Complete with (nested) dir2 argument
|
||||
let s_complete4=string(vimwiki#base#get_globlinks_escaped('dir2'))
|
||||
Assert -1 != stridx(s_complete4, 'test_goto_file')
|
||||
|
||||
" Complete with bad argument
|
||||
let l_complete5=vimwiki#base#get_globlinks_escaped('this_string_is_nowhere')
|
||||
let s_complete5=string(l_complete5)
|
||||
Assert -1 == stridx(s_complete5, 'test_goto_file')
|
||||
AssertEqual 0, len(l_complete5)
|
||||
|
||||
Execute (Clean):
|
||||
Log "End: Clean"
|
||||
call system("rm $HOME/testmarkdown/dir1")
|
||||
|
||||
Include: vader_includes/vader_teardown.vader
|
||||
# vim: sw=2 foldmethod=indent foldlevel=30 foldignore=
|
189
test/command_rename_link.vader
Normal file
@ -0,0 +1,189 @@
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
|
||||
Execute (Copy Wiki's Resources):
|
||||
Log "Start: Copy Resources"
|
||||
call CopyResources()
|
||||
|
||||
|
||||
Execute (Mkdir dir1 dir2 dir11 dir12):
|
||||
call system("mkdir $HOME/testmarkdown/dir1")
|
||||
call system("mkdir $HOME/testmarkdown/dir1/dir11")
|
||||
call system("mkdir $HOME/testmarkdown/dir1/dir12")
|
||||
call system("mkdir $HOME/testmarkdown/dir2")
|
||||
|
||||
|
||||
Given vimwiki (Void):
|
||||
|
||||
|
||||
Execute (Create Test-Rename -> dir1/dir11/in_dir11.md and dir1/dir12/in_dir12.md and dir2/in_dir2.md):
|
||||
edit $HOME/testmarkdown/Test-Rename.md
|
||||
AssertEqual $HOME . '/testmarkdown/Test-Rename.md', expand('%')
|
||||
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
|
||||
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
call append(0, ['# Test Rename', 'in_root.md', 'dir1/dir11/in_dir11.md', 'dir1/dir12/in_dir12.md', 'dir2/in_dir2.md'])
|
||||
call WriteMe()
|
||||
|
||||
Do (Create in_root):
|
||||
:Log 'Open Test-Rename.md'\<CR>
|
||||
:edit $HOME/testmarkdown/Test-Rename.md\<CR>
|
||||
:AssertEqual $HOME . '/testmarkdown/Test-Rename.md', expand('%')\<CR>\<Esc>
|
||||
|
||||
:Log 'Delete last line (easyer latter checks without trailing spaces)'\<CR>
|
||||
Gdd
|
||||
|
||||
:Log 'Open in_root.md'\<CR>
|
||||
gg
|
||||
j\<CR>
|
||||
j\<CR>
|
||||
j\<CR>
|
||||
j\<CR>
|
||||
ggj0y$
|
||||
:AssertEqual '[in_root](in_root.md)', @"\<CR>
|
||||
0\<CR>
|
||||
:AssertEqual $HOME . '/testmarkdown/in_root.md', expand('%')\<CR>
|
||||
|
||||
:Log 'Add link in_root.md -> dir1/dir11/in_dir11'\<CR>
|
||||
ggi# Title in root\<CR>\<Esc>
|
||||
idir1/dir11/in_dir11\<Esc>
|
||||
:call WriteMe()\<CR>
|
||||
:AssertEqual $HOME . '/testmarkdown/in_root.md', expand('%')\<CR>
|
||||
|
||||
:Log 'Open in_dir11.md: creating dirs'\<CR>
|
||||
ggj"ay$
|
||||
:AssertEqual 'reg dir1/dir11/in_dir11', 'reg ' . @a\<CR>
|
||||
0\<CR>\<CR>
|
||||
:AssertEqual 'file ' . $HOME . '/testmarkdown/dir1/dir11/in_dir11.md', 'file ' . expand('%')\<CR>
|
||||
|
||||
:Log 'One backspace for fun'\<CR>
|
||||
\<BS>
|
||||
:AssertEqual 'file ' . $HOME . '/testmarkdown/in_root.md', 'file ' . expand('%')\<CR>
|
||||
|
||||
|
||||
Do (Create dir_11 -> dir_11):
|
||||
:edit $HOME/testmarkdown/dir1/dir11/in_dir11_fix.md\<CR>
|
||||
|
||||
:Log 'Add link in_dir11_fix.md -> in_dir11'\<CR>
|
||||
ggi# Title in dir11 fix\<CR>\<Esc>
|
||||
iin_dir11\<Esc>
|
||||
:call WriteMe()\<CR>
|
||||
|
||||
:Log 'Open in_dir11.md: creating dirs'\<CR>
|
||||
ggj"ay$
|
||||
:AssertEqual 'reg in_dir11', 'reg ' . @a\<CR>
|
||||
0\<CR>\<CR>
|
||||
y\<CR>
|
||||
:AssertEqual 'file ' . $HOME . '/testmarkdown/dir1/dir11/in_dir11.md', 'file ' . expand('%')\<CR>
|
||||
|
||||
:Log 'One backspace for fun'\<CR>
|
||||
\<BS>
|
||||
:AssertEqual 'file ' . $HOME . '/testmarkdown/dir1/dir11/in_dir11_fix.md', 'file ' . expand('%')\<CR>
|
||||
|
||||
|
||||
Execute (Fill in_dir11 content):
|
||||
edit $HOME/testmarkdown/dir1/dir11/in_dir11.md
|
||||
call append(0, ['# Title in_dir11', '[dir2 link](../../dir2/in_dir2.md)'])
|
||||
call WriteMe()
|
||||
|
||||
|
||||
Do (RenameLink in_dir11 -> new_dir11):
|
||||
:edit $HOME/testmarkdown/dir1/dir11/in_dir11.md\<CR>
|
||||
:AssertEqual 'file ' . $HOME . '/testmarkdown/dir1/dir11/in_dir11.md', 'file ' . expand('%')\<CR>
|
||||
:AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')\<CR>
|
||||
|
||||
:Log 'Rename'\<CR>
|
||||
:call WriteMe()\<CR>
|
||||
:VimwikiRenameFile\<CR>
|
||||
y\<CR>
|
||||
in_dir11_new\<CR>
|
||||
:call WriteMe()\<Cr>
|
||||
|
||||
:Log 'Append filename'\<CR>
|
||||
:call append('$', [expand('%')])\<CR>
|
||||
|
||||
|
||||
Expect(With new filename at the end):
|
||||
# Title in_dir11
|
||||
[dir2 link](../../dir2/in_dir2.md)
|
||||
|
||||
/home/vimtest/testmarkdown/dir1/dir11/in_dir11_new.md
|
||||
|
||||
|
||||
Execute (edit in_dir11_fix):
|
||||
edit $HOME/testmarkdown/dir1/dir11/in_dir11_fix.md
|
||||
|
||||
Expect(Link to in_dir11_new):
|
||||
# Title in dir11 fix
|
||||
[in_dir11](in_dir11_new)
|
||||
|
||||
|
||||
Execute (edit Test-Rename.md):
|
||||
edit $HOME/testmarkdown/Test-Rename.md
|
||||
|
||||
|
||||
Expect (Link to in_dir11_new):
|
||||
# Test Rename
|
||||
[in_root](in_root.md)
|
||||
[dir1 dir11 in_dir11](dir1/dir11/in_dir11_new.md)
|
||||
[dir1 dir12 in_dir12](dir1/dir12/in_dir12.md)
|
||||
[dir2 in_dir2](dir2/in_dir2.md)
|
||||
|
||||
|
||||
|
||||
Do (in_dir2 -> in_dir2_new):
|
||||
:edit $HOME/testmarkdown/dir2/in_dir2.md\<CR>
|
||||
|
||||
:Log 'Append filename'\<CR>
|
||||
:call append('$', [expand('%')])\<CR>
|
||||
|
||||
:Log 'Rename'\<CR>
|
||||
:call WriteMe()\<CR>
|
||||
:VimwikiRenameFile\<CR>
|
||||
y\<CR>
|
||||
in_dir2_new\<CR>
|
||||
:call WriteMe()\<Cr>
|
||||
|
||||
:Log 'Append filename'\<CR>
|
||||
:call append('$', [expand('%')])\<CR>
|
||||
|
||||
|
||||
Expect (old and new filenames):
|
||||
|
||||
/home/vimtest/testmarkdown/dir2/in_dir2.md
|
||||
/home/vimtest/testmarkdown/dir2/in_dir2_new.md
|
||||
|
||||
Execute (edit Test-Rename.md):
|
||||
edit $HOME/testmarkdown/Test-Rename.md
|
||||
|
||||
|
||||
Expect (Link to in_dir11_new):
|
||||
# Test Rename
|
||||
[in_root](in_root.md)
|
||||
[dir1 dir11 in_dir11](dir1/dir11/in_dir11_new.md)
|
||||
[dir1 dir12 in_dir12](dir1/dir12/in_dir12.md)
|
||||
[dir2 in_dir2](dir2/in_dir2_new.md)
|
||||
|
||||
|
||||
Execute (edit in_dir11.md):
|
||||
edit $HOME/testmarkdown/dir1/dir11/in_dir11_new.md
|
||||
|
||||
|
||||
Expect (Link to in_dir2_new):
|
||||
# Title in_dir11
|
||||
[dir2 link](../../dir2/in_dir2_new.md)
|
||||
|
||||
/home/vimtest/testmarkdown/dir1/dir11/in_dir11_new.md
|
||||
|
||||
|
||||
Execute (Clean dir1 and dir2):
|
||||
Log "End: Clean"
|
||||
call DeleteHiddenBuffers()
|
||||
call system('rm $HOME/testmarkdown/Test-Rename.md')
|
||||
call system('rm $HOME/testmarkdown/in_root.md')
|
||||
call system('rm -r $HOME/testmarkdown/dir1')
|
||||
call system('rm -r $HOME/testmarkdown/dir2')
|
||||
|
||||
|
||||
Include: vader_includes/vader_teardown.vader
|
||||
|
||||
# vim: sw=2 foldmethod=indent foldlevel=30 foldignore=#
|
149
test/command_toc.vader
Normal file
@ -0,0 +1,149 @@
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
Execute (Reset TOC header to default):
|
||||
let g:vimwiki_global_vars['toc_header'] = "Contents"
|
||||
|
||||
Given vimwiki (Headings):
|
||||
# Header 1
|
||||
random text
|
||||
## Header 1.1
|
||||
random text
|
||||
### Header 1.1.1
|
||||
random text
|
||||
|
||||
# Header 2
|
||||
### Header 2.1.1
|
||||
|
||||
Execute (Set syntax markdown && Set sw=8):
|
||||
call SetSyntax('markdown')
|
||||
set sw=8
|
||||
|
||||
Execute (VimwikiTOC):
|
||||
VimwikiTOC
|
||||
|
||||
Expect (With a TOC sw=8):
|
||||
# Contents
|
||||
|
||||
- [Header 1](#Header 1)
|
||||
- [Header 1.1](#Header 1#Header 1.1)
|
||||
- [Header 1.1.1](#Header 1#Header 1.1#Header 1.1.1)
|
||||
- [Header 2](#Header 2)
|
||||
- [Header 2.1.1](#Header 2#Header 2.1.1)
|
||||
|
||||
# Header 1
|
||||
random text
|
||||
## Header 1.1
|
||||
random text
|
||||
### Header 1.1.1
|
||||
random text
|
||||
|
||||
# Header 2
|
||||
### Header 2.1.1
|
||||
|
||||
Execute (Set sw=4 && VimwikiTOC):
|
||||
set sw=4
|
||||
VimwikiTOC
|
||||
|
||||
Expect (With a TOC sw=4):
|
||||
# Contents
|
||||
|
||||
- [Header 1](#Header 1)
|
||||
- [Header 1.1](#Header 1#Header 1.1)
|
||||
- [Header 1.1.1](#Header 1#Header 1.1#Header 1.1.1)
|
||||
- [Header 2](#Header 2)
|
||||
- [Header 2.1.1](#Header 2#Header 2.1.1)
|
||||
|
||||
# Header 1
|
||||
random text
|
||||
## Header 1.1
|
||||
random text
|
||||
### Header 1.1.1
|
||||
random text
|
||||
|
||||
# Header 2
|
||||
### Header 2.1.1
|
||||
|
||||
Do (Destroy some stuff):
|
||||
jj
|
||||
dd
|
||||
jj
|
||||
dd
|
||||
|
||||
Execute (VimwikiTOC):
|
||||
VimwikiTOC
|
||||
|
||||
Expect (Brand new TOC):
|
||||
# Contents
|
||||
|
||||
- [Header 1](#Header 1)
|
||||
- [Header 1.1](#Header 1#Header 1.1)
|
||||
- [Header 1.1.1](#Header 1#Header 1.1#Header 1.1.1)
|
||||
- [Header 2](#Header 2)
|
||||
- [Header 2.1.1](#Header 2#Header 2.1.1)
|
||||
|
||||
# Header 1
|
||||
random text
|
||||
## Header 1.1
|
||||
random text
|
||||
### Header 1.1.1
|
||||
random text
|
||||
|
||||
# Header 2
|
||||
### Header 2.1.1
|
||||
|
||||
|
||||
Execute (Let toc_header = Sommaire && VimwikiTOC):
|
||||
let g:vimwiki_global_vars['toc_header'] = "Sommaire"
|
||||
VimwikiTOC
|
||||
|
||||
Expect (Append a Sommaire && Leave Contents alone):
|
||||
# Sommaire
|
||||
|
||||
- [Header 1](#Header 1)
|
||||
- [Header 1.1](#Header 1#Header 1.1)
|
||||
- [Header 1.1.1](#Header 1#Header 1.1#Header 1.1.1)
|
||||
- [Header 2](#Header 2)
|
||||
- [Header 2.1.1](#Header 2#Header 2.1.1)
|
||||
|
||||
# Header 1
|
||||
random text
|
||||
## Header 1.1
|
||||
random text
|
||||
### Header 1.1.1
|
||||
random text
|
||||
|
||||
# Header 2
|
||||
### Header 2.1.1
|
||||
|
||||
Do (Destroy some stuff):
|
||||
jj
|
||||
dd
|
||||
jj
|
||||
dd
|
||||
|
||||
Execute (VimwikiTOC):
|
||||
VimwikiTOC
|
||||
|
||||
Expect (Brand new TOC with sommaire):
|
||||
# Sommaire
|
||||
|
||||
- [Header 1](#Header 1)
|
||||
- [Header 1.1](#Header 1#Header 1.1)
|
||||
- [Header 1.1.1](#Header 1#Header 1.1#Header 1.1.1)
|
||||
- [Header 2](#Header 2)
|
||||
- [Header 2.1.1](#Header 2#Header 2.1.1)
|
||||
|
||||
# Header 1
|
||||
random text
|
||||
## Header 1.1
|
||||
random text
|
||||
### Header 1.1.1
|
||||
random text
|
||||
|
||||
# Header 2
|
||||
### Header 2.1.1
|
||||
|
||||
|
||||
Include: vader_includes/vader_teardown.vader
|
||||
|
||||
" vim: sw=2 foldmethod=indent foldlevel=30 foldignore=
|
59
test/convert_default_html.vader
Normal file
@ -0,0 +1,59 @@
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
Execute (Copy Wiki's Resources):
|
||||
Log "Start: Copy Resources"
|
||||
call CopyResources()
|
||||
|
||||
Given (Void):
|
||||
|
||||
Execute (Edit TestHtml Wiki):
|
||||
edit $HOME/testwiki/TestHtml.wiki
|
||||
AssertEqual $HOME . '/testwiki/TestHtml.wiki', expand('%')
|
||||
AssertEqual 'default', vimwiki#vars#get_wikilocal('syntax')
|
||||
AssertEqual 0, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
|
||||
Do (Markdwon with %plainhtml):
|
||||
:edit $HOME/testwiki/TestHtml.wiki\<CR>
|
||||
i%plainhtml<div id="test">\<CR>
|
||||
my paragraph\<CR>
|
||||
%plainhtml</div>\<CR>\<Esc>
|
||||
:set bt=\<CR>
|
||||
:write\<CR>
|
||||
|
||||
Execute (Save and Convert to html):
|
||||
edit $HOME/testwiki/TestHtml.wiki
|
||||
Vimwiki2HTML
|
||||
|
||||
Given (Void):
|
||||
|
||||
Do (Get Html body):
|
||||
:read $HOME/html/default/TestHtml.html\<CR>
|
||||
# Goto body
|
||||
gg/<body>\<CR>
|
||||
# Copy in b
|
||||
"bdat
|
||||
# Delete All
|
||||
ggdG
|
||||
# Paste body
|
||||
"bP
|
||||
# Remove last line
|
||||
Gdd
|
||||
# Save (Not necessary)
|
||||
:write
|
||||
|
||||
|
||||
|
||||
Expect (Plain Html):
|
||||
# the whole default html file should be here as a base + the modifications
|
||||
# from "Given"
|
||||
<body>
|
||||
|
||||
<div id="test">
|
||||
<p>
|
||||
my paragraph
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
Include: vader_includes/vader_teardown.vader
|
461
test/independent_runs/map.vader
Normal file
@ -0,0 +1,461 @@
|
||||
Include: vader_setup
|
||||
|
||||
|
||||
# 0 Configure {{{1
|
||||
##################
|
||||
|
||||
Execute (Configure: Set vimwiki list to markdown resource):
|
||||
Log "Let mapleader = ,"
|
||||
let mapleader = ','
|
||||
|
||||
Log "Declare function DestroyVar"
|
||||
function! DestroyVar(var)
|
||||
if ! exists(a:var) | return | endif
|
||||
execute "unlet " . a:var
|
||||
endfunction
|
||||
|
||||
Log "Declare function AssertTab"
|
||||
function! AssertTab(nr)
|
||||
" Vader is creating 2 tabs
|
||||
AssertEqual a:nr + 2, tabpagenr()
|
||||
endfunction
|
||||
|
||||
Log "Destroy vimrc or previous run heritage"
|
||||
call DestroyVar('g:vimwiki_list')
|
||||
call DestroyVar('g:vimwiki_global_vars')
|
||||
call DestroyVar('g:vimwiki_wikilocal_vars')
|
||||
|
||||
Log "Destroy vimrc variable, works better that way"
|
||||
call DestroyVar('g:vimwiki_default')
|
||||
call DestroyVar('g:vimwiki_markdown')
|
||||
call DestroyVar('g:vimwiki_mediawiki')
|
||||
|
||||
Log "Declare my vimwiki_list"
|
||||
let g:vimwiki_list = [{
|
||||
\ 'path': 'test/resources/testmarkdown',
|
||||
\ 'syntax': 'markdown',
|
||||
\ 'ext': '.md'
|
||||
\ }]
|
||||
|
||||
Log "Declare my extension for temporary wiki"
|
||||
let g:vimwiki_ext2syntax = {'.md': 'markdown'}
|
||||
|
||||
Log "Reload vimwiki <- vader_setup.vader"
|
||||
call ReloadVimwiki()
|
||||
|
||||
Execute (Assert: 2 wiki in Index):
|
||||
AssertEqual 2, len(vimwiki_wikilocal_vars)
|
||||
|
||||
Execute (VimwikiIndex):
|
||||
VimwikiIndex 1
|
||||
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
AssertEqual 'vimwiki', &filetype
|
||||
AssertEqual 'test/resources/testmarkdown/', vimwiki_wikilocal_vars[0]['path']
|
||||
AssertEqual 'test/resources/testmarkdown/index.md', expand('%')
|
||||
|
||||
Execute (Open buzz bozz):
|
||||
edit test/resources/testmarkdown/buzz_bozz.md
|
||||
AssertEqual 'test/resources/testmarkdown/buzz_bozz.md', expand('%')
|
||||
|
||||
|
||||
# 1 Global {{{1
|
||||
###############
|
||||
|
||||
Execute (===========================================================):
|
||||
Log "Checking global map"
|
||||
|
||||
Do (,ww -> open index [Assert]):
|
||||
,ww
|
||||
:AssertEqual 'test/resources/testmarkdown/index.md', expand('%')
|
||||
\<CR>
|
||||
:call AssertTab(1)
|
||||
\<CR>
|
||||
|
||||
Do (,wt -> open index in tab [Assert]):
|
||||
,wt
|
||||
:AssertEqual 'test/resources/testmarkdown/index.md', expand('%')
|
||||
\<CR>
|
||||
:call AssertTab(2)
|
||||
\<CR>
|
||||
|
||||
Do (,w,w -> open diary [Assert]):
|
||||
,w,w
|
||||
:AssertEqual 'test/resources/testmarkdown/diary/' . strftime('%Y-%m-%d') . '.md', expand('%')
|
||||
\<CR>
|
||||
:call AssertTab(1)
|
||||
\<CR>
|
||||
|
||||
Do (,w,t -> open diary in tab [Assert]):
|
||||
,w,t
|
||||
:AssertEqual 'test/resources/testmarkdown/diary/' . strftime('%Y-%m-%d') . '.md', expand('%')
|
||||
\<CR>
|
||||
:call AssertTab(2)
|
||||
\<CR>
|
||||
|
||||
Do (,ws -> list and select wiki [Assert]):
|
||||
,ws
|
||||
1
|
||||
\<CR>
|
||||
:AssertEqual 'test/resources/testmarkdown/index.md', expand('%')
|
||||
\<CR>
|
||||
:call AssertTab(1)
|
||||
\<CR>
|
||||
|
||||
Do (,wi -> open diary index [Assert]):
|
||||
,wi
|
||||
:AssertEqual 'test/resources/testmarkdown/diary/diary.md', expand('%')
|
||||
\<CR>
|
||||
:call AssertTab(1)
|
||||
\<CR>
|
||||
|
||||
Do (,w,y -> open yesterday [Assert]):
|
||||
,w,y
|
||||
:AssertEqual 'test/resources/testmarkdown/diary/' . strftime('%Y-%m-%d', localtime() - 60*60*24) . '.md', expand('%')
|
||||
\<CR>
|
||||
:call AssertTab(1)
|
||||
\<CR>
|
||||
|
||||
Do (,w,m -> open tomorrow [Assert]):
|
||||
,wm
|
||||
:AssertEqual 'test/resources/testmarkdown/diary/' . strftime('%Y-%m-%d', localtime() + 60*60*24) . '.md', expand('%')
|
||||
\<CR>
|
||||
:call AssertTab(1)
|
||||
\<CR>
|
||||
|
||||
|
||||
# 2 Local {{{1
|
||||
##############
|
||||
|
||||
Execute (===========================================================):
|
||||
Log "Checking local map"
|
||||
|
||||
# 2.1 Heading {{{2
|
||||
##############
|
||||
|
||||
Do (,wn -> Create new wiki [Assert]):
|
||||
,wn
|
||||
new_file1
|
||||
\<CR>
|
||||
:AssertEqual 'test/resources/testmarkdown/new_file1.md', expand('%')
|
||||
\<CR>
|
||||
:call AssertTab(1)
|
||||
\<CR>
|
||||
|
||||
Do (,wd -> Delete wiki yes [Assert]):
|
||||
:edit 'test/resources/testmarkdown/file_new1.md'
|
||||
\<CR>
|
||||
|
||||
,wn
|
||||
new_file2
|
||||
\<CR>
|
||||
ithis is content 2
|
||||
\<Esc>
|
||||
|
||||
,wd
|
||||
yes
|
||||
\<CR>
|
||||
|
||||
:AssertEqual 'test/resources/testmarkdown/index.md', expand('%')
|
||||
\<CR>
|
||||
|
||||
Do (,wd -> Delete wiki no [Assert]):
|
||||
:edit 'test/resources/testmarkdown/file_new1.md'
|
||||
\<CR>
|
||||
|
||||
,wn
|
||||
new_file2
|
||||
\<CR>
|
||||
ithis is content 1
|
||||
\<Esc>
|
||||
|
||||
,wd
|
||||
no
|
||||
\<CR>
|
||||
|
||||
:AssertEqual 'test/resources/testmarkdown/new_file2.md', expand('%')
|
||||
\<CR>
|
||||
|
||||
Do (,wn -> Rename wiki [Assert]):
|
||||
,wn
|
||||
new_file1
|
||||
\<CR>
|
||||
ithis is content 1
|
||||
\<Esc>
|
||||
|
||||
,wn
|
||||
new_file2
|
||||
\<CR>
|
||||
|
||||
:AssertEqual 'test/resources/testmarkdown/new_file2.md', expand('%')
|
||||
\<CR>
|
||||
|
||||
Given (Some headings):
|
||||
# Head 1
|
||||
## Head 1.1
|
||||
content 1
|
||||
|
||||
# Head2
|
||||
content 2
|
||||
|
||||
Execute (file .md):
|
||||
file toto.md
|
||||
edit!
|
||||
AssertEqual 'vimwiki', &ft
|
||||
|
||||
Do (= -> add header level):
|
||||
=
|
||||
|
||||
Expect (Inc header level):
|
||||
## Head 1
|
||||
## Head 1.1
|
||||
content 1
|
||||
|
||||
# Head2
|
||||
content 2
|
||||
|
||||
Do (- -> Dec header level):
|
||||
j
|
||||
-
|
||||
|
||||
Expect (Dec header level):
|
||||
# Head 1
|
||||
# Head 1.1
|
||||
content 1
|
||||
|
||||
# Head2
|
||||
content 2
|
||||
|
||||
# TODO fix for vim_7.3.429
|
||||
# Do ([[ -> Go to the previous header):
|
||||
# G
|
||||
# k
|
||||
# [[
|
||||
# A placeholder
|
||||
#
|
||||
# Expect (placeholder):
|
||||
# # Head 1
|
||||
# ## Head 1.1 placeholder
|
||||
# content 1
|
||||
#
|
||||
# # Head2
|
||||
# content 2
|
||||
#
|
||||
# Do (]] -> Go to the next header):
|
||||
# ]]
|
||||
# A placeholder
|
||||
#
|
||||
# Expect (placeholder):
|
||||
# # Head 1
|
||||
# ## Head 1.1 placeholder
|
||||
# content 1
|
||||
#
|
||||
# # Head2
|
||||
# content 2
|
||||
#
|
||||
# Do ([= -> Go to the previous header which has the same level):
|
||||
# G
|
||||
# k
|
||||
# [=
|
||||
# A placeholder
|
||||
#
|
||||
# Expect (placeholder):
|
||||
# # Head 1 placeholder
|
||||
# ## Head 1.1
|
||||
# content 1
|
||||
#
|
||||
# # Head2
|
||||
# content 2
|
||||
#
|
||||
# Do (]= -> Go to the next header which has the same level):
|
||||
# ]=
|
||||
# A placeholder
|
||||
#
|
||||
# Expect (placeholder):
|
||||
# # Head 1
|
||||
# ## Head 1.1
|
||||
# content 1
|
||||
#
|
||||
# # Head2 placeholder
|
||||
# content 2
|
||||
#
|
||||
# Do (]u Go one level up):
|
||||
# j
|
||||
# ]u
|
||||
# A placeholder
|
||||
#
|
||||
# Expect (placeholder):
|
||||
# # Head 1 placeholder
|
||||
# ## Head 1.1
|
||||
# content 1
|
||||
#
|
||||
# # Head2
|
||||
# content 2
|
||||
#
|
||||
# Do ([u Go one level up):
|
||||
# j
|
||||
# [u
|
||||
# A placeholder
|
||||
#
|
||||
# Expect (placeholder):
|
||||
# # Head 1 placeholder
|
||||
# ## Head 1.1
|
||||
# content 1
|
||||
#
|
||||
# # Head2
|
||||
# content 2
|
||||
|
||||
|
||||
# 2.2 List {{{2
|
||||
##############
|
||||
|
||||
Given (Number list):
|
||||
1. I
|
||||
1. Relly
|
||||
2. Love
|
||||
1. Very
|
||||
1. Much
|
||||
3. You
|
||||
|
||||
Execute (file .md):
|
||||
file toto.md
|
||||
edit!
|
||||
AssertEqual 'vimwiki', &ft
|
||||
set sw=2
|
||||
|
||||
Do (gll):
|
||||
gll
|
||||
|
||||
Expect (Increase):
|
||||
1. I
|
||||
2. Relly
|
||||
1. Love
|
||||
1. Very
|
||||
1. Much
|
||||
2. You
|
||||
|
||||
Do (gLl):
|
||||
gLl
|
||||
|
||||
Expect (Increase self + child):
|
||||
1. I
|
||||
1. Relly
|
||||
1. Love
|
||||
1. Very
|
||||
1. Much
|
||||
2. You
|
||||
|
||||
Do (glh):
|
||||
jjj
|
||||
glh
|
||||
|
||||
Expect (Decrease):
|
||||
1. I
|
||||
1. Relly
|
||||
2. Love
|
||||
3. Very
|
||||
1. Much
|
||||
4. You
|
||||
|
||||
Do (gLh):
|
||||
jjj
|
||||
gLh
|
||||
|
||||
Expect (Decrease self + child):
|
||||
1. I
|
||||
1. Relly
|
||||
2. Love
|
||||
3. Very
|
||||
1. Much
|
||||
4. You
|
||||
|
||||
Do (glr):
|
||||
\<C-A>\<C-A>
|
||||
glr
|
||||
|
||||
Expect (Renumber):
|
||||
1. I
|
||||
1. Relly
|
||||
2. Love
|
||||
1. Very
|
||||
1. Much
|
||||
3. You
|
||||
|
||||
Do (gl*):
|
||||
gl*
|
||||
|
||||
Expect (item -> *):
|
||||
* I
|
||||
1. Relly
|
||||
1. Love
|
||||
1. Very
|
||||
1. Much
|
||||
2. You
|
||||
|
||||
Do (gL*):
|
||||
gL*
|
||||
|
||||
Expect (list -> *):
|
||||
* I
|
||||
1. Relly
|
||||
* Love
|
||||
1. Very
|
||||
1. Much
|
||||
* You
|
||||
|
||||
|
||||
# 3 Text Object {{{1
|
||||
####################
|
||||
|
||||
Execute (===========================================================):
|
||||
Log "Checking text object"
|
||||
|
||||
# 3.1 HEading Object {{{2
|
||||
####################
|
||||
|
||||
|
||||
Given (Some headings):
|
||||
# Head 1
|
||||
## Head 1.1
|
||||
content 1
|
||||
|
||||
# Head2
|
||||
content 2
|
||||
|
||||
Do (ah):
|
||||
j
|
||||
dah
|
||||
|
||||
Expect (Change A header including its content up to the next header):
|
||||
# Head 1
|
||||
# Head2
|
||||
content 2
|
||||
|
||||
Do (ih):
|
||||
j
|
||||
dih
|
||||
|
||||
Expect (The content under a header):
|
||||
# Head 1
|
||||
## Head 1.1
|
||||
|
||||
# Head2
|
||||
content 2
|
||||
|
||||
Do (aH):
|
||||
daH
|
||||
|
||||
Expect (A header including all of its subheaders):
|
||||
# Head2
|
||||
content 2
|
||||
|
||||
Do (iH):
|
||||
diH
|
||||
|
||||
Expect (Like 'aH', but excluding the header itself):
|
||||
# Head 1
|
||||
|
||||
# Head2
|
||||
content 2
|
||||
|
||||
Include: vader_teardown
|
||||
# vim: foldmethod=marker foldlevel=30 sw=2
|
66
test/independent_runs/search.vader
Normal file
@ -0,0 +1,66 @@
|
||||
Include: vader_setup
|
||||
|
||||
Execute (Setup search testing wrapper):
|
||||
function! TestSearch(search_command, test_name)
|
||||
" Note: after each search, the location list of the current window (0)
|
||||
" will contain the search results. A non-empty list indicates success.
|
||||
" Search for a single word (a pattern with no spaces)
|
||||
redir => output
|
||||
silent execute a:search_command
|
||||
redir END
|
||||
Assert !empty(getloclist(0)), a:test_name.": no location list result"
|
||||
Assert match(output, '\d of \d') > -1, a:test_name.": no result message"
|
||||
|
||||
" Tests that VimwikiSearch is quoting the pattern correctly.
|
||||
" If not, Vim will see anything after the first space in the pattern
|
||||
" as a file name and attempt to open it.
|
||||
Assert match(output, 'Cannot open file') == -1, "'open file': unquoted pattern?"
|
||||
|
||||
return output
|
||||
endfunction
|
||||
|
||||
Execute (Search test wiki):
|
||||
" Open test wiki
|
||||
edit test/resources/testwiki/index.wiki
|
||||
|
||||
" Make sure we opened the test wiki successfully by checking the
|
||||
" title (first line) and filetype.
|
||||
AssertEqual "= Test Wiki =", getline(1)
|
||||
AssertEqual "vimwiki", &filetype
|
||||
|
||||
|
||||
call TestSearch('VimwikiSearch foo', 'pattern with no spaces')
|
||||
call TestSearch('VimwikiSearch foo bar', 'pattern with spaces')
|
||||
call TestSearch('VimwikiSearch foo\bar', 'pattern with ''\''')
|
||||
call TestSearch('VimwikiSearch baz{13}', 'pattern with literal {}')
|
||||
call TestSearch('VimwikiSearch /\vbuz{5}/', 'proper regex')
|
||||
call TestSearch('VWS foo bar', 'use VWS abbreviation')
|
||||
|
||||
Execute (Search space path wiki):
|
||||
" Open wiki with spaces in path to test fname escaping
|
||||
edit test/resources/testwiki\ space/index.wiki
|
||||
|
||||
" Make sure we opened the space path wiki successfully
|
||||
AssertEqual "= Space Path Wiki =", getline(1)
|
||||
|
||||
call TestSearch('VimwikiSearch foo', 'simple search in space path wiki')
|
||||
|
||||
Execute (Search failure message):
|
||||
" Important note: No search tests will succeed after this.
|
||||
" The failed search will cause a Vim error to be thrown and
|
||||
" any search with lvimgrep within Vader will result in an
|
||||
" empty location list and empty messages queue. It is
|
||||
" difficult to tell if the search itself is failing or if it
|
||||
" is just an inability to view the results.
|
||||
|
||||
" Open test wiki again
|
||||
edit test/resources/testwiki/index.wiki
|
||||
|
||||
" Now test a negative search and make sure we are returning
|
||||
" the expected VimWiki error.
|
||||
redir => output
|
||||
silent VimwikiSearch not_exist
|
||||
redir END
|
||||
Assert match(output, 'VimwikiSearch: No match found.') > -1, "expected custom error"
|
||||
|
||||
Include: vader_teardown
|
1
test/independent_runs/vader_setup
Symbolic link
@ -0,0 +1 @@
|
||||
../vader_includes/vader_setup.vader
|
1
test/independent_runs/vader_teardown
Symbolic link
@ -0,0 +1 @@
|
||||
../vader_includes/vader_teardown.vader
|
125
test/link_creation.vader
Normal file
@ -0,0 +1,125 @@
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
Given vimwiki (Text that is not a wikilink):
|
||||
test
|
||||
www.google.com
|
||||
https://www.google.com
|
||||
multiple words
|
||||
let's
|
||||
let's
|
||||
file.wiki
|
||||
file.md
|
||||
file.mw
|
||||
|
||||
Execute (Set syntax to default):
|
||||
call SetSyntax('default')
|
||||
|
||||
Do (Create links default syntax):
|
||||
\<Enter>
|
||||
j
|
||||
v$
|
||||
\<Enter>
|
||||
j
|
||||
v$
|
||||
\<Enter>
|
||||
j
|
||||
v$
|
||||
\<Enter>
|
||||
j
|
||||
v$
|
||||
\<Enter>
|
||||
j
|
||||
\<Enter>
|
||||
j
|
||||
\<Enter>
|
||||
j
|
||||
\<Enter>
|
||||
j
|
||||
\<Enter>
|
||||
|
||||
Expect (Vimwiki links):
|
||||
[[test]]
|
||||
[[www.google.com]]
|
||||
[[https://www.google.com]]
|
||||
[[multiple words]]
|
||||
[[let's]]
|
||||
[[let]]'s
|
||||
[[file.wiki]]
|
||||
[[file.md]]
|
||||
[[file.mw]]
|
||||
|
||||
Execute (Set syntax to markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Do (Create links markdown syntax):
|
||||
\<Enter>
|
||||
j
|
||||
v$
|
||||
\<Enter>
|
||||
j
|
||||
v$
|
||||
\<Enter>
|
||||
j
|
||||
v$
|
||||
\<Enter>
|
||||
j
|
||||
v$
|
||||
\<Enter>
|
||||
j
|
||||
\<Enter>
|
||||
j
|
||||
\<Enter>
|
||||
j
|
||||
\<Enter>
|
||||
j
|
||||
\<Enter>
|
||||
|
||||
Expect (Markdown links):
|
||||
[test](test)
|
||||
[www.google.com](www.google.com)
|
||||
[https://www.google.com](https://www.google.com)
|
||||
[multiple words](multiple words)
|
||||
[let's](let's)
|
||||
[let](let)'s
|
||||
[file wiki](file.wiki)
|
||||
[file](file.md)
|
||||
[file mw](file.mw)
|
||||
|
||||
Execute (Set syntax to mediawiki):
|
||||
call SetSyntax('media')
|
||||
|
||||
Do (Create links mediawiki syntax):
|
||||
\<Enter>
|
||||
j
|
||||
v$
|
||||
\<Enter>
|
||||
j
|
||||
v$
|
||||
\<Enter>
|
||||
j
|
||||
v$
|
||||
\<Enter>
|
||||
j
|
||||
v$
|
||||
\<Enter>
|
||||
j
|
||||
\<Enter>
|
||||
j
|
||||
\<Enter>
|
||||
j
|
||||
\<Enter>
|
||||
j
|
||||
\<Enter>
|
||||
|
||||
Expect (Mediawiki links):
|
||||
[[test]]
|
||||
[[www.google.com]]
|
||||
[[https://www.google.com]]
|
||||
[[multiple words]]
|
||||
[[let's]]
|
||||
[[let]]'s
|
||||
[[file.wiki]]
|
||||
[[file.md]]
|
||||
[[file.mw]]
|
||||
|
||||
Include: vader_includes/vader_teardown.vader
|
225
test/link_markdown_multiple_per_file.vader
Normal file
@ -0,0 +1,225 @@
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
Given vimwiki (Internal links + one link to filenew):
|
||||
# Contents
|
||||
|
||||
- [Test1](#Test1)
|
||||
- [Test2](#Test2)
|
||||
|
||||
# Test1
|
||||
|
||||
- [Test1](#Test1)
|
||||
- [Test2](#Test2)
|
||||
- [filenew](filenew)
|
||||
|
||||
# Test2
|
||||
|
||||
- [Test1](#Test1)
|
||||
- [Test2](#Test2)
|
||||
- [filenew](filenew)
|
||||
|
||||
Execute (Set filename wiki_test.md):
|
||||
file wiki_test.md
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Do (Navigate with <Tab>):
|
||||
A more Contents\<Esc>
|
||||
\<Tab>
|
||||
\<Enter>
|
||||
A more Test1\<Esc>
|
||||
\<Tab>
|
||||
\<Tab>
|
||||
\<Enter>
|
||||
A more Test2\<Esc>
|
||||
|
||||
Expect (Content added to titles):
|
||||
# Contents more Contents
|
||||
|
||||
- [Test1](#Test1)
|
||||
- [Test2](#Test2)
|
||||
|
||||
# Test1 more Test1
|
||||
|
||||
- [Test1](#Test1)
|
||||
- [Test2](#Test2)
|
||||
- [filenew](filenew)
|
||||
|
||||
# Test2 more Test2
|
||||
|
||||
- [Test1](#Test1)
|
||||
- [Test2](#Test2)
|
||||
- [filenew](filenew)
|
||||
|
||||
Do (Navigate with <Tab> and <Enter> and come back with <Bs>):
|
||||
\<Tab>
|
||||
\<Enter>
|
||||
# Cursor at Test1
|
||||
\<Tab>
|
||||
\<Tab>
|
||||
\<Enter>
|
||||
# Cursor at Test2
|
||||
\<Tab>
|
||||
\<Tab>
|
||||
\<Tab>
|
||||
# Cursor at Test2/filenew
|
||||
A not yet\<Esc>
|
||||
\<Bs>
|
||||
# Cursor at Test1/test2
|
||||
A near Test1/test2
|
||||
\<Esc>
|
||||
\<Bs>
|
||||
# Cursor at Contents/test1
|
||||
A near Contents/test1
|
||||
\<Esc>
|
||||
|
||||
Expect (Vimwiki links):
|
||||
# Contents
|
||||
|
||||
- [Test1](#Test1) near Contents/test1
|
||||
- [Test2](#Test2)
|
||||
|
||||
# Test1
|
||||
|
||||
- [Test1](#Test1)
|
||||
- [Test2](#Test2) near Test1/test2
|
||||
- [filenew](filenew)
|
||||
|
||||
# Test2
|
||||
|
||||
- [Test1](#Test1)
|
||||
- [Test2](#Test2)
|
||||
- [filenew](filenew) not yet
|
||||
|
||||
Do (Navigate with <Tab> comeback with <Bs> from filenew):
|
||||
\<Tab>
|
||||
A first shot\<Esc>
|
||||
0\<Tab>
|
||||
# Cursor at Contents/test1
|
||||
\<Enter>
|
||||
\<Tab>
|
||||
\<Tab>
|
||||
A first shot\<Esc>
|
||||
0\<Tab>
|
||||
# Cursor at Test1/test2
|
||||
\<Enter>
|
||||
G
|
||||
# Cursor at Test2/filenew
|
||||
A first shot\<Esc>
|
||||
0\<Tab>
|
||||
# Cursor at Test2/filenew
|
||||
\<Enter>
|
||||
# Cursor in filenew (a new file)
|
||||
A anything in filenew: empirically it does not count\<Esc>
|
||||
\<Bs>
|
||||
# Cursor at Test2/filenew
|
||||
\<Bs>
|
||||
# Cursor at Test1/test2
|
||||
\<Bs>
|
||||
# Cursor at Contents/test1
|
||||
A second shot
|
||||
|
||||
Expect (Just Contents/test1 got the second shot):
|
||||
# Contents
|
||||
|
||||
- [Test1](#Test1) first shot second shot
|
||||
- [Test2](#Test2)
|
||||
|
||||
# Test1
|
||||
|
||||
- [Test1](#Test1)
|
||||
- [Test2](#Test2) first shot
|
||||
- [filenew](filenew)
|
||||
|
||||
# Test2
|
||||
|
||||
- [Test1](#Test1)
|
||||
- [Test2](#Test2)
|
||||
- [filenew](filenew) first shot
|
||||
|
||||
Execute (Delete filenew buffer):
|
||||
bd! /testplugin/filenew.md
|
||||
|
||||
Do (Navigate with <Tab> comeback with <Bs> too far):
|
||||
\<Tab>
|
||||
# Cursor at Contents/test1
|
||||
\<Enter>
|
||||
\<Tab>
|
||||
\<Tab>
|
||||
# Cursor at Test1/test2
|
||||
\<Enter>
|
||||
\<Tab>
|
||||
# Cursor at Test2/test1
|
||||
\<Enter>
|
||||
\<Tab>
|
||||
\<Tab>
|
||||
# Cursor at Test1/test2
|
||||
\<Enter>
|
||||
A first test2\<Esc>
|
||||
\<Tab>
|
||||
# Cursor at Test2/test1
|
||||
\<Enter>
|
||||
A first test1\<Esc>
|
||||
# Back
|
||||
\<Bs>
|
||||
# Cursor at Test2/test1
|
||||
A second test2/test1\<Esc>
|
||||
\<Bs>
|
||||
# Cursor at Test1/test2
|
||||
A second test1/test2\<Esc>
|
||||
\<Bs>
|
||||
# Cursor at Test2/test1
|
||||
\<Bs>
|
||||
# Cursor at Test1/test2
|
||||
\<Bs>
|
||||
# Cursor at Contents/test1
|
||||
# Finished
|
||||
\<Bs>
|
||||
\<Bs>
|
||||
\<Bs>
|
||||
\<Bs>
|
||||
A 1\<Esc>
|
||||
\<Bs>
|
||||
A 2\<Esc>
|
||||
\<Bs>
|
||||
A 3\<Esc>
|
||||
\<Bs>
|
||||
A 4\<Esc>
|
||||
|
||||
Expect (After too many <Bs>, cursor stays at the first <Enter> spot in first file: Contents/test1):
|
||||
# Contents
|
||||
|
||||
- [Test1](#Test1) 1 2 3 4
|
||||
- [Test2](#Test2)
|
||||
|
||||
# Test1 first test1
|
||||
|
||||
- [Test1](#Test1)
|
||||
- [Test2](#Test2) second test1/test2
|
||||
- [filenew](filenew)
|
||||
|
||||
# Test2 first test2
|
||||
|
||||
- [Test1](#Test1) second test2/test1
|
||||
- [Test2](#Test2)
|
||||
- [filenew](filenew)
|
||||
|
||||
Given vimwiki (link to self):
|
||||
- [Bad link](Very bad.html)
|
||||
- [My own file](wiki_test)
|
||||
- [Test1](#Test1)
|
||||
- [Test2](#Test2)
|
||||
|
||||
Do (Follow link to self and append chars):
|
||||
\<Tab>
|
||||
\<Tab>
|
||||
\<Enter>
|
||||
a this_is_18_chars \<Esc>
|
||||
|
||||
Expect (Some chars appended at self link):
|
||||
- [Bad link](Very bad.html)
|
||||
- [ this_is_18_chars My own file](wiki_test)
|
||||
- [Test1](#Test1)
|
||||
- [Test2](#Test2)
|
||||
|
||||
|
||||
Include: vader_includes/vader_teardown.vader
|
282
test/list_VimwikiReturn.vader
Normal file
@ -0,0 +1,282 @@
|
||||
# Testting <CR> keypress in insert mode on list item
|
||||
#
|
||||
# Note: some trailing spaces are necessary at the end of list items like `1.`
|
||||
# better read this file with `set list`
|
||||
|
||||
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
Given vimwiki (List with hard wraps):
|
||||
- Item 1
|
||||
- Item 2
|
||||
- Item 3 that is split across multiple lines
|
||||
This is the second line.
|
||||
This is the third line.
|
||||
- Item 4
|
||||
- Sub item 1
|
||||
- Sub item split across multiple lines
|
||||
This is the second line.
|
||||
This is the third line.
|
||||
- Item 5
|
||||
|
||||
Execute (Map CR):
|
||||
inoremap <silent><buffer> <CR> <Esc>:VimwikiReturn 3 5<CR>
|
||||
|
||||
Execute (Set syntax markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
|
||||
Do (Extend list):
|
||||
4j
|
||||
A\<CR>Another item\<Esc>
|
||||
5j
|
||||
A\<CR>New sub item\<Esc>
|
||||
|
||||
Expect (Extended list):
|
||||
- Item 1
|
||||
- Item 2
|
||||
- Item 3 that is split across multiple lines
|
||||
This is the second line.
|
||||
This is the third line.
|
||||
- Another item
|
||||
- Item 4
|
||||
- Sub item 1
|
||||
- Sub item split across multiple lines
|
||||
This is the second line.
|
||||
This is the third line.
|
||||
- New sub item
|
||||
- Item 5
|
||||
|
||||
Given vimwiki (List with code block):
|
||||
- Item 1
|
||||
- Item 2
|
||||
- Item 3 that is split across multiple lines
|
||||
This is the second line.
|
||||
This is the third line.
|
||||
- Item 4
|
||||
- Sub item 1
|
||||
- Sub item split across multiple lines
|
||||
This is the second line.
|
||||
This is the third line.
|
||||
```
|
||||
int x = 2 + 2;
|
||||
return 0;
|
||||
```
|
||||
- Item 5
|
||||
```c
|
||||
int x = 2 + 2;
|
||||
return 0;
|
||||
```
|
||||
- Item 6 that is split
|
||||
Across multiple lines.
|
||||
Done.
|
||||
|
||||
Do (CR and CR in code block):
|
||||
4j
|
||||
A\<CR>Another item\<Esc>
|
||||
6j
|
||||
A\<CR>int y = 1;\<Esc>
|
||||
1j
|
||||
A\<CR>x = x + y;\<Esc>
|
||||
4j
|
||||
A\<CR>int y = 2;\<Esc>
|
||||
3j
|
||||
A\<CR>A new bullet doesn't get added here, oh well.\<Esc>
|
||||
3j
|
||||
A\<CR>Done and Done\<Esc>
|
||||
|
||||
Expect (No list continuation in code block):
|
||||
- Item 1
|
||||
- Item 2
|
||||
- Item 3 that is split across multiple lines
|
||||
This is the second line.
|
||||
This is the third line.
|
||||
- Another item
|
||||
- Item 4
|
||||
- Sub item 1
|
||||
- Sub item split across multiple lines
|
||||
This is the second line.
|
||||
This is the third line.
|
||||
```
|
||||
int y = 1;
|
||||
int x = 2 + 2;
|
||||
x = x + y;
|
||||
return 0;
|
||||
```
|
||||
- Item 5
|
||||
```c
|
||||
int y = 2;
|
||||
int x = 2 + 2;
|
||||
return 0;
|
||||
```
|
||||
A new bullet doesn't get added here, oh well.
|
||||
- Item 6 that is split
|
||||
Across multiple lines.
|
||||
Done.
|
||||
- Done and Done
|
||||
|
||||
Given vimwiki (List from help file):
|
||||
1. item
|
||||
---
|
||||
|
||||
1. item
|
||||
continue
|
||||
|
||||
---
|
||||
1.
|
||||
|
||||
---
|
||||
1.
|
||||
|
||||
---
|
||||
Execute (Map CR):
|
||||
inoremap <silent><buffer> <CR> <Esc>:VimwikiReturn 1 1<CR>
|
||||
|
||||
Do (List ops):
|
||||
A\<CR>\<Esc>
|
||||
4j
|
||||
A\<CR>\<Esc>
|
||||
3j
|
||||
A\<CR>\<Esc>
|
||||
3j
|
||||
A\<CR>\<Esc>
|
||||
|
||||
# Note: trailing space <- autoindent
|
||||
Expect (List per VimwikiReturn 1 1):
|
||||
1. item
|
||||
2.
|
||||
---
|
||||
|
||||
1. item
|
||||
continue
|
||||
|
||||
|
||||
---
|
||||
1.
|
||||
2.
|
||||
|
||||
---
|
||||
1.
|
||||
2.
|
||||
|
||||
---
|
||||
Execute (Map CR):
|
||||
inoremap <silent><buffer> <CR> <Esc>:VimwikiReturn 2 2<CR>
|
||||
|
||||
Do (List ops):
|
||||
A\<CR>\<Esc>
|
||||
4j
|
||||
A\<CR>\<Esc>
|
||||
3j
|
||||
A\<CR>\<Esc>
|
||||
3j
|
||||
A\<CR>\<Esc>
|
||||
|
||||
# Note: some trailing space added
|
||||
Expect (List per VimwikiReturn 2 2):
|
||||
1. item
|
||||
|
||||
---
|
||||
|
||||
1. item
|
||||
continue
|
||||
2.
|
||||
|
||||
---
|
||||
|
||||
1.
|
||||
|
||||
---
|
||||
|
||||
1.
|
||||
|
||||
---
|
||||
Execute (Map CR):
|
||||
inoremap <silent><buffer> <CR> <Esc>:VimwikiReturn 3 3<CR>
|
||||
|
||||
Do (List ops):
|
||||
A\<CR>\<Esc>
|
||||
4j
|
||||
A\<CR>\<Esc>
|
||||
3j
|
||||
A\<CR>\<Esc>
|
||||
3j
|
||||
A\<CR>\<Esc>
|
||||
|
||||
|
||||
Expect (List per VimwikiReturn 3 3):
|
||||
1. item
|
||||
2.
|
||||
---
|
||||
|
||||
1. item
|
||||
continue
|
||||
2.
|
||||
|
||||
---
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
---
|
||||
Execute (Map CR):
|
||||
inoremap <silent><buffer> <CR> <Esc>:VimwikiReturn 4 4<CR>
|
||||
|
||||
Do (List ops):
|
||||
A\<CR>\<Esc>
|
||||
4j
|
||||
A\<CR>\<Esc>
|
||||
3j
|
||||
A\<CR>\<Esc>
|
||||
3j
|
||||
A\<CR>\<Esc>
|
||||
|
||||
Expect (List per VimwikiReturn 4 4):
|
||||
1. item
|
||||
|
||||
---
|
||||
|
||||
1. item
|
||||
continue
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
Execute (Map CR):
|
||||
inoremap <silent><buffer> <CR> <Esc>:VimwikiReturn 3 5<CR>
|
||||
|
||||
Do (List ops):
|
||||
A\<CR>\<Esc>
|
||||
4j
|
||||
A\<CR>\<Esc>
|
||||
3j
|
||||
A\<CR>\<Esc>
|
||||
3j
|
||||
A\<CR>\<Esc>
|
||||
|
||||
Expect (List per VimwikiReturn 3 5):
|
||||
1. item
|
||||
2.
|
||||
---
|
||||
|
||||
1. item
|
||||
continue
|
||||
2.
|
||||
|
||||
---
|
||||
|
||||
|
||||
---
|
||||
1.
|
||||
|
||||
---
|
||||
Include: vader_includes/vader_teardown.vader
|
108
test/list_margin.vader
Normal file
@ -0,0 +1,108 @@
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
Execute (Create temp directory):
|
||||
silent execute '!mkdir -p $HOME/list_margin/'
|
||||
cd $HOME/list_margin
|
||||
|
||||
Execute (Create wiki files):
|
||||
write page1.wiki
|
||||
write page2.wiki
|
||||
write page3.wiki
|
||||
write page1.mw
|
||||
write page2.mw
|
||||
write page3.mw
|
||||
write page1.md
|
||||
write page2.md
|
||||
write page3.md
|
||||
|
||||
Given vimwiki (Scratch file):
|
||||
|
||||
Execute (Set syntax default):
|
||||
set shiftwidth=8
|
||||
AssertEqual 8, &shiftwidth
|
||||
call SetSyntax('default')
|
||||
call vimwiki#vars#set_wikilocal('list_margin', -1, vimwiki#vars#get_bufferlocal('wiki_nr'))
|
||||
|
||||
Execute (Generate Links):
|
||||
VimwikiGenerateLinks
|
||||
|
||||
Expect (Links with default margin):
|
||||
|
||||
|
||||
= Generated Links =
|
||||
- [[page1]]
|
||||
- [[page2]]
|
||||
- [[page3]]
|
||||
|
||||
Execute (Set list margin == 2):
|
||||
call vimwiki#vars#set_wikilocal('list_margin', 2, vimwiki#vars#get_bufferlocal('wiki_nr'))
|
||||
VimwikiGenerateLinks
|
||||
|
||||
Expect (Links with margin == 2):
|
||||
|
||||
|
||||
= Generated Links =
|
||||
- [[page1]]
|
||||
- [[page2]]
|
||||
- [[page3]]
|
||||
|
||||
Execute (Set syntax media):
|
||||
call SetSyntax('media')
|
||||
call vimwiki#vars#set_wikilocal('list_margin', -1, vimwiki#vars#get_bufferlocal('wiki_nr'))
|
||||
|
||||
Execute (Generate Links):
|
||||
VimwikiGenerateLinks
|
||||
|
||||
Expect (Links with default margin):
|
||||
|
||||
|
||||
= Generated Links =
|
||||
* [[page1]]
|
||||
* [[page2]]
|
||||
* [[page3]]
|
||||
|
||||
Execute (Set list margin == 1):
|
||||
call vimwiki#vars#set_wikilocal('list_margin', 1, vimwiki#vars#get_bufferlocal('wiki_nr'))
|
||||
VimwikiGenerateLinks
|
||||
|
||||
Expect (Links with margin == 1):
|
||||
|
||||
|
||||
= Generated Links =
|
||||
* [[page1]]
|
||||
* [[page2]]
|
||||
* [[page3]]
|
||||
|
||||
Execute (Set syntax markdown):
|
||||
call SetSyntax('markdown')
|
||||
" list margin should default to 0 for markdown
|
||||
|
||||
Execute (Generate Links):
|
||||
VimwikiGenerateLinks
|
||||
|
||||
Expect (Links with default margin):
|
||||
|
||||
|
||||
# Generated Links
|
||||
|
||||
- [page1](page1)
|
||||
- [page2](page2)
|
||||
- [page3](page3)
|
||||
|
||||
Execute (Set list margin == 5):
|
||||
call vimwiki#vars#set_wikilocal('list_margin', 5, vimwiki#vars#get_bufferlocal('wiki_nr'))
|
||||
VimwikiGenerateLinks
|
||||
|
||||
Expect (Links with margin == 5):
|
||||
|
||||
|
||||
# Generated Links
|
||||
|
||||
- [page1](page1)
|
||||
- [page2](page2)
|
||||
- [page3](page3)
|
||||
|
||||
Execute (Return to default location & cleanup):
|
||||
cd /testplugin
|
||||
|
||||
Include: vader_includes/vader_teardown.vader
|
191
test/list_update.vader
Normal file
@ -0,0 +1,191 @@
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
Given vimwiki (Sample nested list, vimwiki syntax):
|
||||
* [ ] Top Level
|
||||
* [ ] Child 1
|
||||
* [ ] Child 2
|
||||
|
||||
* [ ] Post space
|
||||
|
||||
{{{code
|
||||
* [ ] print "hello, world"
|
||||
}}}
|
||||
|
||||
{{{morecode
|
||||
print "hello again"
|
||||
}}}
|
||||
|
||||
* [ ] Post code
|
||||
* [ ] Sub-child
|
||||
|
||||
* [ ] Sub-sub-child
|
||||
|
||||
Execute (Set syntax to default):
|
||||
call SetSyntax('default')
|
||||
|
||||
Do (Toggle top-level):
|
||||
\<C-Space>
|
||||
|
||||
Expect (All tree toggled):
|
||||
* [X] Top Level
|
||||
* [X] Child 1
|
||||
* [X] Child 2
|
||||
|
||||
* [X] Post space
|
||||
|
||||
{{{code
|
||||
* [ ] print "hello, world"
|
||||
}}}
|
||||
|
||||
{{{morecode
|
||||
print "hello again"
|
||||
}}}
|
||||
|
||||
* [X] Post code
|
||||
* [X] Sub-child
|
||||
|
||||
* [X] Sub-sub-child
|
||||
|
||||
Do (Toggle child):
|
||||
j
|
||||
\<C-Space>
|
||||
|
||||
Expect (Child toggled, top updated):
|
||||
* [.] Top Level
|
||||
* [X] Child 1
|
||||
* [ ] Child 2
|
||||
|
||||
* [ ] Post space
|
||||
|
||||
{{{code
|
||||
* [ ] print "hello, world"
|
||||
}}}
|
||||
|
||||
{{{morecode
|
||||
print "hello again"
|
||||
}}}
|
||||
|
||||
* [ ] Post code
|
||||
* [ ] Sub-child
|
||||
|
||||
* [ ] Sub-sub-child
|
||||
|
||||
Do (Toggle sub-child):
|
||||
G
|
||||
\<C-Space>
|
||||
|
||||
Expect (Sub-child toggled, parents updated):
|
||||
* [.] Top Level
|
||||
* [ ] Child 1
|
||||
* [ ] Child 2
|
||||
|
||||
* [ ] Post space
|
||||
|
||||
{{{code
|
||||
* [ ] print "hello, world"
|
||||
}}}
|
||||
|
||||
{{{morecode
|
||||
print "hello again"
|
||||
}}}
|
||||
|
||||
* [o] Post code
|
||||
* [ ] Sub-child
|
||||
|
||||
* [X] Sub-sub-child
|
||||
|
||||
Given markdown (Sample nested list, markdown syntax):
|
||||
* [ ] Top Level
|
||||
* [ ] Child 1
|
||||
* [ ] Child 2
|
||||
|
||||
* [ ] Post space
|
||||
|
||||
```code
|
||||
* [ ] print "hello, world"
|
||||
```
|
||||
|
||||
```morecode
|
||||
print "hello again"
|
||||
```
|
||||
|
||||
* [ ] Post code
|
||||
* [ ] Sub-child
|
||||
|
||||
* [ ] Sub-sub-child
|
||||
|
||||
Execute (Set syntax to markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Do (Toggle top-level):
|
||||
\<C-Space>
|
||||
|
||||
Expect (All tree toggled):
|
||||
* [X] Top Level
|
||||
* [X] Child 1
|
||||
* [X] Child 2
|
||||
|
||||
* [X] Post space
|
||||
|
||||
```code
|
||||
* [ ] print "hello, world"
|
||||
```
|
||||
|
||||
```morecode
|
||||
print "hello again"
|
||||
```
|
||||
|
||||
* [X] Post code
|
||||
* [X] Sub-child
|
||||
|
||||
* [X] Sub-sub-child
|
||||
|
||||
Do (Toggle child):
|
||||
j
|
||||
\<C-Space>
|
||||
|
||||
Expect (Child toggled, top updated):
|
||||
* [.] Top Level
|
||||
* [X] Child 1
|
||||
* [ ] Child 2
|
||||
|
||||
* [ ] Post space
|
||||
|
||||
```code
|
||||
* [ ] print "hello, world"
|
||||
```
|
||||
|
||||
```morecode
|
||||
print "hello again"
|
||||
```
|
||||
|
||||
* [ ] Post code
|
||||
* [ ] Sub-child
|
||||
|
||||
* [ ] Sub-sub-child
|
||||
|
||||
Do (Toggle sub-child):
|
||||
G
|
||||
\<C-Space>
|
||||
|
||||
Expect (Sub-child toggled, parents updated):
|
||||
* [.] Top Level
|
||||
* [ ] Child 1
|
||||
* [ ] Child 2
|
||||
|
||||
* [ ] Post space
|
||||
|
||||
```code
|
||||
* [ ] print "hello, world"
|
||||
```
|
||||
|
||||
```morecode
|
||||
print "hello again"
|
||||
```
|
||||
|
||||
* [o] Post code
|
||||
* [ ] Sub-child
|
||||
|
||||
* [X] Sub-sub-child
|
||||
|
||||
Include: vader_includes/vader_teardown.vader
|
10923
test/resources/delay.wiki
Executable file
3
test/resources/testmarkdown/buzz_bozz.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Buzz Bozz
|
||||
|
||||
Cras nisl dolor, mattis condimentum neque ac, cursus tristique est. Sed vel imperdiet ipsum. Curabitur non dictum tortor. Donec massa justo, cursus at suscipit ornare, tempus a tellus. Praesent at orci mi. Praesent sed odio in leo pulvinar vulputate. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed eu leo dui. Fusce vitae laoreet massa. Donec ac tempor lectus. Curabitur eget ligula vel purus efficitur congue. Fusce ut pellentesque magna, eget facilisis nunc.
|
59
test/resources/testmarkdown/index.md
Normal file
@ -0,0 +1,59 @@
|
||||
# Test Wiki
|
||||
|
||||
This test wiki exists to test various features of VimWiki.
|
||||
|
||||
VimWiki Developers: Feel free to *add* to this wiki for additional test features.
|
||||
|
||||
Foo bar
|
||||
foo bar
|
||||
biz baz
|
||||
foo\bar
|
||||
baz{13} <--- this is for testing a literal "baz{13}"
|
||||
buzzzzz <--- this is for testing regex /buz{5}/
|
||||
|
||||
# Links
|
||||
|
||||
1. [[buzz_bozz|l_Buzz Bozz]]
|
||||
2. [l_Buzz_Bozz](buzz_bozz)
|
||||
3. [l_Flashy](#Typefaces#Flashy)
|
||||
4. [l_Test Wiki](#Test Wiki)
|
||||
|
||||
# Typefaces
|
||||
|
||||
## Generic
|
||||
|
||||
~~strikeout text~~
|
||||
`code (no syntax) text`
|
||||
super^script^
|
||||
sub,,script,,
|
||||
|
||||
## Markdown
|
||||
|
||||
**bold text** or __bold text__
|
||||
*italic text* or _italic text_
|
||||
***bold_italic text*** or ___italic_bold text___
|
||||
|
||||
## Flashy
|
||||
TODO, DONE, STARTED, FIXME, FIXED, XXX.
|
||||
|
||||
# More
|
||||
|
||||
## Lorem ipsum dolor ==
|
||||
|
||||
Sit amet, consectetur adipiscing elit. Etiam sed efficitur lectus, sit amet consectetur purus. Vestibulum pulvinar, magna et fermentum aliquet, diam libero blandit ex, quis iaculis dui metus sit amet nulla. Mauris auctor massa magna, eu aliquam neque consequat a. Duis lorem nunc, tempus eu dignissim a, euismod sit amet ex. Duis nec condimentum libero. Nulla iaculis fringilla ante, in posuere lorem maximus vel. Nam pulvinar quis diam non ultrices. Vivamus maximus ipsum a placerat rutrum. Nam et consectetur erat, sodales hendrerit ligula.
|
||||
|
||||
# Etiam dapibus iaculis
|
||||
|
||||
Sed tincidunt vestibulum nunc, in dapibus eros dictum in. Nullam ut dolor nisi.
|
||||
|
||||
* blandit nulla mi
|
||||
* at gravida magna
|
||||
* maximus eu
|
||||
|
||||
### Morbi id sodales sem
|
||||
|
||||
Nulla id malesuada velit. Mauris ac nisl orci. Donec maximus ex in sapien fringilla mollis. Praesent eu felis bibendum, auctor justo eget, bibendum purus. Nullam egestas, diam et eleifend tempus, ipsum libero auctor mi, quis rutrum neque metus ac tortor. Vestibulum porttitor tempus vulputate.
|
||||
|
||||
## Praesent tempor turpis est
|
||||
|
||||
Nunc scelerisque placerat auctor. Donec vel iaculis risus, non commodo nisl. Duis pretium nisi nibh, ac faucibus metus condimentum nec. Aliquam eu euismod lorem. Aenean sit amet tellus sed massa luctus dignissim. Nam tempor sapien quis felis hendrerit fermentum. Nunc vitae vehicula enim.
|
3
test/resources/testwiki space/buzz bozz.wiki
Normal file
@ -0,0 +1,3 @@
|
||||
= Buzz Bozz =
|
||||
|
||||
Cras nisl dolor, mattis condimentum neque ac, cursus tristique est. Sed vel imperdiet ipsum. Curabitur non dictum tortor. Donec massa justo, cursus at suscipit ornare, tempus a tellus. Praesent at orci mi. Praesent sed odio in leo pulvinar vulputate. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed eu leo dui. Fusce vitae laoreet massa. Donec ac tempor lectus. Curabitur eget ligula vel purus efficitur congue. Fusce ut pellentesque magna, eget facilisis nunc.
|
30
test/resources/testwiki space/index.wiki
Normal file
@ -0,0 +1,30 @@
|
||||
= Space Path Wiki =
|
||||
|
||||
This test wiki exists to test various features of VimWiki.
|
||||
|
||||
VimWiki Developers: Feel free to *add* to this wiki for additional test features.
|
||||
|
||||
Foo bar foo bar biz baz.
|
||||
|
||||
[[buzz_bozz|Buzz Bozz]]
|
||||
|
||||
== Lorem ipsum dolor ==
|
||||
|
||||
Sit amet, consectetur adipiscing elit. Etiam sed efficitur lectus, sit amet consectetur purus. Vestibulum pulvinar, magna et fermentum aliquet, diam libero blandit ex, quis iaculis dui metus sit amet nulla. Mauris auctor massa magna, eu aliquam neque consequat a. Duis lorem nunc, tempus eu dignissim a, euismod sit amet ex. Duis nec condimentum libero. Nulla iaculis fringilla ante, in posuere lorem maximus vel. Nam pulvinar quis diam non ultrices. Vivamus maximus ipsum a placerat rutrum. Nam et consectetur erat, sodales hendrerit ligula.
|
||||
|
||||
== Etiam dapibus iaculis ==
|
||||
|
||||
Sed tincidunt vestibulum nunc, in dapibus eros dictum in. Nullam ut dolor nisi.
|
||||
|
||||
* blandit nulla mi
|
||||
* at gravida magna
|
||||
* maximus eu
|
||||
|
||||
=== Morbi id sodales sem ===
|
||||
|
||||
Nulla id malesuada velit. Mauris ac nisl orci. Donec maximus ex in sapien fringilla mollis. Praesent eu felis bibendum, auctor justo eget, bibendum purus. Nullam egestas, diam et eleifend tempus, ipsum libero auctor mi, quis rutrum neque metus ac tortor. Vestibulum porttitor tempus vulputate.
|
||||
|
||||
== Praesent tempor turpis est ==
|
||||
|
||||
Nunc scelerisque placerat auctor. Donec vel iaculis risus, non commodo nisl. Duis pretium nisi nibh, ac faucibus metus condimentum nec. Aliquam eu euismod lorem. Aenean sit amet tellus sed massa luctus dignissim. Nam tempor sapien quis felis hendrerit fermentum. Nunc vitae vehicula enim.
|
||||
|
3
test/resources/testwiki/buzz_bozz.wiki
Normal file
@ -0,0 +1,3 @@
|
||||
= Buzz Bozz =
|
||||
|
||||
Cras nisl dolor, mattis condimentum neque ac, cursus tristique est. Sed vel imperdiet ipsum. Curabitur non dictum tortor. Donec massa justo, cursus at suscipit ornare, tempus a tellus. Praesent at orci mi. Praesent sed odio in leo pulvinar vulputate. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed eu leo dui. Fusce vitae laoreet massa. Donec ac tempor lectus. Curabitur eget ligula vel purus efficitur congue. Fusce ut pellentesque magna, eget facilisis nunc.
|
35
test/resources/testwiki/index.wiki
Normal file
@ -0,0 +1,35 @@
|
||||
= Test Wiki =
|
||||
|
||||
This test wiki exists to test various features of VimWiki.
|
||||
|
||||
VimWiki Developers: Feel free to *add* to this wiki for additional test features.
|
||||
|
||||
Foo bar
|
||||
foo bar
|
||||
biz baz
|
||||
foo\bar
|
||||
baz{13} <--- this is for testing a literal "baz{13}"
|
||||
buzzzzz <--- this is for testing regex /buz{5}/
|
||||
|
||||
[[buzz_bozz|Buzz Bozz]]
|
||||
|
||||
== Lorem ipsum dolor ==
|
||||
|
||||
Sit amet, consectetur adipiscing elit. Etiam sed efficitur lectus, sit amet consectetur purus. Vestibulum pulvinar, magna et fermentum aliquet, diam libero blandit ex, quis iaculis dui metus sit amet nulla. Mauris auctor massa magna, eu aliquam neque consequat a. Duis lorem nunc, tempus eu dignissim a, euismod sit amet ex. Duis nec condimentum libero. Nulla iaculis fringilla ante, in posuere lorem maximus vel. Nam pulvinar quis diam non ultrices. Vivamus maximus ipsum a placerat rutrum. Nam et consectetur erat, sodales hendrerit ligula.
|
||||
|
||||
== Etiam dapibus iaculis ==
|
||||
|
||||
Sed tincidunt vestibulum nunc, in dapibus eros dictum in. Nullam ut dolor nisi.
|
||||
|
||||
* blandit nulla mi
|
||||
* at gravida magna
|
||||
* maximus eu
|
||||
|
||||
=== Morbi id sodales sem ===
|
||||
|
||||
Nulla id malesuada velit. Mauris ac nisl orci. Donec maximus ex in sapien fringilla mollis. Praesent eu felis bibendum, auctor justo eget, bibendum purus. Nullam egestas, diam et eleifend tempus, ipsum libero auctor mi, quis rutrum neque metus ac tortor. Vestibulum porttitor tempus vulputate.
|
||||
|
||||
== Praesent tempor turpis est ==
|
||||
|
||||
Nunc scelerisque placerat auctor. Donec vel iaculis risus, non commodo nisl. Duis pretium nisi nibh, ac faucibus metus condimentum nec. Aliquam eu euismod lorem. Aenean sit amet tellus sed massa luctus dignissim. Nam tempor sapien quis felis hendrerit fermentum. Nunc vitae vehicula enim.
|
||||
|
248
test/run_tests.sh
Executable file
@ -0,0 +1,248 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# credit to https://github.com/w0rp/ale for script ideas and the color vader
|
||||
# output function.
|
||||
|
||||
printHelp() {
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo ""
|
||||
echo "Runs Vimwiki Vader tests or Vint in a Docker container"
|
||||
echo ""
|
||||
echo "-h Print help message"
|
||||
echo ""
|
||||
echo "-n Specify vim/nvim version to run tests for."
|
||||
echo " Multiple versions can be specified by quoting the value and"
|
||||
echo " separating versions with a space. E.g. -v \"vim1 vim2\"."
|
||||
echo " Default is all available versions."
|
||||
echo ""
|
||||
echo "-l List available versions that can be used with the '-v' option"
|
||||
echo ""
|
||||
echo "-t Select test type: 'vader', 'vint', or 'all'"
|
||||
echo ""
|
||||
echo "-o Comma seperated list of tests to run."
|
||||
echo " E.g. -o \"list_margin,command_toc\""
|
||||
echo ""
|
||||
echo "-v Turn on verbose output."
|
||||
exit 0
|
||||
}
|
||||
|
||||
printVersions() {
|
||||
# print the names of all vim/nvim versions
|
||||
getVers
|
||||
}
|
||||
|
||||
runVader() {
|
||||
echo "Starting Docker container and Vader tests."
|
||||
|
||||
if [[ -z $only ]]; then
|
||||
ind="test/independent_runs/*.vader"
|
||||
res="test/*"
|
||||
else
|
||||
IFS=',' read -ra TEST <<< "$only"
|
||||
for i in "${TEST[@]}"; do
|
||||
if [[ -f "$i" ]]; then
|
||||
res="$res test/${i}"
|
||||
elif [[ -f "${i}.vader" ]]; then
|
||||
res="$res test/${i}.vader"
|
||||
elif [[ -f "independent_runs/${i}" ]]; then
|
||||
ind="$ind test/independent_runs/${i}"
|
||||
elif [[ -f "independent_runs/${i}.vader" ]]; then
|
||||
ind="$ind test/independent_runs/${i}.vader"
|
||||
else
|
||||
printf "WARNING: Test \"%s\" not found.\n", "$i"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# run tests for each specified version
|
||||
for v in $vers; do
|
||||
echo ""
|
||||
echo "Running version: $v"
|
||||
vim="/vim-build/bin/$v -u test/vimrc -i NONE"
|
||||
test_cmd="for VF in ${ind}; do $vim \"+Vader! \$VF\"; done"
|
||||
|
||||
set -o pipefail
|
||||
|
||||
# tests that must be run in individual vim instances
|
||||
# see README.md for more information
|
||||
docker run -a stderr -e VADER_OUTPUT_FILE=/dev/stderr "${flags[@]}" \
|
||||
/bin/bash -c "$test_cmd" 2>&1 | vader_filter | vader_color
|
||||
|
||||
# remaining tests
|
||||
docker run -a stderr -e VADER_OUTPUT_FILE=/dev/stderr "${flags[@]}" \
|
||||
"$v" -u test/vimrc -i NONE "+Vader! ${res}" 2>&1 | vader_filter | vader_color
|
||||
set +o pipefail
|
||||
|
||||
done
|
||||
}
|
||||
|
||||
runVint() {
|
||||
echo "Starting Docker container and running Vint."
|
||||
|
||||
docker run -a stdout "${flags[@]}" vint -s .
|
||||
}
|
||||
|
||||
getVers() {
|
||||
sed -n 's/.* -name \([^ ]*\) .*/\1/p' ../Dockerfile
|
||||
}
|
||||
|
||||
vader_filter() {
|
||||
local err=0
|
||||
while read -r; do
|
||||
if [[ "$verbose" == 0 ]]; then
|
||||
# only print possible error cases
|
||||
if [[ "$REPLY" = *'docker:'* ]] || \
|
||||
[[ "$REPLY" = *'Starting Vader:'* ]] || \
|
||||
[[ "$REPLY" = *'Vader error:'* ]] || \
|
||||
[[ "$REPLY" = *'Vim: Error '* ]]; then
|
||||
echo "$REPLY"
|
||||
elif [[ "$REPLY" = *'[EXECUTE] (X)'* ]] || \
|
||||
[[ "$REPLY" = *'[ EXPECT] (X)'* ]]; then
|
||||
echo "$REPLY"
|
||||
err=1
|
||||
elif [[ "$REPLY" = *'Success/Total:'* ]]; then
|
||||
success="$(echo -n "$REPLY" | grep -o '[0-9]\+/' | head -n1 | cut -d/ -f1)"
|
||||
total="$(echo -n "$REPLY" | grep -o '/[0-9]\+' | head -n1 | cut -d/ -f2)"
|
||||
if [ "$success" -lt "$total" ]; then
|
||||
err=1
|
||||
fi
|
||||
echo "$REPLY"
|
||||
fi
|
||||
else
|
||||
# just print everything
|
||||
echo "$REPLY"
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ "$err" == 1 ]]; then
|
||||
echo ""
|
||||
echo "!---------Failed tests detected---------!"
|
||||
echo "Run with the '-v' flag for verbose output"
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
# Say Hi
|
||||
echo -en "Starting $(basename $0) for VimWiki\n"
|
||||
|
||||
|
||||
red='\033[0;31m'
|
||||
green='\033[0;32m'
|
||||
nc='\033[0m'
|
||||
vader_color() {
|
||||
while read -r; do
|
||||
if [[ "$REPLY" = *'[EXECUTE] (X)'* ]] || \
|
||||
[[ "$REPLY" = *'[ EXPECT] (X)'* ]] || \
|
||||
[[ "$REPLY" = *'Vim: Error '* ]] || \
|
||||
[[ "$REPLY" = *'Vader error:'* ]]; then
|
||||
echo -en "$red"
|
||||
elif [[ "$REPLY" = *'[EXECUTE]'* ]] || [[ "$REPLY" = *'[ GIVEN]'* ]]; then
|
||||
echo -en "$nc"
|
||||
fi
|
||||
|
||||
if [[ "$REPLY" = *'Success/Total'* ]]; then
|
||||
success="$(echo -n "$REPLY" | grep -o '[0-9]\+/' | head -n1 | cut -d/ -f1)"
|
||||
total="$(echo -n "$REPLY" | grep -o '/[0-9]\+' | head -n1 | cut -d/ -f2)"
|
||||
|
||||
if [ "$success" -lt "$total" ]; then
|
||||
echo -en "$red"
|
||||
else
|
||||
echo -en "$green"
|
||||
fi
|
||||
|
||||
echo "$REPLY"
|
||||
echo -en "$nc"
|
||||
else
|
||||
echo "$REPLY"
|
||||
fi
|
||||
done
|
||||
|
||||
echo -en "$nc"
|
||||
}
|
||||
|
||||
# list of vim/nvim versions
|
||||
vers="$(getVers)"
|
||||
|
||||
# type of tests to run - vader/vint/all
|
||||
type="all"
|
||||
|
||||
# verbose output flag
|
||||
verbose=0
|
||||
|
||||
# only run these tests
|
||||
only=""
|
||||
|
||||
# docker flags
|
||||
flags=(--rm -v "$PWD/../:/testplugin" -v "$PWD/../test:/home" -w /testplugin vimwiki)
|
||||
|
||||
while getopts ":hvn:lt:o:" opt; do
|
||||
case ${opt} in
|
||||
h )
|
||||
printHelp
|
||||
;;
|
||||
n )
|
||||
vers="$OPTARG"
|
||||
;;
|
||||
v )
|
||||
verbose=1
|
||||
;;
|
||||
l )
|
||||
printVersions
|
||||
;;
|
||||
t )
|
||||
type="$OPTARG"
|
||||
;;
|
||||
o )
|
||||
only="$OPTARG"
|
||||
;;
|
||||
\? )
|
||||
echo "Invalid option: $OPTARG" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
: )
|
||||
echo "Invalid option: $OPTARG requires an argument" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# shift out processed parameters
|
||||
shift $((OPTIND -1))
|
||||
|
||||
# error handling for non-option arguments
|
||||
if [[ $# -ne 0 ]]; then
|
||||
echo "Error: Got $# non-option arguments." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# stop tests on ctrl-c or ctrl-z
|
||||
trap exit 1 SIGINT SIGTERM
|
||||
|
||||
# select which tests should run
|
||||
o_error=0
|
||||
case $type in
|
||||
"vader" )
|
||||
runVader
|
||||
echo "Vader: returned $?"
|
||||
o_error=$(( $? | $o_error ))
|
||||
;;
|
||||
"vint" )
|
||||
runVint
|
||||
echo "Vint: returned $?"
|
||||
o_error=$(( $? | $o_error ))
|
||||
;;
|
||||
"all" )
|
||||
runVint
|
||||
echo "Vint: returned $?"
|
||||
o_error=$(( $? | $o_error ))
|
||||
runVader
|
||||
echo "Vader: returned $?"
|
||||
o_error=$(( $? | $o_error ))
|
||||
;;
|
||||
* )
|
||||
echo "Error: invalid type - '$type'" 1>&2
|
||||
exit 1
|
||||
esac
|
||||
|
||||
echo "Script $(basename $0) exiting: $o_error"
|
||||
exit $o_error
|
318
test/syntax.vader
Normal file
@ -0,0 +1,318 @@
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
|
||||
# 1 Typeface {{{1
|
||||
#################
|
||||
|
||||
Given vimwiki (TODO, XXX):
|
||||
TODO
|
||||
DONE
|
||||
STARTED
|
||||
FIXME
|
||||
FIXED
|
||||
XXX
|
||||
|
||||
Execute (Assert Syntax VimwikiTodo):
|
||||
AssertEqual SyntaxAt(1, 1), 'VimwikiTodo'
|
||||
AssertEqual SyntaxAt(2, 1), 'VimwikiTodo'
|
||||
AssertEqual SyntaxAt(3, 1), 'VimwikiTodo'
|
||||
AssertEqual SyntaxAt(4, 1), 'VimwikiTodo'
|
||||
AssertEqual SyntaxAt(5, 1), 'VimwikiTodo'
|
||||
AssertEqual SyntaxAt(6, 1), 'VimwikiTodo'
|
||||
|
||||
Given vimwiki (Typeface for markdown like italic):
|
||||
**bold text 1**
|
||||
__bold text 2__
|
||||
*italic text 1*
|
||||
_italic text 2_
|
||||
***bold italic text 1***
|
||||
___bold italic text 2___
|
||||
~~strikeout text~~
|
||||
`code (no syntax) text`
|
||||
sp^script^
|
||||
sb,,script,,
|
||||
|
||||
Execute (Set syntax markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax for typeface):
|
||||
AssertEqual SyntaxAt(1, 4), 'VimwikiBold'
|
||||
AssertEqual SyntaxAt(2, 4), 'VimwikiBold'
|
||||
AssertEqual SyntaxAt(3, 4), 'VimwikiItalic'
|
||||
AssertEqual SyntaxAt(4, 4), 'VimwikiItalic'
|
||||
AssertEqual SyntaxAt(5, 4), 'VimwikiBoldItalic'
|
||||
AssertEqual SyntaxAt(6, 4), 'VimwikiItalicBold'
|
||||
AssertEqual SyntaxAt(7, 4), 'VimwikiDelText'
|
||||
AssertEqual SyntaxAt(8, 4), 'VimwikiCode'
|
||||
AssertEqual SyntaxAt(9, 4), 'VimwikiSuperScript'
|
||||
AssertEqual SyntaxAt(10, 4), 'VimwikiSubScript'
|
||||
|
||||
|
||||
# 2 Links {{{1
|
||||
#################
|
||||
|
||||
Given vimwiki (Wiki Links):
|
||||
Plain link: >
|
||||
[[This is a link]]
|
||||
With description: >
|
||||
[[This is a link source|Description of the link]]
|
||||
Interwiki1: >
|
||||
[[wiki1:This is a link]]
|
||||
Interwiki2: >
|
||||
[[wn.My Name:This is a link]]
|
||||
Interwiki3: >
|
||||
[[wn.MyWiki:This is a link source|Description of the link]]
|
||||
Diary: >
|
||||
[[diary:2012-03-05]]
|
||||
Anchor1: >
|
||||
[[Todo List#Tomorrow|Tasks for tomorrow]]
|
||||
Anchor2: >
|
||||
[[#Tomorrow]]
|
||||
Raw1: >
|
||||
https://github.com/vimwiki/vimwiki.git
|
||||
Raw2: >
|
||||
mailto:habamax@gmail.com
|
||||
Raw3: >
|
||||
ftp://vim.org
|
||||
File1: >
|
||||
[[file:/home/somebody/a/b/c/music.mp3]]
|
||||
File2: >
|
||||
[[file:C:/Users/somebody/d/e/f/music.mp3]]
|
||||
File3: >
|
||||
[[file:~/a/b/c/music.mp3]]
|
||||
File4: >
|
||||
[[file:../assets/data.csv|Important Data]]
|
||||
File5: >
|
||||
[[local:C:/Users/somebody/d/e/f/music.mp3]]
|
||||
File6: >
|
||||
[[file:/home/user/documents/|Link to a directory]]
|
||||
Thumbnail links: >
|
||||
[[http://someaddr.com/bigpicture.jpg|{{http://someaddr.com/thumbnail.jpg}}]]
|
||||
|
||||
Execute (Assert Syntax link):
|
||||
AssertEqual SyntaxAt(2, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(4, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(6, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(8, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(10, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(12, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(14, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(16, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(18, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(20, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(22, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(24, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(26, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(28, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(30, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(32, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(34, 6), 'VimwikiLink'
|
||||
AssertEqual SyntaxAt(36, 6), 'VimwikiLink'
|
||||
|
||||
Given vimwiki (Markdown Links):
|
||||
Inline link: >
|
||||
[Looks like this](URL)
|
||||
|
||||
Image link: >
|
||||
![Looks like this](URL)
|
||||
|
||||
Reference-style links: >
|
||||
a) [Link Name][Id]
|
||||
b) [Id][], using the "implicit link name" shortcut
|
||||
|
||||
Execute (Set syntax markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax link):
|
||||
AssertEqual SyntaxAt(2, 8), 'VimwikiWeblink1'
|
||||
AssertEqual SyntaxAt(5, 8), 'VimwikiImage'
|
||||
AssertEqual SyntaxAt(8, 8), 'VimwikiWikiLink1'
|
||||
AssertEqual SyntaxAt(9, 8), 'VimwikiWikiLink1'
|
||||
|
||||
|
||||
# 3 Header {{{1
|
||||
###############
|
||||
|
||||
Given vimwiki (Wiki Headers):
|
||||
= Header level 1 =
|
||||
== Header level 2 ==
|
||||
=== Header level 3 ===
|
||||
==== Header level 4 ====
|
||||
===== Header level 5 =====
|
||||
====== Header level 6 ======
|
||||
|
||||
Execute (Set syntax default):
|
||||
call SetSyntax('default')
|
||||
|
||||
Execute (Assert Syntax Header):
|
||||
AssertEqual SyntaxAt(1, 10), 'VimwikiHeader1'
|
||||
AssertEqual SyntaxAt(2, 10), 'VimwikiHeader2'
|
||||
AssertEqual SyntaxAt(3, 10), 'VimwikiHeader3'
|
||||
AssertEqual SyntaxAt(4, 10), 'VimwikiHeader4'
|
||||
AssertEqual SyntaxAt(5, 10), 'VimwikiHeader5'
|
||||
AssertEqual SyntaxAt(6, 10), 'VimwikiHeader6'
|
||||
|
||||
Given vimwiki (Markdown Headers):
|
||||
# Header level 1
|
||||
## Header level 2
|
||||
### Header level 3
|
||||
#### Header level 4
|
||||
##### Header level 5
|
||||
###### Header level 6
|
||||
|
||||
Execute (Set syntax markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax Header):
|
||||
AssertEqual SyntaxAt(1, 10), 'VimwikiHeader1'
|
||||
AssertEqual SyntaxAt(2, 10), 'VimwikiHeader2'
|
||||
AssertEqual SyntaxAt(3, 10), 'VimwikiHeader3'
|
||||
AssertEqual SyntaxAt(4, 10), 'VimwikiHeader4'
|
||||
AssertEqual SyntaxAt(5, 10), 'VimwikiHeader5'
|
||||
AssertEqual SyntaxAt(6, 10), 'VimwikiHeader6'
|
||||
|
||||
|
||||
# 10 Code {{{1
|
||||
# 10.1 Code Indent (4 spaces) {{{2
|
||||
#################################
|
||||
|
||||
Given vimwiki (Code indent):
|
||||
this is markdown
|
||||
this is code
|
||||
|
||||
Execute (Assert Syntax normal (i.e. no hi)):
|
||||
AssertEqual SyntaxAt(1, 5), ''
|
||||
AssertEqual SyntaxAt(2, 5), ''
|
||||
|
||||
|
||||
# 10.2 Code Inline (1 backtick) {{{2
|
||||
###################################
|
||||
|
||||
Given vimwiki (Code inline):
|
||||
Well use the `man`
|
||||
|
||||
Execute (Assert Syntax Code):
|
||||
AssertEqual SyntaxAt(1, 16), 'VimwikiCode'
|
||||
|
||||
|
||||
# 10.3 Code Block (3 backtiks) {{{2
|
||||
##################################
|
||||
|
||||
Given vimwiki (Markdown, Text and Vim):
|
||||
this is markdown
|
||||
this is TODO
|
||||
|
||||
```
|
||||
this is text
|
||||
```
|
||||
|
||||
```vim
|
||||
" this is vim
|
||||
set hlsearch
|
||||
```
|
||||
|
||||
`````vim
|
||||
" this is vim
|
||||
set hlsearch
|
||||
`````
|
||||
|
||||
~~~vim
|
||||
" this is vim
|
||||
set hlsearch
|
||||
~~~
|
||||
|
||||
~~~~~vim
|
||||
" this is vim
|
||||
set hlsearch
|
||||
~~~~~~~~~~~
|
||||
|
||||
Execute (Set syntax markdown):
|
||||
let g:vimwiki_global_vars['vimwiki_automatic_nested_syntaxes'] = 1
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert ft, normal syntax and VimwikiTodo):
|
||||
AssertEqual &ft, 'vimwiki'
|
||||
AssertEqual SyntaxAt(1, 1), ''
|
||||
AssertEqual SyntaxAt(2, 9), 'VimwikiTodo'
|
||||
|
||||
Execute (Assert Code syntax):
|
||||
AssertEqual SyntaxAt(4, 1), 'VimwikiPreDelim'
|
||||
AssertEqual SyntaxAt(5, 1), 'VimwikiPre'
|
||||
AssertEqual SyntaxAt(9, 1), 'vimLineComment'
|
||||
AssertEqual SyntaxAt(10, 1), 'vimCommand'
|
||||
AssertEqual SyntaxAt(13, 1), 'VimwikiPre'
|
||||
AssertEqual SyntaxAt(14, 1), 'vimLineComment'
|
||||
AssertEqual SyntaxAt(15, 1), 'vimCommand'
|
||||
AssertEqual SyntaxAt(16, 1), 'VimwikiPre'
|
||||
AssertEqual SyntaxAt(18, 1), 'VimwikiPre'
|
||||
AssertEqual SyntaxAt(19, 1), 'vimLineComment'
|
||||
AssertEqual SyntaxAt(20, 1), 'vimCommand'
|
||||
AssertEqual SyntaxAt(21, 1), 'VimwikiPre'
|
||||
AssertEqual SyntaxAt(23, 1), 'VimwikiPre'
|
||||
AssertEqual SyntaxAt(24, 1), 'vimLineComment'
|
||||
AssertEqual SyntaxAt(25, 1), 'vimCommand'
|
||||
AssertEqual SyntaxAt(26, 1), 'VimwikiPre'
|
||||
|
||||
|
||||
# 11 Math {{{1
|
||||
# 11.1 Math Markdown {{{2
|
||||
#######################
|
||||
|
||||
Given vimwiki (Math markdown):
|
||||
math inline: $ \sum_i a_i^2 = 1 $
|
||||
|
||||
math block:
|
||||
$$
|
||||
\sum_i a_i^2
|
||||
=
|
||||
1
|
||||
$$
|
||||
|
||||
math block env:
|
||||
$$%align%
|
||||
\sum_i a_i^2 &= 1 + 1 \\
|
||||
&= 2.
|
||||
$$
|
||||
|
||||
Execute (Set syntax markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert math syntax):
|
||||
AssertEqual SyntaxAt(1, 18), 'VimwikiEqIn'
|
||||
let syntax_5 = SyntaxAt(5, 1)
|
||||
Assert syntax_5 == 'texStatement' || syntax_5 == 'texMathSymbol'
|
||||
let syntax_12 = SyntaxAt(12, 1)
|
||||
Assert syntax_12 == 'texStatement' || syntax_5 == 'texMathSymbol'
|
||||
|
||||
|
||||
# 11.2 Math Wiki {{{2
|
||||
##############################
|
||||
|
||||
Given vimwiki (Math wiki):
|
||||
math inline: $ \sum_i a_i^2 = 1 $
|
||||
|
||||
math block:
|
||||
{{$
|
||||
\sum_i a_i^2
|
||||
=
|
||||
1
|
||||
}}$
|
||||
|
||||
math block env:
|
||||
{{$%align%
|
||||
\sum_i a_i^2 &= 1 + 1 \\
|
||||
&= 2.
|
||||
}}$
|
||||
|
||||
Execute (Set syntax default):
|
||||
call SetSyntax('default')
|
||||
|
||||
Execute (Assert math syntax):
|
||||
AssertEqual SyntaxAt(1, 18), 'VimwikiEqIn'
|
||||
let syntax_5 = SyntaxAt(5, 1)
|
||||
Assert syntax_5 == 'texStatement' || syntax_5 == 'texMathSymbol'
|
||||
let syntax_12 = SyntaxAt(12, 1)
|
||||
Assert syntax_12 == 'texStatement' || syntax_5 == 'texMathSymbol'
|
||||
|
||||
Include: vader_includes/vader_teardown.vader
|
||||
# vim: foldmethod=marker foldlevel=30 sw=2
|
157
test/table_autoformat.vader
Normal file
@ -0,0 +1,157 @@
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
|
||||
|
||||
# Autoformat {{{1
|
||||
#################
|
||||
|
||||
Given vimwiki (Unaligned table):
|
||||
| title1 | title2 |
|
||||
| - | - |
|
||||
| a1 | b1 |
|
||||
| a2 | |
|
||||
|
||||
Execute (Rename file wiki_test.md for table expand):
|
||||
file wiki_test.md
|
||||
|
||||
Do (A to trigger insertLeave):
|
||||
A
|
||||
|
||||
Expect (Table autoformat):
|
||||
| title1 | title2 |
|
||||
| - | - |
|
||||
| a1 | b1 |
|
||||
| a2 | |
|
||||
|
||||
Do (gqq to reformats table after making changes.):
|
||||
gqq
|
||||
|
||||
Expect (Table autoformat):
|
||||
| title1 | title2 |
|
||||
| - | - |
|
||||
| a1 | b1 |
|
||||
| a2 | |
|
||||
|
||||
Execute (Option table_reduce_last_col = 1):
|
||||
let g:vimwiki_global_vars['table_reduce_last_col'] = 1
|
||||
|
||||
Do (A to trigger insertLeave):
|
||||
A
|
||||
|
||||
Expect (Last column not expanded):
|
||||
| title1 | title2 |
|
||||
| - | - |
|
||||
| a1 | b1 |
|
||||
| a2 | |
|
||||
|
||||
Execute (Option table_reduce_last_col = 0 [restore]):
|
||||
let g:vimwiki_global_vars['table_reduce_last_col'] = 0
|
||||
|
||||
Execute (Option table_auto_fmt = 0):
|
||||
let g:vimwiki_global_vars['table_auto_fmt'] = 0
|
||||
|
||||
Expect (Same as input):
|
||||
| title1 | title2 |
|
||||
| - | - |
|
||||
| a1 | b1 |
|
||||
| a2 | |
|
||||
|
||||
Execute (Option table_auto_fmt = 1 [restore]):
|
||||
let g:vimwiki_global_vars['table_auto_fmt'] = 1
|
||||
|
||||
|
||||
|
||||
# Move and edit cells {{{1
|
||||
##########################
|
||||
|
||||
Do (Use <Tab> in insert mode):
|
||||
GI
|
||||
\<Tab>
|
||||
this_is_16_chars
|
||||
\<Tab>
|
||||
this_is_16_chars
|
||||
\<Esc>
|
||||
|
||||
Expect (Table autoformated with more content):
|
||||
| title1 | title2 |
|
||||
| - | - |
|
||||
| a1 | b1 |
|
||||
| this_is_16_charsa2 | this_is_16_chars |
|
||||
|
||||
Do (VimwikiTableMoveColumnRight):
|
||||
gg:VimwikiTableMoveColumnRight\<CR>
|
||||
|
||||
Expect (Column inverted):
|
||||
| title2 | title1 |
|
||||
| - | - |
|
||||
| b1 | a1 |
|
||||
| | a2 |
|
||||
|
||||
Do (CR must insert new row):
|
||||
GI\<Cr>a3
|
||||
|
||||
Expect (Table with new row starting by a3):
|
||||
| title1 | title2 |
|
||||
| - | - |
|
||||
| a1 | b1 |
|
||||
| a2 | |
|
||||
| a3 | |
|
||||
|
||||
|
||||
|
||||
|
||||
# VimwikiTable Command {{{1
|
||||
###########################
|
||||
|
||||
Given (Nothing):
|
||||
|
||||
Execute (VimwikiTable):
|
||||
VimwikiTable
|
||||
|
||||
Expect (Table 5 x 2):
|
||||
|
||||
| | | | | |
|
||||
|---|---|---|---|---|
|
||||
| | | | | |
|
||||
|
||||
Execute (VimwikiTable 8 3):
|
||||
VimwikiTable 8 3
|
||||
|
||||
Expect (Table 8 x 3):
|
||||
|
||||
| | | | | | | | |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| | | | | | | | |
|
||||
| | | | | | | | |
|
||||
|
||||
|
||||
|
||||
# Justify Cell Content {{{1
|
||||
###########################
|
||||
|
||||
|
||||
Given vimwiki (To be justified from help file [Coffe price]):
|
||||
| Date | Item | Price |
|
||||
|------------|:------:|--------:|
|
||||
| yest |Coffee |$15.00 |
|
||||
| 2017-02-13 |Tea |$2.10 |
|
||||
| 2017-03-14 |Cake |$143.12 |
|
||||
|
||||
Execute (Rename file wiki_test.md for table expand):
|
||||
file wiki_test.md
|
||||
|
||||
Do (A to trigger insertLeave):
|
||||
A
|
||||
|
||||
Expect (Text justified):
|
||||
| Date | Item | Price |
|
||||
|------------|:------:|--------:|
|
||||
| yest | Coffee | $15.00 |
|
||||
| 2017-02-13 | Tea | $2.10 |
|
||||
| 2017-03-14 | Cake | $143.12 |
|
||||
|
||||
|
||||
|
||||
|
||||
Include: vader_includes/vader_teardown.vader
|
||||
# vim: foldmethod=marker foldlevel=30
|
32
test/tabnext_delay.vader
Normal file
@ -0,0 +1,32 @@
|
||||
Include: vader_includes/vader_setup.vader
|
||||
|
||||
Execute (Set fold method):
|
||||
let g:vimwiki_folding = 'expr:quick'
|
||||
call ReloadVimwiki()
|
||||
|
||||
Execute (Expect < 0.5 second delay: Issue #580):
|
||||
" prep
|
||||
edit test/resources/delay.wiki
|
||||
normal! 50%
|
||||
# TODO set ft and set wiki syntax or this error (no fold found)
|
||||
# normal! zozo
|
||||
tabedit
|
||||
|
||||
" run test
|
||||
let start = reltime()
|
||||
tabprev
|
||||
redraw
|
||||
let end = str2float(reltimestr(reltime(start)))
|
||||
|
||||
" cleanup
|
||||
bdelete test/resources/delay.wiki
|
||||
|
||||
" verify
|
||||
Log 'Elapsed time = ' . string(end)
|
||||
Assert end < 0.5, 'Took longer than expected: ' . string(end) . ' seconds'
|
||||
|
||||
Execute (Reset variables):
|
||||
let g:vimwiki_folding = ''
|
||||
call ReloadVimwiki()
|
||||
|
||||
Include: vader_includes/vader_teardown.vader
|
89
test/vader_includes/vader_setup.vader
Normal file
@ -0,0 +1,89 @@
|
||||
Before (Define functions):
|
||||
" change the syntax using a temporary wiki
|
||||
function! SetSyntax(vw_syn)
|
||||
if a:vw_syn ==# 'default'
|
||||
let ext = 'wiki'
|
||||
elseif a:vw_syn ==# 'markdown'
|
||||
let ext = 'md'
|
||||
elseif a:vw_syn ==# 'media'
|
||||
let ext = 'mw'
|
||||
else
|
||||
Log 'ERROR: Invalid syntax "' . a:vw_syn . '" in SetSyntax()'
|
||||
Log 'NOTE: function only accepts "media" for setting mediawiki syntax'
|
||||
return
|
||||
endif
|
||||
let path = expand('%:p:h')
|
||||
let new_temp_wiki_settings = {'path': path,
|
||||
\ 'ext': ext,
|
||||
\ 'syntax': a:vw_syn,
|
||||
\ }
|
||||
|
||||
" Remove any temporary wikis each time this function is called.
|
||||
" This is necessary to ensure syntax is properly set when running multiple tests
|
||||
" NOTE: this assumes there are 3 defined wikis in the vimrc. The last wiki
|
||||
" contains default settings for temporary wikis (so there are always
|
||||
" num wikis in vimrc + 1)
|
||||
let num_wikis = len(g:vimwiki_wikilocal_vars)
|
||||
while num_wikis > 4
|
||||
call remove(g:vimwiki_wikilocal_vars, num_wikis - 1)
|
||||
let num_wikis = num_wikis - 1
|
||||
endwhile
|
||||
|
||||
" add the new wiki
|
||||
call vimwiki#vars#add_temporary_wiki(new_temp_wiki_settings)
|
||||
call vimwiki#vars#set_bufferlocal('wiki_nr', 3)
|
||||
|
||||
" verify syntax was set correctly
|
||||
Assert vimwiki#vars#get_wikilocal('syntax') ==# a:vw_syn, 'ERROR: Vimwiki syntax not set correctly.'
|
||||
endfunction
|
||||
|
||||
" reload plugin to change settings
|
||||
function! ReloadVimwiki()
|
||||
" clear mappings so plugin can be reloaded
|
||||
" this is needed if running manually multiple times
|
||||
nmapclear
|
||||
|
||||
unlet g:loaded_vimwiki
|
||||
source plugin/vimwiki.vim
|
||||
endfunction
|
||||
|
||||
" Copy wiki test resources so that vimtest user can write them
|
||||
function! CopyResources()
|
||||
call system('cp -r /testplugin/test/resources/* $HOME/')
|
||||
" Make diary directory
|
||||
call system('mkdir $HOME/testwiki/diary')
|
||||
call system('mkdir $HOME/testmarkdown/diary')
|
||||
endfunction
|
||||
|
||||
" Delete Hidden buffer, usefull to clean
|
||||
" Stole from: https://stackoverflow.com/a/8459043/2544873
|
||||
function! DeleteHiddenBuffers()
|
||||
let tpbl=[]
|
||||
call map(range(1, tabpagenr('$')), 'extend(tpbl, tabpagebuflist(v:val))')
|
||||
for buf in filter(range(1, bufnr('$')), 'bufexists(v:val) && index(tpbl, v:val)==-1')
|
||||
if bufname(buf) =~ 'Vader'
|
||||
continue
|
||||
endif
|
||||
silent execute 'bwipeout!' buf
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
" Write current file: helper to hide `set bt=`
|
||||
function! WriteMe()
|
||||
set buftype=
|
||||
write %
|
||||
endfunction
|
||||
|
||||
" print a command output to the buffer
|
||||
function! PrintCommand(cmd)
|
||||
redir => message
|
||||
silent execute a:cmd
|
||||
redir END
|
||||
if empty(message)
|
||||
Log 'no output'
|
||||
else
|
||||
silent put=message
|
||||
endif
|
||||
endfunction
|
||||
|
||||
# vim: ft=vim
|
6
test/vader_includes/vader_teardown.vader
Normal file
@ -0,0 +1,6 @@
|
||||
After (Cleanup):
|
||||
delfunction SetSyntax
|
||||
delfunction ReloadVimwiki
|
||||
delfunction DeleteHiddenBuffers
|
||||
delfunction WriteMe
|
||||
delfunction PrintCommand
|
67
test/vimrc
Normal file
@ -0,0 +1,67 @@
|
||||
source /rtp.vim
|
||||
set runtimepath+=/vader
|
||||
|
||||
" vint: -ProhibitSetNoCompatible
|
||||
set nocompatible
|
||||
filetype plugin indent on
|
||||
syntax enable
|
||||
|
||||
" Wiki's resources to be used after:
|
||||
" :!cp -r /testplugin/test/resources/* $HOME/
|
||||
" or from a test.vader file Execute block:
|
||||
" call CopyResources()
|
||||
" This complication aims for these copies to be writable
|
||||
|
||||
" default syntax
|
||||
let vimwiki_default = {}
|
||||
let vimwiki_default.path = $HOME . '/testwiki'
|
||||
let vimwiki_default.path_html = $HOME . '/html/default'
|
||||
let vimwiki_default.syntax = 'default'
|
||||
let vimwiki_default.ext = '.wiki'
|
||||
let vimwiki_default.name = 'DefaultSyntax'
|
||||
|
||||
" markdown syntax - https://github.github.com/gfm/
|
||||
let vimwiki_markdown = {}
|
||||
let vimwiki_markdown.path = $HOME . '/testmarkdown'
|
||||
let vimwiki_markdown.path_html = $HOME . '/html/markdown'
|
||||
let vimwiki_markdown.syntax = 'markdown'
|
||||
let vimwiki_markdown.ext = '.md'
|
||||
let vimwiki_markdown.name = 'MarkdownSyntax'
|
||||
|
||||
" mediawiki syntax - https://www.mediawiki.org/wiki/Help:Formatting
|
||||
let vimwiki_mediawiki = {}
|
||||
let vimwiki_mediawiki.path = $HOME . '/testmediawiki'
|
||||
let vimwiki_mediawiki.path_html = $HOME . '/html/mediawiki'
|
||||
let vimwiki_mediawiki.syntax = 'media'
|
||||
let vimwiki_mediawiki.ext = '.mw'
|
||||
let vimwiki_mediawiki.name = 'MediaWikiSyntax'
|
||||
|
||||
" register the 3 wikis
|
||||
let g:vimwiki_list = [vimwiki_default, vimwiki_markdown, vimwiki_mediawiki]
|
||||
|
||||
" basic settings
|
||||
set backspace=indent,eol,start
|
||||
set wildmode=longest:full,full
|
||||
set wildmenu
|
||||
set wildignorecase
|
||||
set splitbelow
|
||||
set splitright
|
||||
set timeoutlen=600
|
||||
set ignorecase
|
||||
set smartcase
|
||||
set hidden
|
||||
set laststatus=2
|
||||
set hlsearch
|
||||
|
||||
" use ctrl-p/n for history completion instead of up/down arrows
|
||||
cnoremap <C-p> <Up>
|
||||
cnoremap <C-n> <Down>
|
||||
|
||||
" jj to go back to command mode
|
||||
inoremap jj <esc>
|
||||
|
||||
" Use <C-L> to clear the highlighting of :set hlsearch and also preserve the
|
||||
" default behavior of redrawing the screen
|
||||
if maparg('<C-L>', 'n') ==# ''
|
||||
nnoremap <silent> <C-L> :nohlsearch<C-R>=has('diff')?'<Bar>diffupdate':''<CR><CR><C-L>
|
||||
endif
|