VimRepress——用VIM来写博客 » 荒野无灯weblog

Keep It Simple, Stupid.

荒野无灯weblog

VimRepress——用VIM来写博客

VimRepress 可以说是Vimpress的修改版吧 (Vimpress长期都没有更新。)
插件下载:
http://code.google.com/p/ptcoding/

http://www.vim.org/scripts/script.php?script_id=3510

https://github.com/connermcd/VimRepress
安装很简单,不用多说。

:BlogList  "列出blog中的所有文章
:BolgNew " 打开页面撰写心得文章
:BlogOpen id "打开文章进行编辑
:BlogSave "将文章保存到blog中

若要文档生效,记得更新下:

:helptags ~/.vim/doc

然后就是配置了,编辑~/.vimrc 或者 ~/.gvimrc ,添加如下内容:

"vimpress
let VIMPRESS=[{'username':'user0',
                 \'password':'pass0',
                 \'blog_url':'http://www.ihacklog.com'
                 \},
                 \{'username':'user',
                 \'blog_url':'http://your-second-blog.com'
                 \}]

如果有第二个博客就把后面那个也配置,否则就只要填写第一个喽。

发现保存的时候(:BlogSave )提示如下错误信息:

Markdown file uploading … vimpress_4ddeb1ec_mkd.txt
The package python-markdown is required and is either not present or not properl
y installed.

于是安装之:

sudo pacman -S python-markdown

然后重启vim ,OK了。

这篇文章就是用VIM 编辑和发布的。

更新:
发现用这个发布还是有些地方不方便,幸好又在网上找到了一个vimpress加强版(要是能把上面那个版本与这个版本合并就好了,可惜我不会python ):
http://wiki.yepn.net/vimpress
Vimpress 0.9 plus

增加功能:

增加SLUG功能
:BlogList 默认列出前10条日志 :BlogList 0 列出全部日志

增加< !–more–>截断后继续读取日志功能

:BlogCate 列出Blog中的文章分类

:BlogSave 直接把文章保存到草稿,修改发布后的日志用BlogSave保存后,日志状态变为草稿保存,文章修改后用BlogSend发布。

:BlogDel id 删除指定日志后,重新列出新的日志列表(默认10篇)确认删除成功

修正
:BLogNew时categoryName显示不正确
修改more截断问题,打开日志后more标签代码会替换为wordpress能识别的more方式

使用方法:

复制代码命令为blog.vim,代替原来文件即可。需要原Vimpress已经设置成功。

" Copyright (C) 2007 Adrien Friggeri. 
" 
" This program is free software; you can redistribute it and/or modify 
" it under the terms of the GNU General Public License as published by 
" the Free Software Foundation; either version 2, or (at your option) 
" any later version. 
" 
" This program is distributed in the hope that it will be useful, 
" but WITHOUT ANY WARRANTY; without even the implied warranty of 
" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
" GNU General Public License for more details. 
" 
" You should have received a copy of the GNU General Public License 
" along with this program; if not, write to the Free Software Foundation, 
" Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.   
"  
" Maintainer:   Adrien Friggeri  
" URL:      http://www.friggeri.net/projets/vimpress/ 
" Version:  0.9 
" Last Change:  2009 January 15 
" 
" Commands : 
" ":BlogList [count]" 
"   Lists recent  articles in the blog, default is 10, use 0 for all 
" ":BlogCate" 
"   Lists recent catetory in the blog 
" ":BlogNew" 
"   Opens page to write new article 
" ":BlogOpen " 
"   Opens the article  for edition 
" ":BlogDel " 
"   Del the article  
" ":BlogSend" 
"   Publish the article to the blog 
" ":BlogSave" 
"   Draft the article to the blog 
" 
" Configuration :  
"   Edit the "Settings" section (starts at line 63). 
" 
"   If you wish to use UTW tags, you should install the following plugin :  
"   http://blog.circlesixdesign.com/download/utw-rpc-autotag/ 
"   and set "enable_tags" to 1 on line 50 
" 
" Usage :  
"   Just fill in the blanks, do not modify the highlighted parts and everything 
"   should be ok. 

