Skip to main content

Filter and convert Vimwiki notes using pandoc.

Project description


description: Filter and convert Vimwiki notes using pandoc. project: panvimwiki toc: true vimversion: Vim v9.0 reference-links: true

Filter and convert Vimwiki notes using pandoc

Documentation Status PyPI-Server Test and Publish Python 🐍 distribution 📦 to PyPI and TestPyPI Project generated with PyScaffold Ruff

Introduction

Panvimwiki provides tools for conversion to Microsoft Word docx or other output formats supported by Pandoc Panvimwiki provides command line tools as well as Vim commands to concatenate and convert Diary Notes or convert any Vimwiki note.

Installation

Panvimwiki requires Pandoc Installation with conda is recommended because the system version, e.g., with Ubuntu, may be too old. Or download from the website. Pypandoc supports binary installation of pandoc using pip.

Using the Vim 8 native packages, panvimwiki should install in pack/*/opt/panvimwiki because it depends on :python3 and requires installation of the python package panvimwiki.

From a bash shell, enter the following:

# Adjust dest to suit, e.g., $HOME/vimfiles/pack/vimwiki/opt/panvimwiki
dest="$HOME/.vim/pack/vimwiki/opt/panvimwiki"

git clone https://github.com/jfishe/panvimwiki.git "$dest"

# Activate the python environment used by Vim.
# Then install panvimwiki in that python environment.
python -m pip install "$dest"
# Or to install from pypi:
python -m pip install panvimwiki

Panvimwiki requires Vim compiled with Python 3, so add the following to vimrc prior to :filetype-plugin-on. See :packadd for an explanation. Otherwise, install panvimwiki in pack/*/start/panvimwiki.

if has('python3')
  packadd! panvimwiki
endif

Install Conquer of Completion (CoC) to use Zettelkasten completion.

Usage

Completion

Conquer of Completion (CoC) can complete Vim-Zettel YAML header fields:

  • type: note, literature, reference, or index.
  • status: Create, Process, or Reviewed.

Refer to :h vim-zettel.txt, especially :h g:zettel_options.

Command Line Shell

Panvimwiki provides plain text pre-filters and pandoc filters for use from the command line.

For example from a bash prompt:

cat $HOME/vimwiki/diary/* |
    delete_bullet_star |
    delete_task_pending |
pandoc --from=vimwiki --to=markdown \
    --filter=delete_tag_lines \
    --filter=delete_taskwiki_heading \
    --filter=delete_empty_heading

From python:

from pathlib import Path
from panvimwiki.convert import convert

PREFILTER = (
    "delete_bullet_star",
    "delete_task_pending",
)
FILTER = (
    "delete_tag_lines",
    "delete_empty_heading",
    "delete_taskwiki_heading",
)
EXTRA_ARGS = (
    "--shift-heading-level-by",
    "1",
    "--data-dir",
    str(Path.home() / "vimwiki_html/templates"),
)

convert(
    inputfile=str(Path.home() / "vimwiki/index.wiki"),
    outputfile=str(Path.home() / "vimwiki_html/markdown/index.md"),
    to="markdown",
    prefilters=PREFILTER,
    filters=FILTER,
    extra_args=EXTRA_ARGS,
)

Pre-Filters

delete_bullet_star

Remove unordered lists which use the star (asterisk) bullet marker.

The pre-filter does not remove task list items (see delete_task_pending). The pre-filter does not handle wrapped bullets--i.e., it will delete the bulleted-line and leave the wrapped lines. I haven't figured out a good regex for wrapped lines.

echo '- Bulleted list item 1 should appear' \
     '* Bulleted list item 6 should NOT appear' |
delete_bullet_star
- Bulleted list item 1 should appear
delete_task_pending

Delete pending tasks.

echo '- [ ] Bulleted list done0 item 0 should NOT appear' \
     '- [.] Bulleted list done1 item 1 should appear' |
delete_task_pending
- [.] Bulleted list done1 item 1 should appear

Pandoc Filters

Panvimwiki provides plain text pre-filters, pandoc filters and post-filters for use from the command line.

delete_tag_lines

Delete lines which only contain Vimwiki tags, e.g., ':tag1:tag2:'

delete_empty_heading

Remove headings that do not have any children or paragraphs. Remove tag lines first, delete_tag_lines or the heading is not considered empty.

delete_taskwiki_heading

Post-Filters

reference_citation

Convert citations to a reference list.

Example.md:

::::: {#refs .references .csl-bib-body .hanging-indent entry-spacing="0"}
::: {#ref-bloggs-jones .csl-entry}
Bloggs, A. J., and X. Y. Jones. 1959. "Title Title Title Title Title Title
Title Title Title Title." _Journal Journal Journal_. :::

::: {#ref-chomsky-73 .csl-entry}
Chomsky, N. 1973. "Conditions on Transformations." In _A Festschrift for Morris
Halle_, edited by S. R. Anderson and P. Kiparsky. New York: Holt, Rinehart &
Winston.
:::
:::::

reference_citation < Example.md produces:

[#ref-bloggs-jones]: Bloggs, A. J., and X. Y. Jones. 1959. "Title Title Title Title
Title Title Title Title Title Title." _Journal Journal Journal_.

[#ref-chomsky-73]: Chomsky, N. 1973. "Conditions on Transformations." In _A
Festschrift for Morris Halle_, edited by S. R. Anderson and P. Kiparsky.
New York: Holt, Rinehart & Winston.
wikilink_markdown

Convert Pandoc markdown tasks and wikilinks to :h vimwiki-todo-lists and markdown links compatible with :h vimwiki-syntax-links.

Commands

Local Commands

These commands are only available (and meaningful) when you are currently in a Vimwiki file.

VimwikiConvert[!]

Convert the current Vimwiki buffer. With !, open with default viewer.

Convert the current Vimwiki :buffer to the selected output format (default: docx) specified in g:panvimwiki_settings.

Copy the path to the Word file to the clipboard register "+ quoteplus. On Windows Subsystem for Linux (WSL), convert the path from POSIX to Windows before copying to clipboard.

Remove extraneous info:

  • Vimwiki tag lines, e.g., :tag1:tag2:
  • Not started tasks, e.g., - [ ] Task1
  • Non-task bullet lines, e.g., * [[URI|Description]] or * Text
  • Remove empty parent/child headings.
VimwikiConvertWeek[!]

Concatenate DiaryNotes for Monday through current buffer and convert. With !, open in default viewer.

After concatenating DiaryNotes for the week, behave as VimwikiConvert.

VimwikiReference

If in markdown format, expand Pandoc Citations in the current file and append to the end of the file. The Yaml metadata should specify the bibliographic data and the Citation Style Language (CSL).

Add the following to .markdownlint.yml to suppress MD033:

# MD033/no-inline-html : Inline HTML :
# https://github.com/DavidAnson/markdownlint/blob/main/doc/md033.md
MD033:
  # MD033/no-inline-html Inline HTML [Element: div]
  # Allowed elements
  allowed_elements:
    - "div"

VimwikiReference overwrites the file, so Vim may prompt to reload the buffer (cf. Warning :h W12). If you choose not to reload the buffer, :h :DiffOrig facilitate review of the changes.

VimwikiMarkdownFormat

If in markdown format, convert :h vimwiki-syntax-links wikilinks_title_after_pipe to Inline links, without the "wikilink" title that pandoc adds by default. Preserve :h vimwiki-todo-lists, using task_lists.

VimwikiMarkdownFormat overwrites the file, so Vim may prompt to reload the buffer (cf. Warning :h W12). If you choose not to reload the buffer, :h :DiffOrig facilitate review of the changes.

Settings

Global Settings

g:panvimwiki_settings

Optionally add the following to or, preferably, '~/.vim/plugin/vimwiki.vim'. Panvimwiki defaults to docx format, without extra_args.

let g:panvimwiki_settings = {
      \ 'extra_args': [ '--shift-heading-level-by', '1',
      \ '--data-dir', '~/vimwiki_html/templates/'
      \ ],
      \ 'format': 'docx'
      \ }

Development and Testing

Because pandoc is required, a conda environment called panvimwiki is created. The default name may be overridden with the --name <environment name> parameter.

git clone https://github.com/jfishe/panvimwiki.git
cd panvimwiki
conda env create --file environment.yml
conda activate panvimwiki
tox -av # List tox commands and descriptions.
tox --recreate # Build the package and run tests with python and Vader.
tox -e vim # Run Vader tests and generate coverage report.
# Run Vader tests and view results with Vim.
vim -Nu tests/vim/vimrc -c 'Vader tests/vim/*.vader'

Note

This project has been set up using PyScaffold 4.5. For details and usage information on PyScaffold see https://pyscaffold.org/.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

panvimwiki-0.11.0.tar.gz (114.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

panvimwiki-0.11.0-py3-none-any.whl (20.2 kB view details)

Uploaded Python 3

File details

Details for the file panvimwiki-0.11.0.tar.gz.

File metadata

  • Download URL: panvimwiki-0.11.0.tar.gz
  • Upload date:
  • Size: 114.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for panvimwiki-0.11.0.tar.gz
Algorithm Hash digest
SHA256 01167efca6b226768802b79c10b62cff0e8a19fd8723f9377e6aca3e3ef28f8f
MD5 880afd713f0658ad6284b9f6e011a83f
BLAKE2b-256 928e0cfc0c3df44181feaacab11888d552fa5ed8830c011ecae3d2133a494214

See more details on using hashes here.

Provenance

The following attestation bundles were made for panvimwiki-0.11.0.tar.gz:

Publisher: ci.yml on jfishe/panvimwiki

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file panvimwiki-0.11.0-py3-none-any.whl.

File metadata

  • Download URL: panvimwiki-0.11.0-py3-none-any.whl
  • Upload date:
  • Size: 20.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for panvimwiki-0.11.0-py3-none-any.whl
Algorithm Hash digest
SHA256 05f32a121ec3aa8cf36fc46e1c67d23f683c7c82bc77b6c38e103610079f6b94
MD5 dec9553c36db71b1d1a8e5b4af53a65a
BLAKE2b-256 8284bf05068588d6bccbf055c9d0c4c8240e6c45567decfe0d08ae3cccec5e80

See more details on using hashes here.

Provenance

The following attestation bundles were made for panvimwiki-0.11.0-py3-none-any.whl:

Publisher: ci.yml on jfishe/panvimwiki

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page