Giter Club home page Giter Club logo

simplenote.vim's Introduction

simplenote.vim

A vim plugin to interact with the simplenote API. You can create an account here if you don't already have one.

Now you can take simple notes directly from your favourite editor.

Installation

Install manually by copying simplenote.vim into your plugin folder or use the included mk_vimball.sh to generate a vimball to install.

if using Pathogen:

git clone https://github.com/mrtazz/simplenote.vim.git
~/.vim/bundle/simplenote.vim

Note for both manual and Pathogen installs you will then need to run

git submodule update --init

in the autoload/simplenote.py directory (since simplenote.vim now references simplenote.py as a git submodule).

But it's easier to use a plugin manager:

Add Bundle 'mrtazz/simplenote.vim' to .vimrc
Run :BundleInstall
Add NeoBundle 'mrtazz/simplenote.vim' to .vimrc
Run :NeoBundleInstall
Add Plug 'mrtazz/simplenote.vim' to .vimrc
Run :PlugInstall

Your credentials have to be stored in your vimrc:

let g:SimplenoteUsername = "your simplenote username"
let g:SimplenotePassword = "your simplenote password"

If you don't want to have the credentials in your vimrc (if you manage it with git for example), you can just set the variables in a different file (like ~/.simplenoterc) and source it with source ~/.simplenoterc in your vimrc.

By default all notes are treated as plain text. If you usually write all of your notes in some other format (like markdown or restructured text) you can set g:SimplenoteFiletype to the preferred vim filetype.

Usage

The plugin provides several commands to interact with your Simplenote account. In order to retrieve a list of your notes execute one of the following:

:Simplenote -l
:Simplenote -l YYYY-MM-DD
:Simplenote -l todo,shopping

The first option returns all notes, the second returns only those notes modified since YYYY-MM-DD, the third option shows passing a comma separated list of tags; this will only list notes which have at least one of those tags. This opens a new scratch buffer with a line-wise listing of your notes. With let g:SimplenoteListHeight=X set, the scratch buffer will come up X lines tall. Alternatively when let g:SimplenoteVertical=1 is set, it is opened as a vertical rather than horizontal split window. You can then navigate through the with the arrow keys and enter a note on hitting Return. Now that you see the content of the note, you can interact with this specific note:

:Simplenote -u

updates the content of the current note with the content of the current buffer. The buffer write command :w is also mapped to update the current note. If you want to delete the note, execute

:Simplenote -d

This moves the current note to the trash. If you want to completely delete a note, use

:Simplenote -D

as it will directly delete the note and not only move it to the trash. There also exists a command to create new notes.

:Simplenote -n

creates a new note with the contents of the current buffer. Once the note is created, :Simplenote -u updates the newly created note, also with the contents of the current buffer.

Tagging notes is also supported. If you enter

:Simplenote -t

on a buffer containing a valid note, you get an input dialog, prefilled with existing comma-separated tags for the note, which you can then edit. Tags have to be comma separated and hitting Enter will then update the note with the new tag list.

Notes can be pinned with

:Simplenote -p

on a buffer containing a valid note. Likewise a note can be unpinned with

:Simplenote -P

on a buffer containing a valid note.

There is also an option to open notes directly from a given key:

:Simplenote -o <notekey>

While this is not very useful in everyday usage, it can be used very effectively to create shortcuts to notes you use often. Example:

" add :Todo command
command Todo Simplenote -o <yourtodonotekey>

Now you can jump to your todo note directly with :Todo in vim.

Note sorting

simplenote.vim supports simple note ordering. Per default the sort order is pinned notes first followed by modified date from newest to oldest. The order can be changed by setting the g:SimplenoteSortOrder variable. It should be set to a comma separated list of values which represents the sort order. Allowed values are pinned (pinned before unpinned), tags (notes with tags before untagged ones), modifydate and createdate (both newer before older).

Formatting

The format of the note titles in the list are configurable using the g:SimplenoteNoteFormat option.

Various formatting tags are supporting for dynamically building the title string. Each of these formatting tags supports a width specifier (decimal) and a left justification (-) like that supported by printf.

%F -- flags, always two characters ('*'=pinned, 'm'=markdown)
%T -- tags
%D -- date
%N -- note title
%> -- right justify the rest of the title

Examples:

%N    -- entire note title
%50N  -- note title, max width of 50 characters and right justified
%-50N -- note title, max width of 50 characters and left justified

The default title format is "%N%>[%T] [%D]".

The format of the date string is also configurable using the g:SimplenoteStrftime option. The default strftime is "%a, %d %b %Y %H:%M:%S".

Colors

If the +conceal feature is enabled in vim then syntax highlighting is supported for the Simplenote note list. The highlight groups supported are:

SN_NoteFlags       note flags ('%F' format)
SN_NoteDate        last updated date of the note ('%D' format)
SN_NoteTags        tags assigned to the note ('%T' format)
SN_NoteAgeDay      note title - less than a day old ('%N' format)
SN_NoteAgeWeek     note title - less than a week old ('%N' format)
SN_NoteAgeMonth    note title - less than a month old ('%N' format)
SN_NoteAgeYear     note title - less than a year old ('%N' format)
SN_NoteAgeAncient  note title - ancient ('%N' format)

Dependencies

Version 2 of the SimpleNote API relies heavily on JSON. As JSON and VimL don't really play nice together, basic parts of this plugin are implemented in python. Therefore your vim has to be compiled with python support in order to use this plugin.

Usage behind proxy

Since the plugin uses Python's urllib2 for making HTTP requests, you just have to add these lines (with the correct values) to your .vimrc:

let $HTTP_PROXY =
'http://<proxyuser>:<proxypassword>@<proxyurl>:<proxyport>' let $HTTPS_PROXY
= 'http://<proxyuser>:<proxypassword>@<proxyurl>:<proxyport>'

Development

Contribute

  • Fork the project
  • Make your additions/fixes/improvements
  • Send a pull request

Thanks

mattn, Tim Pope and Scrooloose who write awesome vim plugins which I took as a basis to learn how to write vim plugins.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.