command! -nargs=* BlogList exec("py blog_list_posts()") 
command! -nargs=* BlogCate exec("py blog_list_cates()") 
command! -nargs=0 BlogNew exec("py blog_new_post()") 
command! -nargs=0 BlogSend exec("py blog_send_post()") 
command! -nargs=0 BlogSave exec("py blog_save_post()") 
command! -nargs=1 BlogOpen exec('py blog_open_post()') 
command! -nargs=1 BlogDel exec('py blog_del_post()') 
python < ') 

def blog_edit_on(): 
  global edit 
  if not edit: 
    edit = 1 
    for i in ["i","a","s","o","I","A","S","O"]: 
      vim.command('unmap '+i) 

def blog_send_post(): 
  def get_line(what): 
    start = 0 
    while not vim.current.buffer[start].startswith('"'+what): 
      start +=1 
    return start 
  def get_meta(what):  
    start = get_line(what) 
    end = start + 1 
    while not vim.current.buffer[end][0] == '"': 
      end +=1 
    return " ".join(vim.current.buffer[start:end]).split(":")[1].strip() 

  strid = get_meta("StrID") 
  title = get_meta("Title") 
  slug = get_meta("Slug") 
  cats = [i.strip() for i in get_meta("Cats").split(",")] 
  if enable_tags: 
    tags = get_meta("Tags") 

  text_start = 0 
  while not vim.current.buffer[text_start] == "\"========== Content ==========": 
    text_start +=1 
  text_start +=1 
  text = '\n'.join(vim.current.buffer[text_start:]) 

  parts = text.split(more_mark) 
  if len(parts) == 1: 
      content = parts[0] 
      content_more = '' 
  else: 
      content = parts[0] 
      content_more = parts[1] 

  if enable_tags: 
    post = { 
      'title': title, 
      'mt_text_more': content_more, 
      'wp_slug': slug, 
      'description': content, 
      'categories': cats, 
      'mt_keywords': tags 
    } 
  else: 
    post = { 
      'title': title, 
      'mt_text_more': content_more, 
      'wp_slug': slug, 
      'description': content, 
      'categories': cats, 
    } 

  if strid == '': 
    strid = handler.newPost('', blog_username, blog_password, post, 1) 

    vim.current.buffer[get_line("StrID")] = "\"StrID : "+strid 
  else: 
    handler.editPost(strid, blog_username, blog_password, post, 1) 

  vim.command('set nomodified') 

def blog_new_post(): 
  def blog_get_cats(): 
    l = handler.getCategories('', blog_username, blog_password) 
    s = "" 
    for i in l: 
        s = s + (i["categoryName"].encode("utf-8"))+", " 
    if s != "":  
      return s[:-2] 
    else: 
      return s 
  del vim.current.buffer[:] 
  blog_edit_on() 
  vim.command("set syntax=blogsyntax") 
  vim.current.buffer[0] =   "\"=========== Meta ============\n" 
  vim.current.buffer.append("\"StrID : ") 
  vim.current.buffer.append("\"Title : ") 
  vim.current.buffer.append("\"Slug : ") 
  vim.current.buffer.append("\"Cats  : "+blog_get_cats()) 
  if enable_tags: 
    vim.current.buffer.append("\"Tags  : ") 
  vim.current.buffer.append("\"========== Content ==========\n") 
  vim.current.buffer.append("\n") 
  vim.current.window.cursor = (len(vim.current.buffer), 0) 
  vim.command('set nomodified') 
  vim.command('set textwidth=0') 

def blog_open_post(id): 
  try: 
    post = handler.getPost(id, blog_username, blog_password) 
    blog_edit_on() 
    vim.command("set syntax=blogsyntax") 
    del vim.current.buffer[:] 
    vim.current.buffer[0] =   "\"=========== Meta ============\n" 
    vim.current.buffer.append("\"StrID : "+str(id)) 
    vim.current.buffer.append("\"Title : "+(post["title"]).encode("utf-8")) 
    vim.current.buffer.append("\"Slug : "+(post["wp_slug"]).encode("utf-8")) 
    vim.current.buffer.append("\"Cats  : "+",".join(post["categories"]).encode("utf-8")) 
    if enable_tags: 
      vim.current.buffer.append("\"Tags  : "+(post["mt_keywords"]).encode("utf-8")) 
    vim.current.buffer.append("\"========== Content ==========\n") 
    content = (post["description"]).encode("utf-8") 
    content_more = (post["mt_text_more"]).encode("utf-8") 
    if content_more !='': 
        content = content + more_code + content_more 
    for line in content.split('\n'): 
      vim.current.buffer.append(line) 
      vim.command('%s/\\n\('+more_code+'\)\\n/\\1/e') 
    text_start = 0 
    while not vim.current.buffer[text_start] == "\"========== Content ==========": 
      text_start +=1 
    text_start +=1 
    vim.current.window.cursor = (text_start+1, 0) 
    vim.command('set nomodified') 
    vim.command('set textwidth=0') 
  except: 
    sys.stderr.write("An error has occured") 

def blog_list_edit(): 
  try: 
    row,col = vim.current.window.cursor 
    id = vim.current.buffer[row-1].split()[0] 
    blog_open_post(int(id)) 
  except: 
    pass 

def blog_list_posts(count=10): 
  try: 
    allposts = handler.getRecentPosts('',blog_username, blog_password, count) 
    del vim.current.buffer[:] 
    vim.command("set syntax=blogsyntax") 
    vim.current.buffer[0] = "\"====== List of Posts =========" 
    for p in allposts: 
      vim.current.buffer.append(("%-7s\t" % p["postid"]) + (p["title"]).encode("utf-8")) 
      vim.command('set nomodified') 
    blog_edit_off() 
    vim.current.window.cursor = (2, 0) 
    vim.command('map  :py blog_list_edit()') 
  except: 
    sys.stderr.write("An error has occured") 

def blog_list_cates(): 
  try: 
    l = handler.getCategories('', blog_username, blog_password) 
    del vim.current.buffer[:] 
    vim.command("set syntax=blogsyntax") 
    vim.current.buffer[0] = "\"====== List of Category =========" 
    for i in l: 
        vim.current.buffer.append(i["categoryName"].encode("utf-8")) 
        vim.command('set nomodified') 
  except: 
    pass 

def blog_del_post(id): 
  try: 
    handler.deletePost('',id, blog_username, blog_password) 
    allposts = handler.getRecentPosts('',blog_username, blog_password, 10) 
    del vim.current.buffer[:] 
    vim.command("set syntax=blogsyntax") 
    vim.current.buffer[0] = "\"====== New List of Posts =========" 
    for p in allposts: 
      vim.current.buffer.append(("%-7s\t" % p["postid"]) + (p["title"]).encode("utf-8")) 
      vim.command('set nomodified') 
    blog_edit_off() 
    vim.current.window.cursor = (2, 0) 
    vim.command('map  :py blog_list_edit()') 
  except: 
    pass 

def blog_save_post(): 
  def get_line(what): 
    start = 0 
    while not vim.current.buffer[start].startswith('"'+what): 
      start +=1 
    return start 
  def get_meta(what):  
    start = get_line(what) 
    end = start + 1 
    while not vim.current.buffer[end][0] == '"': 
      end +=1 
    return " ".join(vim.current.buffer[start:end]).split(":")[1].strip() 

  strid = get_meta("StrID") 
  title = get_meta("Title") 
  slug = get_meta("Slug") 
  cats = [i.strip() for i in get_meta("Cats").split(",")] 
  if enable_tags: 
    tags = get_meta("Tags") 

  text_start = 0 
  while not vim.current.buffer[text_start] == "\"========== Content ==========": 
    text_start +=1 
  text_start +=1 
  text = '\n'.join(vim.current.buffer[text_start:]) 

  parts = text.split(more_mark) 
  if len(parts) == 1: 
      content = parts[0] 
      content_more = '' 
  else: 
      content = parts[0] 
      content_more = parts[1] 

  if enable_tags: 
    post = { 
      'title': title, 
      'mt_text_more': content_more, 
      'wp_slug': slug, 
      'description': content, 
      'categories': cats, 
      'mt_keywords': tags 
    } 
  else: 
    post = { 
      'title': title, 
      'mt_text_more': content_more, 
      'wp_slug': slug, 
      'description': content, 
      'categories': cats, 
    } 

  if strid == '': 
    strid = handler.newPost('', blog_username, blog_password, post, 0) 

    vim.current.buffer[get_line("StrID")] = "\"StrID : "+strid 
  else: 
    handler.editPost(strid, blog_username, blog_password, post, 0) 

  vim.command('set nomodified') 

另外又找到一篇文章:

http://simpx.me/2010/12/vimpress/

Tagged in : VIM,wordpress,vimpress

All Comments (0)
Gravatar image
No Comments