git是啥,github是啥,Org-mode是啥,vimwiki是啥,个人wiki是啥(vimwiki+dropbox+github)

https://www.v2ex.com/t/34605

................................

http://zh.wikipedia.org/wiki/Git

Git是一个分布式版本控制软件配置管理软件,原来是linux内核开发者林纳斯·托瓦兹(Linus Torvalds)为了更好地管理linux内核开发而创立的。需要注意的是和GNU Interactive Tools[3],一个类似Norton Commander界面的文件管理器有所不同。

 http://zh.wikipedia.org/wiki/Github

GitHub 是一个用于使用Git版本控制系统项目的共享虚拟主机服务。它由GitHub公司(曾称Logical Awesome)的开发者Chris Wanstrath、PJ Hyett和Tom Preston-Werner使用Ruby on Rails编写而成。

GitHub同时提供付费账户和为开源项目提供的免费账户。根据在2009年的Git用户调查,GitHub是最流行的Git存取站点。[2]它提供了像feeds、followers和显示开发者们怎样在他们版本库上的版本工作的网络图表。

GitHub也提供一个粘贴箱风格的站点,个人信息库和网页使用Wiki,通过一个git版本库即可对这些页面进行编辑。

http://zh.wikipedia.org/wiki/%E4%B8%AA%E4%BA%BAWiki

个人Wiki是一个主要作为个人使用而维护的Wiki。个人Wiki允许人们以类似社区Wiki的风格在他们的桌面或移动计算设备上组织信息。由于维基百科的影响力,个人Wiki又被翻译成个人维基[原创研究?]

个人Wiki可以被粗略地分为含个人版的多用户Wiki,以及那些设计为仅用于单个用户的维基应用程序,这些应用程序不依赖于数据库引擎和万维网服务器。一流的个人Wiki,包括许多社区Wiki,诸如MoinMoinTWiki,因为这些也可以被独立安装使用。这可能需要附加软件的安装,例如一个万维网服务器,一个数据库管理系统,或一个WAMP/LAMP软件包。然而,这些并不意味着Wiki必须对外部用户可访问。

使用一些独立的密码可以保护Wiki运行在他们自己的万维网服务器上,也能使用第三方主机。这种方式的好处就是可以从任何万维网浏览器中访问个人空间,在家、在工作中、在一个个人数码助理上、在一个网吧里,等等。在一个机器上所做的修改在其它终端上面立即可以访问。

===============================================================================

http://wiki.ktmud.com/tips/vim/vimwiki-guide.html

用 vimwiki 搭建你自己的维基世界

目录

Vim 里有个 vimwiki 插件,正在使用 Vim 的同学一定有所耳闻。有了vimwiki, 搭配Vim本身强大的编辑功能,你就拥有了一个快速、轻巧、功能强大的个人笔记本。通过 vimwiki 输出HTML页面,你还能方便地和别人分享自己的知识积累。您现在看到的这个丘迟的维基世界即是通过 vimwiki 搭建。为什么要叫做“维基世界”?因为只要你懂一点前端知识,它可以不仅仅是一个简单的知识管理系统,还能成为一个 playground ,任你自由发挥。

 

为什么要使用 vimwiki

众所周知,维基语法的作用有三点。1. 使条目更规范。通过一定转换,wiki 能输出为拥有约定俗成格式的HTML;2. 节约编辑时间。 显然,你不用写出完整的HTML标签,也不用在可视化编辑器中点来点去;3. 充分的可读性。使用维基语法书写的文档,即使未被转为HTML,内容的语义也是一目了然,甚至表格也能清晰地阅读。相较而言,UBB什么的简直就是扯淡嘛。

使用 vimwiki ,当然是为了享受维基语法的这些优点。但 vimwiki 提供的不仅这些,它还可以帮你维护 TODO-LIST 和个人日记。它生成的HTML文件可以轻松自定义,只要你愿意,你完全能把它打造成个人网站,甚至是拥有评论系统的博客。正如闲耘这样。

安装 vimwiki

vimwiki 的安装同其他vim插件一样,把下载回来的东西解压到 vimfiles 里就好了。有 zip 包和 vba 包两种格式。其中 vba 是 Vim 独有的插件安装包。推荐使用 vba 安装,因为它能保存你的安装信息,不高兴了还可以卸载(详细说明请:h vba)。要使用这种安装方式,需要有 vimball 插件。Windows 下的 gvim 已经自带。如果你还没有这东西,可以先到 vim.org 自行下载

使用 Vim 打开 vimwiki.vba ,然后执行 :so % ,就这么简单。

如果你选择了 zip 包,解压完成后你可能还需要重建帮助文件索引。请执行 :helptags $VIMFILES/doc 。其中 $VIMFILES 就是您的 vimfiles 目录。这是需要在 vimrc 中定义的系统变量, Windows 下应该是 $VIM/vimfiles , Linux 下是 ~/.vim/ 。请检查您的 vimrc 里是否有这样的代码:

if has("win32")
  let $VIMFILES = $VIM.'/vimfiles'
else
  let $VIMFILES = $HOME.'/.vim'
endif

如果还没有,就赶快加上吧。

如果你正在使用 MRU ,并且设置了 MRU_Include_Files ,记得把 .wiki 也包括进去。

装好之后,您可以马上使用 :h vimwiki 查看帮助。相信我,查看帮助文档绝对是最管用的学习方式(虽然耗时更久,但学得更全面,省去许多将来求助搜索引擎的时间)。当然,如果你英文不好,看不太懂,本文的存在就是为了帮助你,别急,慢慢来。

开始使用 vimwiki

使用快捷键 <leader>ww 开始编辑您的第一个 vimwiki 吧! 首次使用 vimwiki 时, 它默认会在操作系统用户目录(即 ~/ )建立一个 vimwiki 文件夹,保存所有你的 wiki 条目。如果你调用 :Vimwiki2HTML 命令把 wiki 条目转为 html 页面,它会创建一个名为 vimwiki_html 的文件夹保存所有生成的 html 文件。

基本的 Wiki 语法

= 一级标题 =  
== 二级标题 ==
=== 三级标题 ===
此次类推。

当标题前面有空白时,标题文本居中对齐。
       = 我是居中的标题 =

*粗体*  _斜体_  ~~删除线~~   `Some Code 代码` 

注意 这几个针对文本格式的标签,都要求左右留有空白。
请注意你的代码高亮,一般来说,有了相应的高亮,你用的wiki标签才生效。

^

^标  ,,

,,标

    四个空格缩进的内容会被转成blockquote
    
{{{ class="brush:php"
这中间的内容会被放到一个 pre 里,适合贴代码。
上面的 class 是可选的,一般用来安排代码高亮。
事实上,这一块代码展示就是放在了一个 pre 里。
}}}

WikiItem  大写开头的驼峰英文会被自动当作一个维基词条,并添加链接
[[Wiki Item]]  这是手动建立维基词条的方式
[[wiki item|description]]  输出HTML时显示description,链到 wiki item
http://ktmud.com/  外部URL会被自动转换成链接
[http://ktmud.com Ktmud]  带文字的外链
[images/hello.jpg] 输出 <img src="images/hello.jpg" />
[[images/hello.jpg]] 输出图片,并链向图片地址

* 无序列表 条目一
* 无序列表 条目二 
  - 子列表 条目一
  - 自列表 条目二

# 有序列表 条目一
# 有序列表 条目二

* 和 - 是等价的,后面必须跟一个空格

您可以查看本文的wiki源文件加深理解。

参考 :h vimwiki-syntax

特殊占位符

在wiki条目中使用以下占位符,能对生成的HTML文件做一些特殊的处理。

  • %toc 自动生成的目录
  • %title 指定HTML文档的title,建议放到文档最末尾。如果不指定,title 就是文件名
  • %nohtml 告诉 vimwiki 不为某条目生成HTML文件。即使你在该条目打开时为它单独执行 :Vimwiki2HTML ,也不会生成。

生成HTML

使用 :Vimwiki2HTML 可以为当前维基条目生成HTML文件,使用 :VimwikiAll2HTML 可以为所有条目生成HTML。您可以为每个维基项目指定 auto_export 选项,这样在wiki文件保存时就会自动生成HTML。个人不建议这样做,因为当条目很大,保存就相当费时。

定义下面的快捷键映射即可:

map <S-F4> :VimwikiAll2HTML<cr>
map <F4> :Vimwiki2HTML<cr>

键操作

快捷键总览

  1. <leader>ww 在当前窗口打开维基首页
  2. <leader>wt 在新tab打开维基首页
  3. <leader>w<leader>w 打开/新建当天日记
  4. <leader>w<keader>t 在新tab打开/新建当天日记
  5. <leader>ws 选择维基项目(详见下面的“多个维基项目”一节)

编辑时的按键

  1. 尚未建立的词条会被显示为红色(或其他你的 Vim 语法高亮定义的错误颜色),在词条上敲回车键,可以编辑这个词条。点击 Shift-回车,在新的分割窗口编辑该词条。编辑好以后点击退格(Backspace)键,可以返回链入页
  2. 使用 Tab 键,可以跳到下一个维基词条或链接,使用 Shift-Tab 跳到上一个
  3. 插入模式下使用Shift-Enter,插入 <br> 并换行
  4. 在标题上点击 - 和 = (也就是 - 和 + ),可以分表提升和降低标题层级

另有条目管理相关的快捷键 <leader>wd 和 <leader>wr ,分表代表删除和重命名当前条目。其中重命名条目很强大,还能更改所有其他条目内引用了该条目的链接。 重命名之后别忘了重新生成所有条目的HTML。

 


 

进阶操作

日记功能

使用快捷键 <leader>w<leader>w 可以快速编辑当天的日记。还可以配合 Calendar 插件 轻松管理你的日记。

请马上下载并安装 calendar.vim。 安装后,定义一下快捷键吧:

" calendar
map <F8> :Calendar<cr>

按 F8 调出日历窗口,按 q 退出。

在日期上点回车,就可以编辑当天的日记了!

PS: 按左右键在前后一个月里跳转,按上下键在前后一年跳转。按 t 回到当天。当然,Vim 默认的上下左右 hjkl 也是能用的。

多个维基项目

您可以配置 g:vimwiki_list,指定多个维基项目,它们各自拥有单独的文件夹。这就允许你把工作维基和生活的琐事记录完全分开。

请打开 vimrc ,加入以下内容:

let g:vimwiki_list = [{'path': 'E:/path/to/vimwiki-1/vimwiki/',  
  \ 'path_html': 'E:/My Dropbox/vimwiki_html/'
  \ 'html_header': 'E:/My Dropbox/Public/vimwiki_template/header.htm',
  \ 'html_footer': 'E:/My Dropbox/Public/vimwiki_template/footer.htm',
  \ 'diary_link_count': 5},
  \{'path': 'Z:/path/to/vimwiki-2/vimwiki/'}]

这里其实定义了两个维基项目。 path 是必须的,说明你想要把 wiki 条目存在哪个目录。其他选项各有默认值。生成的HTML存放在 path_html 下默认是与 path 同目录下的WIKIFOLDER_html ,其中 WIKIFOLER 是你存放维基条目的文件夹名。你可以分别为每个 wiki 项目指定 html 头部和尾部模板,建议把模板文件后缀采用 htm ,既和生成的 html 有所区分,又能保证语法高亮和各种 ftplugin 可用。 diary_link_count 是指 diary.wiki 里每行放多少个日志链接。

定义好之后,你可以使用 <leader>ws 选择当前活动的维基项目。使用 <leader>ws 会弹出一个维基项目的列表,并带有编号,使用这个编号加上“快捷键总览”部分的快捷键,就可以打开相应项目的首页、日记等。如 2<leader>w<leader>w 就是在当前窗口打开列表中第二个项目的日记。

更多选项请参考 :h viwmiki-local-options

任务管理 TODO-list

Loading...

编辑表格

Loading...

 


 

调教你的 vimwiki

更改一点默认配置

目前我的 vimrc 里有这些内容:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
" vimwiki
 
"     是否在词条文件保存时就输出html  这个会让保存大词条比较慢
      所以我默认没有启用  有需要的话就把这一行复制到下面去
"     \ 'auto_export': 1,
 
" 多个维基项目的配置
let g:vimwiki_list = [{'path''E:/My Dropbox/vimwiki/',
      'html_header''E:/My Dropbox/Public/vimwiki_template/header.htm',
      'html_footer''E:/My Dropbox/Public/vimwiki_template/footer.htm',
      'diary_link_count': 5},
      \{'path''Z:\demo\qiuchi\wiki'}]
 
" 对中文用户来说,我们并不怎么需要驼峰英文成为维基词条
let g:vimwiki_camel_case = 0
 
" 标记为完成的 checklist 项目会有特别的颜色
let g:vimwiki_hl_cb_checked = 1
 
" 我的 vim 是没有菜单的,加一个 vimwiki 菜单项也没有意义
let g:vimwiki_menu = ''
 
" 是否开启按语法折叠  会让文件比较慢
"let g:vimwiki_folding = 1
 
" 是否在计算字串长度时用特别考虑中文字符
let g:vimwiki_CJK_length = 1
 
" 详见下文...
let g:vimwiki_valid_html_tags='b,i,s,u,sub,sup,kbd,del,br,hr,div,code,h1'
警告! 以下为高级内容,虽然我手把手在教,但毕竟折腾耗时。
而且您的操作可能因为 vimwiki 将来的版本升级而失效。
请评估自己的时间成本!

做一个你自己的模板

vimwiki 生成的HTML会都会链接相应vimwiki_html目录下的style.css。如果你不自己指定,它会自动生成一个默认的。CSS禅意花园的境界是什么来着,仅仅修改 style.css 就能拥有风格完全不同的页面。通过简单修改 style.css ,你完全可以创造自己风格的维基站。加上自定义文档头部和尾部的功能,折腾出一个个人网站来绰绰有余。当然,如果你还在想新闻列表,feed订阅什么的,请赶快走开。毕竟, vimwiki 不是 CMS 。

可惜的是,并不能指定一个 style.css 的模板,如果你还折腾了一些 JavaScript 增强,就更麻烦了。需要的话请自行把相关文件复制过去吧。当然,你也可以直接把本页面另存为,使用我的模板!具体实现请自己折腾。

HTML 模板增强

使footer也可以引用 %root_path%

修改 $VIMFILES/autoload/vimwiki_html.vim ,第 1169 行

call extend(ldest, s:get_html_footer())

换为

call extend(ldest, s:get_html_footer(subdir))

相应的, s:get_html_footer 这个函数也要改一下。第 136 行,函数定义的部分:

function! s:get_html_footer()

改为

function! s:get_html_footer(subdir)

再从 s:get_html_header 里把处理 %root_path% 的部分拷过去。第 104 行:

call map(lines, 'substitute(v:val, "%root_path%", "'. \ s:root_path(a:subdir) .'", "g")')

复制到第 141 行 let lines = readfile(expand(VimwikiGet('html_footer'))) 之后

在wiki里使用更多的HTML标签

vimwiki 有一个 g:vimwiki_valid_html_tags 值,可以指定允许写在 wiki 中的HTML标签。 g:vimwiki_valid_html_tags 的默认值是 'b,i,s,u,sub,sup,kbd,br,hr' ,也就是说,当你在 wiki 中输入:

<b>Hello</b> <strong>Hello</stong>

输出的HTML会显示为:

Hello <strong>Hello</stong>

标签 b 被当作可用的HTML标签,而 strong 则输出为文本。

但有时候我们需要建立更强大的维基页面,不只用到这几个标签。比如本站首页的“有什么特别的”部分,就是一个有特定 class 和 id 的 div。于是在 vimrc 中定义:

let g:vimwiki_valid_html_tags='b,i,s,u,sub,sup,kbd,br,hr,div,del,code'

在这里我添加了 divdelcode 三个标签。

但是,非常不幸,当我们需要在维基里贴HTML代码,即使我们把代码放到了 {{{ }}} 包裹的 pre 里,这几个标签还是会被输出为实际的HTML标签,而不是文本。

解决办法还是修改 vimwiki_html.vim 这个文件。

找到 " WIKI2HTML "{{{ 所在行,也就是开始转换HTML的地方。

在前面添加一个函数:

function s:parse_tag_keeper(line)
  let line = substitute(a:line,'\\&lt;',
        \'\&lt;', 'g')
  let line = substitute(line,'\\&gt;',
        \'\&gt;', 'g')
  return line
endfunction

然后在之后的 s:parse_line(line, state) 函数内,插入这个函数的调用:

    ...

    let line = s:safe_html(a:line)
    let line = s:parse_tag_keeper(line)

这样如果我们用 <tag> 的形式输入 valid_html_tags 包括的标签,输出的HTML就会把它们当成文本处理了。

在写本文时,我需要输出 {{{ }}} ,而这对标记被作为了 wiki 里 pre 区块的 pattern 。于是就还要再写一个函数:

function s:parse_pre_keeper(line)
  let line = substitute(a:line,'\\{\\{\\{',
        \'{{{', 'g')
  let line = substitute(line,'\\}\\}\\}',
        \'}}}', 'g')
  return line
endfunction

就把它定义在 s:parse_tag_keeper 之后吧。但调用的时候怎么办呢?肯定要放在 vimwiki_html.vim 处理了 pre 区块之后。思来想去,只能放在刚好要输出HTML文件的时候。但是 vim 的 writefile 函数,接受的参数是一个 list (相当于数组),而不是字串。既然如此,我们就把输出结果给合并了再替换,然后再包装成 list 。

找到这句:

call writefile(ldest, path.wwFileNameOnly.'.html')

稍微修改一下:

let output = join(ldest, "\n\r")
let output = s:parse_pre_keeper(output)
let outputlist = split(output, "\n\r")
call writefile(outputlist, path.wwFileNameOnly.'.html')

之所以还要再split,是因为writefile写入的 NL 是无法用字符模拟的。这样当然会造成性能问题,如果有知道更好解决方案的,请留言告诉我。

################################################################################

 

http://www.berlinix.com/vim/VimWiki.php

下载安装

  1. 从vim.org下载 VimWiki。
  2. 把 vimwiki-N-N.vba.gz 下载到任意目录,用Vim打开,执行:so %命令即可。

安装完后,需要一些简单的配置,在_vimrc/.vimrc中添加(这是VimWiki1.2的配置,VimWiki1.1.x的配置略有不同):

let g:vimwiki_list =[{'path':'d:/vimwiki/',
            \'template_path' : 'd:/vimwiki/template/',
            \'template_default':'default_template',
            \'template_ext' : '.html',
            \'path_html':'d:/vimwiki/html/'}]

设置了VimWiki的路径,模版文件的路径,默认的模版文件,模版文件的后缀,输出HTML的路径信息。我的一个VimWiki工作目录如下图:

My VimWiki

VimWiki语法

VimWiki文件通常以.wiki为后缀。

标题和目录

通常在wiki文件的页首定义文章标题和目录,如

%title 文章标题-VimWiki插件

%toc 文章目录

在VimWiki生成HTML页面时,将生成 title(标题)和toc(目录)。

标题。通过= 标题 =的形式定义各级标题,如= h1 =、== h2 ==,最多支持6级标题。可以在任意行按键盘的+键,就自动添加标题(如果已存在标题,则降低标题级别),按-键,就自动删除标题(如果已存在标题,则升高标题级别)。

链接(内链和外链)

wiki链接。通过

[[主题]]

的方式,建立新的wiki页。在[[主题]]上键入回车,就会打开对应的wiki文件,如果没有,则自动创建。

外部链接。通过如

[http://www.berlinix.com 波黎克斯]

的方式,引用外部链接,这种方式的展现效果只显示链接的描述(上例即只显示“波黎克斯”这几个字)。

表格中使用链接的格式为[[link][descr]],而不能用通常的[[link|descr]]格式。

格式化文字段

有几种常见方法:

  1. 在一行的开始缩进4个字符(所有文字必须在一行)。生成HTML代码<pre>。
  2. {{{}}}把代码段扩起来(可以有多行)。生成HTML代码<pre>。
  3. 用"`"(数字键1)前面那个键把文字扩起来(所有文字必须在一行)。生成HTML代码<code>。

修饰文字显示效果

有几种常用方法:

  1. *将文字扩起来(*和前后的文字间要有空格),以加粗方式显示,如*加粗*的效果为: 加粗
  2. ^实现文字上标,如x^2^的效果为:x2
  3. ,,实现文字下标,如A,,1,,的效果为:A1

表格

定义表格的语法如:

| HEAD1| HEAD2    ||------+----------||Vim|Editor|| GCC  |Compiler|

_vimrc中的Vimwiki配置

设置.wiki中可用的html标签

我将其配置为所有标签都不支持。因为我的笔记中有一些HTML相关的笔记代码,默认情况下会被浏览器解释为真正的HTML语句。如果你希望在Vimwiki中直接写HTML标签,那可以通过vimwiki_valid_html_tags选项配置。

let g:vimwiki_valid_html_tags =''

设置Vimwiki支持的文件后缀

例如在.wiki中refer了一个名为my.cpp的文件,会被默认扩展为my.cpp.html,这个选项告诉Vimwiki,对设置了的文件类型不进行扩展。

let g:vimwiki_file_exts ='c, cpp, wav, txt, h, hpp, zip, sh, awk, ps, pdf'

为VimWiki定义快捷键

nmap <F5>:Vimwiki2HTML<CR>
nmap <F6>:VimwikiAll2HTML<CR>

定义了2个快捷键。<F5>是为当前wiki生成HTML(和浏览器刷新键一致),<F10>是为所有wiki生成HTML。

配置多个VimWiki项目

let g:vimwiki_list =[{'path':'d:/vimwiki/'},{'path':'d:/pwiki'}]

禁用驼峰形式生成wiki页面

指如BerlinWiki这样两个以大写字母开头的单词组合。默认情况下,VimWiki会为驼峰形式的单词,标记为新wiki页面。可以关闭这个选项:

let g:vimwiki_camel_case =0

自定义的HTML页面

如果生成HTML的目录下有手工hack的html文件,也会被无情的删除,可以通过 g:vimwiki_user_htmls 选项配置用户html文件,不被自动删除。

let g:vimwiki_user_htmls ='contact.html, canvas-1.html, html.html'

VimWiki技巧

在一个标签上按回车(<Enter>),即可打开新的wiki页。

配置外链浏览器,在一个外链上按回车(<Enter>),即可在浏览器打开目标页面。

退格键(<Backspace>)可以跳回上一个wiki文件。

使用\wr修改wiki名。有可能修改出错,可以把\wr后的错误用sed修复,如:

sed -i "s/\[\[\[\[Linux\]\]/\[\[Linux/g"*.wiki

VimWiki 使用体会

我个人使用VimWiki的一些体会。

文件命名

出于编辑效率考虑,我没有在wiki目录下划分目录。区分不同类别的wiki,用文件名完成,例如Linux类别的文档 linux_xxx.wiki,Apache类别的文档 apache_xxx.wiki,如果还有子类,继续用 _ 串联起来。文件名一定要规范,否则等到你需要用脚本批量处理wiki文件时,麻烦就纷至沓来。

文档归类

文件划分的另一个问题是,因为VimWiki创建文件过于方便,所以可能创建很多小文档,其中又没有太多内容(我的wiki就有这个严重毛病,在克服)。最好是把同类知识放入一个文档,直到该文档大得维护/引用不便后,再去拆分。

日期与时间戳

日期。把VimWiki当作知识管理工具,通常无需为文档注明日期,因为需要在一份文档上进行数十,甚至上百次修改(如果你经常更新知识库的话);如果要输出HTML,供人阅读,那最好也通过脚本自动为文档添加日期(最后修改时间)。

写作方法

写作。看到的、实践过的、学习的、经历过的都可以记录在案,供日后快速恢复思路、供人参考之需。有句话说不要在一个地方摔倒两次,那么通过日积月累的写作、归纳,可以在一个小知识点上进行巨大的扩展,打通不同领域的知识。特别是当前人心浮躁,知识碎片过多,通过wiki式的不懈记录,可以积小流而成江海,积跬步而至千里。

VimWiki 可能存在的问题

如果用VimWiki写一篇介绍VimWiki自身的.wiki文档(例如这份文档),就会发现生成的HTML完全走样,因为位于{{{ }}} 中的wiki语句也被解析了,所以要小心避免。

据我的使用经验,VimWiki1.2生成HTML的判断标准是:如果文档有更新,或默认模版有更新,调用 Vimwiki2HTML/VimwikiAll2HTML 会生成新的HTML页面。但如果有多个模版,其他模版修改后,调用 VimwikiAll2HTML 则无效,需要手工删除*.html。

VimWiki的替代品

VimWiki是个非常简单的Wiki系统,如果你嫌它过于简陋,可以尝试其他Wiki系统。

MediaWiki维基百科即基于MediaWiki。

Instiki。Instiki用Ruby on Rails写成,作者David H. Hansson也是Ruby on Rails的作者。Instiki支持Textile, Markdown和RDoc三种wiki语法,可将整个wiki网站导出为一个包含静态HTML的ZIP文件,支持Tag和RSS,支持上传图片/文件。Instiki底层使用sqlit作为数据库,因此存储又成了二进制而非文本。

 

##############################################################################

 

http://xbeta.info/vimwiki.htm

[投稿]Pkm工具:Vimwiki

作者: yibie  日期: 2010-08-30  分类: 1.4 信息管理   标签: gvimPIM/PKM

说明1:本文最初由Yibie于2009年12月投稿(原文)。在Yibie从Vim转向Emacs后,善用佳软接手更新本文。
说明2:阅读本文需要先了解和掌握Vim的基本使用。

用最顺手的Vim(介绍),以纯文本形式,构建自己Wiki,形成个人的知识库——这是很多人的梦想。而Vimwiki介绍)让梦想成真。

Vimwiki自称为 Personal Wiki for Vim(用Vim管理的个人wiki),可用来管理和组织笔记、想法,用来管理待办事项(todo list),用来编写文档。

1. Vimwiki的安装

1.1 Vimwiki插件的下载与安装

打开Vimwiki官方主页,下载 vimwiki.vba 文件到任意目录。
用Vim打开vimwiki.vba文件,然后在”Normal模式”下输入命令’:so %’,等一会儿,安装将自动完成。

1.2 Vimwiki的基本配置

Vimwiki的一些基本配置需要在vim配置文件中指定,主要是存储路径。
读者可参照下例进行修改,然后放到_vimrc文件中:

” vimwiki
let g:vimwiki_use_mouse = 1
let g:vimwiki_list = [{'path': 'E:/vimwiki/',
\ 'path_html': 'E:/vimwiki/html/',
\ 'html_header': 'E:/vimwiki/template/header.tpl',}]

最后3句分别指定了:
- 存放Vimwiki文件的路径(Vimwiki的文件后缀为.wiki)
- 从Vimwiki转换为Html网页时的保存路径;
- Vimwiki转换网页时使用的网页模板的路径。

2. Vimwiki入门:体验式教程

进入首页
操作:在Vim的Normal模式下,键入 \ww 三个键。
结果:Vim就会打开wiki首页(index.wiki)。
更多说明:① index.wiki所在目录见上述设置。② \ 键实际是<Leader>符,也可自定义。

创建新页面
操作:在首页中随便键入一些文字。比如, “这是wiki首页。 我要创建一个新页面 NewPage。”
结果:NewPage 会高亮显示。
更多说明:
- NewPage 这样的格式称为驼峰词,是创建新页面的最方便的做法。
- 对于更复杂的页面名称或中文页面名称,可以用双方括号表示。比如 [[中文页面]] 将创建 中文页面.wiki。括号内也可以用半角竖线分割,前半部分表示文件名,后半部分表示描述。比如 [[page3|我的第3篇wiki]] 将生成 page3.wiki 文件。而导出为html时,超链接的文字只有描述“我的第3篇wiki”。这种做法可以兼顾文件名的精简、规律、规范,与人工阅读的直观。采用Vim7.3中的最新 conceal text 特性,也可以在wiki中直接隐藏这些不用显示的符号,详见 这篇文章
- “快速引用某页面,并且,该页面若不存在则自动创建”是wiki的核心优势之一。

跳转到新页面
操作:在 Normal 模式下用光标双击 NewPage。
结果:index.wiki自动保存、关闭。在当前窗口打开了 NewPage.wiki 页面。
更多说明:
- Enter:与双击效果等同,在当前窗口中打开NewPage页面。
- Shift+Enter:上下分割窗口,NewPage在上,原页面在下。
- Ctrl+Enter:左右分割窗口,NewPage在左,原页面在右。

返回首页
操作:在 NewPage 中输入一些内容。进入Normal模式,按BackSpace。
结果:NewPage自动保存;并返回index.wiki页面;此时 NewPage 变成了另外一种高亮(区分

页面内的格式编辑
待完成……

2.1 Vimwiki的基本语法摘要

Vimwiki的下载主页上面给出一个快速学习Vimwiki语法的知识卡片(pdf格式,可通过一些软件转换为图片),从上面便可知道所有的Vimwiki中使用的语法,十分简单,方便使用.

PDF地址:http://habamax.ru/myvim/data/vimwikiqrc.pdf

2.1.1 普通语法:
*bold* — bold
_italic_ — italic
WikiWord — link to WikiWord (这是驼峰词的用法)
[[complex wiki link]] — link to complex wiki link
Indent lists with at least 1 space:
* bullet item
# numbered list item
= Header1 =
== Header2 ==
=== Header3 ===

2.2 Vimwiki键盘指令

<Leader>ww — 打开默认的wiki主页
<Leader>wt — 在新的标签页中打开默认的wiki主页
<Leader>ws — Select and open wiki index file.(未知)
<Leader>wd — 删除你所在的wikiword的页面
<Leader>wr — 重命名你所在的wikiword页面
Backspace — 返回上一页
Tab — 寻找下一个wikiword
Shift Tab — 寻找上一个wikiword
如果有什么不懂,可输入在”Normal”下输入”:h vimwiki-mappings”查询

2.3 Vimwiki发布为html网页

Vimwiki可导出为html格式,便于发布为网页。
输入’:Vimwiki2HTML — 将当前wiki页转换成Html格式’
输入’:VimwikiAll2HLML — 将所有的wiki页转换成HTML格式’

3. Vimwiki的优点与缺点

3.1 Vimwiki的优点

  • 与Vim紧密结合,可使用Vim的内建的正则表达式规则,高效处理文本
  • 与Vim紧密结合,可利用Vim内建的多种命令,以及可显示多个分页的特性,同时展示多种窗口,快速查看多份资料.
  • 由于Vim是文本处理工具,所以任何笔记,只要存为文本数据,便可以用Vim来组织和整理
  • 内置了特别的语法高亮模式,在观感上与普通见到的wiki没有多大的分别.
  • 可利用’:VimwikiAll2Html’这个命令快速将文本转化为网页.
  • 在Vim中自动识别网络链接格式,点击便可打开网页.
  • 在Vim的”Normal模式”下,在某行字句上面敲击”=”可自动为该字句添加标题语法
  • 自动添加wikiwork,当英文单词里面有连续两个英文字母为写’WikiWord’,Vimwiki会自动识别并将其标记为wikiword.该特性仅针对英文.

3.2 Vimwiki的一些缺点

  • 没有下划线的wiki语法
  • 由于是基于文本处理软件所开发的插件,所以无法支持导入图像、音频、视频等格式,同时也无法添加附件,但可以通过添加文件链接、或是网络链接的方式变通

5.0 回顾与总结

5.1 缘起Vim

在08年的时候,我就听过这“神的编辑器”的大名了。当时,也曾下载过一次,但是尝试的结果很不如意,打开了之后竟然无法输入中文!心里面想“见鬼 了!这是什么玩意儿!”。但是,因为内心中希望有朝一日能够用上这个东西装逼,我还是没有把它从硬盘里面删去。之后过了很久,我都没有用过Vim,我用了 其它的软件来作为我日常编辑的工具。后来能够用上Vim,还是拜托自已那不折腾会死星人的臭脾气。

在09年的开始,我开始对如何用电脑来记笔记感兴趣。在看过大量文章之余,也尝试了大量的工具。从小巧的Treepad、CintaNote、 PinPKM到以同步而著名的Evernote,这些尝试都无疾而终,不是它们不好而是我想要的方式并不是这样。于是,开始把目光投向了Wiki这个形 式。

同样是尝试了很多Wiki工具,比如xbeta介绍过的WikidPad、ZIM、单机版的MoinMoin、DokuWiki等等,还是觉得太麻烦了。为什么要有该死的后台?为什么不能直接编辑呢?

怀着这样的想法,我的目光又一次投向了Vim,这次我从滇狐1那里知道了Vim上一个叫Viki的插件,可以当把Vim变成Wiki。我很兴奋,但是尝试了之后不得不放弃了Viki,因为把它装上了之后总是出现莫明其妙的错误,这些错误在Windows的环境下又无法解决。

难道Vim上就只有Viki这个插件才能让Vim成为Wiki吗?我又开始了新一轮的找寻。很幸运,我找到了Vimwiki。在艰难地啃了它的英文说明书 之后。很容易就装上了。而有鉴于当时Vimwiki中文的资料的匮乏,我就写了一篇Vimwiki的中文文档,投稿给善用佳软。之后,我就很欣喜的看到在 善用佳软那强大的影响力之下,越来越多人2喜欢上Vimwiki,有的人还把Vimiwiki的帮助文档整个翻译成中文即3

而我在用Vimiwiki的时候,基本只用Vimwiki,偶尔会用到Calendar来记日记,Wiki的词条写了50个左右,最大的Wiki文档大概有30KB这样。但是并没有很好的坚持下去。于是,Vim用得越来越少了。

5.2 转到Emacs

在听说Vim的同时,我也听说过Emacs,但是Emacs在国内不如Vim流行,中文资料比Vim少,所以我一开始的选择是用Vim。但是在一次浏览网页的时候,看到了Emacs下Org-mode的演示视频4,非常的震憾,我没有想到文本编辑器还可以如此华丽!究竟有多华丽,大家看演示视频就知道。视

于是我在今年的6月份开始折腾Emacs。不过最初的目的是用Org-mode来管理自已的日程。折腾着折腾着,发现Org-mode的标记语言,可以很方便的组织文章的结构,于是开始用Emacs来记笔记5,写文章。

后来,我意外地发现原来Org-mode本身就具有Wiki功能,于是开始尝试用Emacs来构建我自已的Wiki。在这个过程中,我又受到 Zoom.Quite的启发,Wiki应该是每日记,在上面积累自已的想法和疑问,并一一解答,自然而然个人Wiki就可以坚持下来了。

如图所示:

http://farm5.static.flickr.com/4076/4865667606_db89b7a4a4.jpg

5.3 下面是我的一思考的总结:

  • 我为何对Vim、Emacs这类程序员用的工具感兴趣?
    • 程序员的工作其实就是编辑文本
    • 电脑已经成为编辑文本最主要的工具
    • 选择高效的文本工具,自然要考虑程序员用的工具
    • 最重要的是我本来就对Vim感兴趣
    • 专注于内容建设要比排版重要,而Word显然做不到
  • 为何用Vim、Emacs来塔建个人的Wiki?
    • 这是最经济、最绿色的选择。因为它们是免费的,同时安装的时候不需要依赖其他的东西,不会给系统增加进程
    • 不需要考虑版面的问题,可以专心于内容的编写
    • 直接编写内容,不用进入什么后台之类的,很方便
    • 输入即输出,所想即所得,这是最高境界
  • 个人的Wiki该如何编写?
    • 每天都记录,一直坚持
    • 在Wiki上记录自己想解决的问题,在解决问题时用Wiki记录过程
    • 不必预先分类,当你解决不同领域的问题时再分类

注:

1 滇狐的主页:http://edyfox.codecarver.org/html/index.html

2 来自Gracecode的推荐:http://www.gracecode.com/archives/3022/ 闲耘用Vimwiki塔建的Wiki:http://hotoo.github.com/vimwiki/index.html

3 闲耘翻译的Vimwiki文档:http://code.google.com/p/vim-script-cn/source/browse/trunk/doc/vimwiki.cnx

4 Org-mode演示视频:http://jaderholm.com/screencasts/org-mode/

5 这里有我用Org-mode做的笔记(不完全是):http://www.gtdstudy.com/?cat=297

2009-12:初稿,介绍VimWiki;
2010-08:增加回顾与总结部分。>

 

 

##################################################################################

 http://www.gtdstudy.com/?p=1350

个人知识管理:Vimwiki工具

本文版权归属「Geek4us

阅读本文之前,首先你要确保,你会用Vim,懂得配置Vim的配置文件。如果不懂,请上网自行搜索Vim入门教程,已经有很多中文资源,我就不再解释了。

Vimwiki的安装

从以下链接中下载Vimwiki插件:

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

将下载到的vimwiki.vba文件放到vim的安装目录”~\Vim\vim72\plugin”或”~\Vim\vimfiles\plugin”下

用Vim打开vimwiki.vba,然后在”Normal模式”下,输入命令’:so %’,等一会儿,安装将自动完成.

在Vim的配置文件中添加以下命令:

" vimwiki
let g:vimwiki_use_mouse = 1
let g:vimwiki_list = [{'path': '~/vimwiki/',
\ 'path_html': '~/vimwiki/html/',
\ 'html_header': '~/vimwiki/template/header.tpl',}]

这个命令的目的是,修改你存放Vimwiki文件的地方,否则会默认安装存放在系统盘用户文件夹下(如果是在XP下,应该是在「我的文档」下面;如果是Windows7,则在「用户」这个文件夹下)。

例如:

” vimwiki

let g:vimwiki_use_mouse = 1

let g:vimwiki_list = [{'path': 'E:/vimwiki/', (这个是修改存放Vimwiki文件的地方,Vimwiki的文件后缀为.wiki)

\ 'path_html': 'E:/vimwiki/html/', (这个是修改存放Vimwiki下把wiki文件转换为Html网页的地方)

\ 'html_header': 'E:/vimwiki/template/header.tpl',}] (这个是修改存放Vimwiki转换网页时用的网页模板的地方)

Vimwiki的语法

Vimwiki的下载主页上面给出一个快速学习Vimwiki语法的知识卡片(pdf格式,可通过一些软件转换为图片),从上面便可知道所有的Vimwiki中使用的语法,十分简单,方便使用.

PDF地址:http://habamax.ru/myvim/data/vimwikiqrc.pdf

普通语法:

bold — bold

italic — italic

WikiWord — link to WikiWord (这是驼峰词的用法)

complex wiki link — link to complex wiki link

Indent lists with at least 1 space:

* bullet item

# numbered list item

= Header1 =

== Header2 ==

=== Header3 ===

Vimwiki键盘指令

首先,要明白,在Vim里面,输入指令是指在”Normal”状态下,敲击键盘上的按键,就是输入指令

如果有什么不懂,可输入在”Normal”下输入”:h vimwiki-mappings”查询

normal mode:

<Leader>ww — 打开默认的wiki主页

<Leader>wt — 在新的标签页中打开默认的wiki主页

<Leader>ws — Select and open wiki index file.(未知)

<Leader>wd — 删除你所在的wikiword的页面

<Leader>wr — 重命名你所在的wikiword页面

Enter — 在当前页面中新建新的wikiword页面

Shift-Enter — 新建一个wikipage,并在新的分割窗口中显示出来

Ctrl-Enter — 新建一个wikipage,并在新的分割窗口中显示出来(Vertical split and folow/create WikiPage)

Backspace — 返回上一页

Tab — 寻找下一个wikiword

Shift Tab — 寻找上一个wikiword

Vimwiki输入指令

输入’:Vimwiki2HTML — 将当前wiki页转换成Html格式’

输入’:VimwikiAll2HLML — 将所有的wiki页转换成HTML格式’

Vimwiki的特性

  • 与Vim紧密结合,可使用Vim的内建的正则表达式规则,高效处理文本
  • 与Vim紧密结合,可利用Vim内建的多种命令,以及可显示多个分页的特性,同时展示多种窗口,快速查看多份资料.
  • 由于Vim是文本处理工具,所以任何笔记,只要存为文本数据,便可以用Vim来组织和整理
  • 内置了特别的语法高亮模式,在观感上与普通见到的wiki没有多大的分别.
  • 可利用’:VimwikiAll2Html’这个命令快速将文本转化为网页.
  • 在Vim中自动识别网络链接格式,点击便可打开网页.
  • 在Vim的”Normal模式”下,在某行字句上面敲击”=”可自动为该字句添加标题语法
  • 自动添加wikiwork,当英文单词里面有连续两个英文字母为写’WikiWord’,Vimwiki会自动识别并将其标记为wikiword.该特性仅针对英文.

Vimwiki的一些缺点

  • 没有下划线的wiki语法

——————————————————————————

回顾与总结

缘起Vim

在08年的时候,我就听过这“神的编辑器”的大名了。当时,也曾下载过一次,但是尝试的结果很不如意,打开了之后竟然无法输入中文!心里面想“见鬼 了!这是什么玩意儿!”。但是,因为内心中希望有朝一日能够用上这个东西装逼,我还是没有把它从硬盘里面删去。之后过了很久,我都没有用过Vim,我用了 其它的软件来作为我日常编辑的工具。后来能够用上Vim,还是拜托自已那不折腾会死星人的臭脾气。

在09年的开始,我开始对如何用电脑来记笔记感兴趣。在看过大量文章之余,也尝试了大量的工具。从小巧的Treepad、CintaNote、 PinPKM到以同步而著名的Evernote,这些尝试都无疾而终,不是它们不好而是我想要的方式并不是这样。于是,开始把目光投向了Wiki这个形 式。

同样是尝试了很多Wiki工具,比如xbeta介绍过的WikidPad、ZIM、单机版的MoinMoin、DokuWiki等等,还是觉得太麻烦了。为什么要有该死的后台?为什么不能直接编辑呢?

怀着这样的想法,我的目光又一次投向了Vim,这次我从滇狐1那里知道了Vim上一个叫Viki的插件,可以当把Vim变成Wiki。我很兴奋,但是尝试了之后不得不放弃了Viki,因为把它装上了之后总是出现莫明其妙的错误,这些错误在Windows的环境下又无法解决。

难道Vim上就只有Viki这个插件才能让Vim成为Wiki吗?我又开始了新一轮的找寻。很幸运,我找到了Vimwiki。在艰难地啃了它的英文 说明书 之后。很容易就装上了。而有鉴于当时Vimwiki中文的资料的匮乏,我就写了一篇Vimwiki的中文文档,投稿给善用佳软。之后,我就很欣喜的看到在 善用佳软那强大的影响力之下,越来越多人2喜欢上Vimwiki,有的人还把Vimiwiki的帮助文档整个翻译成中文即3

而我在用Vimiwiki的时候,基本只用Vimwiki,偶尔会用到Calendar来记日记,Wiki的词条写了50个左右,最大的Wiki文档大概有30KB这样。但是并没有很好的坚持下去。于是,Vim用得越来越少了。

转到Emacs

在听说Vim的同时,我也听说过Emacs,但是Emacs在国内不如Vim流行,中文资料比Vim少,所以我一开始的选择是用Vim。但是在一次浏览网页的时候,看到了Emacs下Org-mode的演示视频4,非常的震憾,我没有想到文本编辑器还可以如此华丽!究竟有多华丽,大家看演示视频就知道。视

于是我在今年的6月份开始折腾Emacs。不过最初的目的是用Org-mode来管理自已的日程。折腾着折腾着,发现Org-mode的标记语言,可以很方便的组织文章的结构,于是开始用Emacs来记笔记5,写文章。

后来,我意外地发现原来Org-mode本身就具有Wiki功能,于是开始尝试用Emacs来构建我自已的Wiki。在这个过程中,我又受到 Zoom.Quite的启发,Wiki应该是每日记,在上面积累自已的想法和疑问,并一一解答,自然而然个人Wiki就可以坚持下来了。

如图所示:

http://farm5.static.flickr.com/4076/4865667606_db89b7a4a4.jpg

下面是我的一思考的总结:

  • 我为何对Vim、Emacs这类程序员用的工具感兴趣?
    • 程序员的工作其实就是编辑文本
    • 电脑已经成为编辑文本最主要的工具
    • 选择高效的文本工具,自然要考虑程序员用的工具
    • 最重要的是我本来就对Vim感兴趣
    • 专注于内容建设要比排版重要,而Word显然做不到
  • 为何用Vim、Emacs来塔建个人的Wiki?
    • 这是最经济、最绿色的选择。因为它们是免费的,同时安装的时候不需要依赖其他的东西,不会给系统增加进程
    • 不需要考虑版面的问题,可以专心于内容的编写
    • 直接编写内容,不用进入什么后台之类的,很方便
    • 输入即输出,所想即所得,这是最高境界
  • 个人的Wiki该如何编写?
    • 每天都记录,一直坚持
    • 在Wiki上记录自己想解决的问题,在解决问题时用Wiki记录过程
    • 不必预先分类,当你解决不同领域的问题时再分类

注:

1 滇狐的主页:http://edyfox.codecarver.org/html/index.html

2 来自Gracecode的推荐:http://www.gracecode.com/archives/3022/ 闲耘用Vimwiki塔建的Wiki:http://hotoo.github.com/vimwiki/index.html

3 闲耘翻译的Vimwiki文档:http://code.google.com/p/vim-script-cn/source/browse/trunk/doc/vimwiki.cnx

4 Org-mode演示视频:http://jaderholm.com/screencasts/org-mode/

5 这里有我用Org-mode做的笔记(不完全是):http://www.gtdstudy.com/?cat=297

2009-12:初稿,介绍VimWiki;
2010-08:增加回顾与总结部分。

This entry was posted in 个人知识管理工具应用 and tagged ??????????vimvimwki. Bookmark the permalink.

 

..................

 ##################################################################################

http://www.mikewootc.com/wiki/tool/sitebuild/mikewiki.html

用markdown + pandoc + makefile + git(github)搭建免费个人wiki

date: 2013.06.28

目录:

以前用过各种工具, 记笔记写文章, 但都不是特别理想. 所以自己用markdown + pandoc + makefile + git(github)倒腾出一套符合自己需求的工具(其实叫做方法更合适, 因为工具都现成的, 只是组合而已). 先拿出来与大家分享, 并尽量详细解释.

1 前言

以前用过的各种工具, 它们各自的优缺点如下:

工具优点缺点
现成的博客(网易,新浪等) 简单 过于依赖于服务器, 文章的系统性不强, 无版本管理
wordpress 可以自主定制 过于依赖于服务器, 文章的系统性不强, 无版本管理
evernote 简单方便, 非常适合于做笔记. 用户粘性大, 无版本管理.
mediawiki 文章系统性强 过于依赖服务器
vimwiki 使用起来近乎完美 用户粘性大, 语法与工具不通用
github+jekyll 方便的版本管理. 模版是借助第三方的, 所以个人不太喜欢. 且需要服务器提供jekyll服务来渲染. 如果和我的需求类似, 但是用不习惯makefile, 那么这个应该是最好的选择了.

曾经以为vimwiki是一个比较适合我的工具, 因为我一直在用vim, 所以vimwiki用起来比较顺手. 但是后来发现了一个问题, vimwiki用的语法不是通用的标准, 而且他的转化工具是vim内部脚本. 所以如果以后写的文章多了, 再行改其他的工具, 这个转化过程会是非常痛苦的.

所以总结了一下我个人对于笔记/wiki工具的需求:

  • 基于通用的语法协议编写, 具有通用的工具处理, 如textile, markdown, html等. 而且尽量原生(易于移植).
  • 页面的排版要能体现知识的系统性.
  • 可以转化为静态html用于网站发布.
    • 具备自动生成目录功能.
    • 页眉页脚与配色方案等可以独立于每篇文章作成模板.
  • 本地与在线都能使用.
  • 编辑功能:
    • 标题
    • 段落
    • 代码高亮(程序员必需)
    • 具备2种以上加重功能, 包括粗体, 颜色
    • 表格
    • 列表: 有序 and 无序
    • 具备类似pre的原样输出功能
    • 内容与样式最好分离, 写作专注于是什么而不是长啥样. 也便于wiki站点整体风格统一.
    • 所见即所得(非必须)
  • 便于自主定制
  • 保存:
    • 通用的文件格式, 文本文件最好.
    • 具有版本管理: 不会担心什么误操作把辛苦多年的积累给干掉.
    • 版本管理工具最好是分布式的, 不依赖于服务器, 这样费用就低, 离线使用也方便.

基于以上需求, 我自己用markdown + pandoc + makefile + git(github)倒腾出一套符合自己需求的工具(其实叫平台或者方法更合适, 因为工具都现成的, 只是组合而已). 不过这种用很多小工具组合成平台的方法, 也正体现了unix的哲学之一: 个体很渺小, 联合很强大.

我的这套平台具有以下特点:

优点:

  • markdown是通用的语法标准. 而且兼容html的语法.
  • makefile和git是通用的工具.
  • pandoc可以将markdown转化为多种标记语言, 从而不会被markdown限制住.
  • pandoc在转化html时进行了模版扩展, 丰富了页面的外观, 而且这些扩展又很容易被取代, 所以降低了粘性.
  • 在线与离线都能用.
  • 具备一个检查无效链接的工具, 这在重命名文件或者移动页面路径的时候很有用.
  • 跨平台. 对于本地使用来说, 基本上几个主流系统都有gnu的开发环境可以安装. 对于在线版本, 因为make出来的就是静态html, 所以随便找个服务器或者什么主机空间就能发布. github更是提供带git功能的免费发布平台.

缺点:

  • 需要使用命令行. 但是其实也就那么几条命令.
  • padoc对表格的扩展, 并非通用语法. 但是这个我可以忍受. 如果您觉得不爽, 也可以直接用html的表格语法(这在网上拷贝某个表格的时候尤其方便).

2 基本原理

  1. 将用markdown写的文章或者笔记保存为.mkd文件, 并在本地按照知识体系安排好文件夹层次. mtd语法请参照: markdown语法
  2. 用makefile调用pandoc, 并套用pandoc模版, 生成html. 请参考: pandoc模板 以及下文的makefile分析部分.
  3. 用git上传到github进行在线发表. 如果你有兴趣的话github还能绑定自己的域名. 请参考: github发布个人wiki

这样, 本地笔记和在线wiki就都有了.

3 使用方法

  1. 使用前提: 先安装make, pandoc, git. windows下可以使用cygwin模拟.
  2. 下载: 示例包
  3. 将示例包中的makefile与index.mkd放在同级目录, 并置于将要发布的网站的顶级目录(因为其他页面都是从此向子目录搜索编译的).
  4. 键入make, 回车. 生成html.
  5. 假如这些文章已经被git管理, 则可以用git push到github进行发表.

4 相关知识:

  • html/css入门: http://www.w3school.com.cn/
  • makefile入门: http://wiki.ubuntu.org.cn/%E8%B7%9F%E6%88%91%E4%B8%80%E8%B5%B7%E5%86%99Makefile
  • git使用入门: http://www.uml.org.cn/pzgl/201204285.asp

5 makefile解析

通过分析makefile, 便可了解本方法的核心原理. 从而定制出符合您自己需求的工具版本.

请查看上面的示例包中的makefile的源文件, 对照里面的注释即可看懂. 如果看不懂, 就参考上面的makefile入门的链接.

至此全部和wiki本身相关的内容已经介绍完毕. 接下来会介绍一些vim中使用的扩展技巧, 如果对vim没有兴趣, 可以到此结束

6 在Vim中使用

本节包含:

  • vim语法高亮
  • vim保存时自动更新时间
  • vim保存时自动make

首先, 我安装了叫做markdown的vim语法高亮插件: vim-markdown

然后, 将下面的这几段脚本保存为mkd.vim放到vim runtime路径下的ftplugin下, 这样, 会自动匹配扩展名为mkd的文件, 其他文件不受影响.

我尽量加了详细的注释, 大家可以根据需要修改. 修改可以参考: 编写Vim脚本. 以该链接作为参考字典, 只要稍微有点编程知识就能自行修改了.

这几句使其不会因为重复加载该脚本而报错:

if exists("loaded_MikeWiki")
    finish
endif
let loaded_MikeWiki = 1

这是自动跳转到站内链接的:

" ------------------------------------------------------------------------------
" 按回车键自动跳到光标所在的站内wiki链接(光标需要放在链接xxx/xxxx.html上)
func! MikewikiEnterWikiPage()
    let l:lineBuffer = expand("<cWORD>")                                                " 获取光标所在处的链接字符串
    let l:localLink = substitute(l:lineBuffer, '.*\](\(.*\).html).*', '\1.mkd', "g")    " 将链接中的.html改为.mkd.
    let l:hasLink = match(l:lineBuffer, '.\+.html')                                     " 匹配是否存在.html...
    if l:hasLink == 0                                                                   " ...如果存在才跳转
        " 检测目标文件所在文件夹是否存在, 如果不存在则创建
        let l:localLinkDir = substitute(system("dirname ".l:localLink), '\n', '', "g")
        let l:localLinkDirExist = isdirectory(l:localLinkDir)
        if !l:localLinkDirExist
            exec "!mkdir -p ".l:localLinkDir           " 这里的mkdir如果使用的不是linux可以自行修改为别的命令.
                " ^ 此处我故意没加silent, 所以创建时会停在提示栏, 按任意键才继续, 因为个人认为创建目录是一件谨慎的事.
                " 如果觉得麻烦, 可以改为exec "silent !mkdir -p ".l:localLinkDir, 就自动继续了.
        endif

        exec "vi ".l:localLink                         " 打开(跳转到)目标文件xxx/xxxx.mkd
    endif
endfunc
nmap <buffer> <cr> :call MikewikiEnterWikiPage()<CR>   " 映射为回车, 可以自行修改

这是在文件保存时候自动更新时间:

" ------------------------------------------------------------------------------
" 更新日期: 会将.mkd文件中的<!---date-->或者<!---date:yyyy.mm.dd-->替换为当前日期
" 有了这个就很容易实现在make时候向html中更新日期.
func! MikewikiUpdateDatetime()
    exec "norm mz"
    exec '%s/^<!---date\(.*\)-->.*/<!---date:'.strftime("%Y.%m.%d")."-->"."/e"
                                                                " ^ 如果需要时间可以加上 %H:%M:%S
    exec "norm `z"
endfunc
au BufWritePre *.mkd call MikewikiUpdateDatetime()

这是在文件保存时候自动make的:

" make, 判断如果当前目录下存在makefile(注意大小写)则执行外部命令make.
func! MikewikiMake()
    if filereadable("makefile")
        exec "silent !make"
    endif
endfunc

" 设置为在*.mkd后缀的文件, 当保存时候起效果:
au BufWritePost *.mkd call MikewikiMake()

7 Firefox中自动刷新

如果用vim编辑的话, 虽然按照上述方法可以自动make, 但是还有一个问题就是无法所见及所得, 我会在写作的过程中不断的切换到firefox来手动刷新看效果. 感觉很麻烦.

后来发现了一个firefox自动刷新的插件: reload every. 可以自动刷新页面.

使用方法就是安装之后, 在页面右键->reload every, 然后选启用, 就可以不断刷新了, 也可以自定义刷新间隔(建议>=3s). 现在我在vim中一保存, firefox那边基本就能看到效果. 这样类似半所见即所得, 写作时感觉响当相当的行云流水.

注: 这个插件好像有点问题, 我设置成2秒的时间间隔, 就刷不出效果来了. 所以我最小就设为3秒. 而且有时css修改后也刷不出效果, 手动刷一下就好了.

 

http://wangheng.org/share-personal-wiki-deployment-script.html

上一篇介绍了如何使用vimwiki组建个人wiki,但是如何同步自己的vimwiki 到线上却成了很多人的困扰。丘迟的维基世界介绍了同步 vimwiki 到线上的各种方法,如果你的桌面是使用linux的话,当然问题不大,很轻松就能写出一个同步的脚本。但是还是有很多人平时工作在windows的系统环境中,这里我自己写了一个vim的小插件用来一键同步vimwiki到线上。

首先分析一下这个同步需求:

  1. 需要自动同步 vimwiki_html 的所有文件
  2. 有变更的文件才同步上去
  3. 被删掉的文件也要能同步删掉
  4. 由于文件修改频繁,不需要一旦修改就马上同步
  5. 有需要时可以手动同步
  6. 最好能排除一些不用放在线上的文件
  7. 不能占用太多系统资源

这里我将vimwiki生成的html托管在了自己的github上面,此vim脚本的运行需要依赖你gvim对应版本的python,或者自己在windows下编译一个gvim。(好吧,这个实在够蛋疼。。。)

安装并配置你的github

首先关闭360安全卫士等流氓软件!切记!

从github下载github for window,链接如下:

http://github-windows.s3.amazonaws.com/GitHubSetup.exe

安装完成后,用你的账号登录,然后在tools/options中设置默认的shell为cmd,如下图:

image

完成后双击桌面上的git shell图标,打开git shell 后执行如下命令

echo %path% >>c:\path.txt

打开c:\path.txt 将里面的内容全部复制,粘贴到系统的path变量中(覆盖原来的path)。完成此步骤后,cmd中会使用github生成的配置进行ssh的key-agent验证登录,故实现了git命令免密码的效果。完成后,运行cmd,输入git,能识别这个命令表示成功。然后就可以使用我写的这个脚本了(汗,脚本依赖有点高~~)

脚本的代码如下:

 

"=========================================================
"     FileName: vimwiki_sync.vim
"         Desc: 
"       Author: WangHeng
"        Email: me@wangheng.org
"     HomePage: http://wangheng.org
"      Version: 1.1
"   LastChange: 2012-07-19 22:32:39
"      History: 1、2012-07-20 暂时注释VimwikiGet('path_html')
"				不好用原因待研究
"=========================================================

" let s:wiki_html_path=VimwikiGet('path_html')这条命令有时候不好用,故暂时注释掉
if !has('python')
    echo "Git Auto Upload Error:\nRequired vim compiled with +python"
    finish
endif

function! s:Vimwiki_Upload()

python < :VimwikiUpload

或者直接点击这里下载。

使用方法是在vim的普通模式下按F11,另外你还可以将中间的那段python代码提出来作为一个单独的python脚本,这样你就可以将它加到计划任务定时执行了,有需求的朋友可以试试~~任何问题欢迎留言交流~

 

######################################################################################

 http://www.darlingtree.com/wordpress/archives/730


..似曾相识..

也谈个人知识管理

one comment

人大脑的记忆能力是有限的。
我平时鼓捣电脑经常会遇到很多问题,解决后就忘记了,但如果下次再遇到,就又要求助于google从而浪费很多时间。网上很多知识技巧不值得去花时间记忆,建立一个知识库来保存这些技巧知识是最好的方法。TL上面大家关于如何建立自己的个人知识管理系统给出了许多方案。没有什么是最好的,只有最适合自己的。我曾经尝试过利用书签,自建wiki站点,Evernote,Dropbox等来建立知识库。但是始终觉得不够方便便捷。经过多次尝试,我最终选择了Zim wiki结合github和Dropbox来建立我的个人知识管理系统。

Zim wiki(http://zim-wiki.org/)是一个跨平台的个人wiki软件,其linux版本非常好用,没有Evernote那些花哨不实的功能,呼出速度也很快,适合从网页或者终端中保存文字。用来作为简单的个人知识管理最合适不过。
但是Zim wiki缺少同步功能,所以我通过设置github来为其添加了这个功能。因为zimwiki中每个条目都是一个txt纯文档,所以只需要在平时使用的Notebook对应的目录下面设置git,就可以把内容同步到github上面。之后只需要再把git pull和git push这几个命令写成一个bash脚本,就可以实现自动同步了。

#syncwiki.sh
cd ~/knowledge
git pull origin master
git add *
git commit -m "new"
git push origin master

为了更加方便,我又修改了下/usr/bin下面的zim程序,在

except KeyboardInterrupt: # e.g. C while --server
	print >>sys.stderr, 'Interrupt'
	sys.exit(1)

中sys.exit(1)前面添加了

	os.popen("sh ~/syncwiki.sh")

并将新程序保存为zimm,这样通过zimm打开的zimwiki在每次关闭wiki前就会自动与github同步了。你也可以通过添加crontab来设定定时同步。
使用github可以实现不同linux主机间wiki系统的同步,而linux与windows系统之间的同步我选择了dropbox。
Dropbox同步方法非常简单,将linux下面notebook对应的文件夹用ln命令做个链接,链接到Dropbox下面,之后在windows系统下面,设置zimwiki打开Dropbox的文件夹就可以。这种同步方法的缺点是每次修改后再次从另外一个系统打开zimwiki的时候会卡上几秒钟,而且如果两个系统同时修改wiki则会造成冲突,从而导致同步失败。
虽然存在不足,但是其实一般工作的时候很少会linux和win系统同时去添加wiki。还是那句话,够用就好。

除了使用github,你也可以使用其他的在线版本控制系统来实现wiki的同步。比如新浪的SAE。如果需要将自己的个人知识管理系统共享给别人,可以直接使用zimwiki提供的httpserver,直接共享成为网页。如果需要长期共享,可以去搜索zim wiki deploy(作者的blog:blog github地址:GitHub),这个人提供了将zimwiki转换为dokuwiki的脚本。

除此之外,你也可以尝试使用ssh -X来远程启动zimwiki实现同步:)

 

=================================================================================== 

http://www.cnblogs.com/narcotics/archive/2013/03/24/2978008.html

如何利用GitHub建立个人博客:之一

 

本文转自我在GitHub上的新开博客: <a href="narks.tk">narks.tk</a>,欢迎前往原帖阅读并且给出建议与批评

本文是[BlogAtGitHub](narks.tk/categories.html#blogAtGitHub)系列第一篇,试图尽我所知告诉你有关在GitHub上托管自己的博客网站的所有内容。如果有任何疑问或是建议,请[告诉我](mailto:naroctics726@gmail.com),本博客的所有内容也是依附在文章所描述的一切技术之上,[这里](https://github.com/narcotics726/narcotics726.github.com)有所有的源码可以供你参考。感谢各位的阅读。

如有需要欢迎转载,但如果能够保留出处我将感激不尽,多谢大家的配合。

水平有限,以下所有内容如果不做特别说明,都是在该死的Windows环境下进行,还请包涵。


另外,在阅读之前,请先确认:

1. 我知道Git是干嘛用的,或者我可以 [现在开始学习Git(Git Pro 中文版)](http://git-scm.com/book/zh)

2. 我有基本的计算机知识,改个 [环境变量](http://en.wikipedia.org/wiki/Environment_variable) 什么的没问题。

3. 我愿意折腾


----------------------------------

## 概览


+ [为什么在GitHub上托管个人博客](#001)

+ [10分钟快速搭建一个博客原型](#002)

+ [GitPages的页面生成原理,如何在本地调试你的博客 todo](#)

+ Before Diving into it:你所需要了解的更多知识

+ 实现更复杂的结构:标签,目录



---------------------------------------
<p id="001"></p>
## 一、为什么在GitHub上托管个人博客

 

为什么在GitHub上托管博客,这个问题可以分两步来问:

首先,为什么 **可以** 在GitHub上托管博客?

> [GitHub]()是一个基于git的版本托管服务网站,上面聚集着几乎全世界的程序大牛,还有着大量的牛逼开源项目。而项目一旦成长壮大,一个简单的名称和一段描述很可能就无法满足作者与读者的需要。此时,[GitHub Pages](pages.github.com) 就应运而生,它允许用户用更具描述性的自定义页面代替源码列表。同时,用户也可以利用其作为个人或组织主页,将 **静态** 网页托管其上。

那么,在有着WordPress等等大量的开源博客系统的情况下,为什么选择在GitHub上托管博客呢?

1. 对程序猿来说无比亲切,光是看起来感觉就很牛逼的"Git驱动式博客开发与发布流程"。

2. 超级容易,5分钟包学包会的发布方式。

3. 静态页面,建立简单,几乎没有安全性隐患,当然这也是缺点之一,静态页面无法做到太过复杂的交互设计和网站结构。不过作为一个简单的个人博客,也不太会有这样的需求

4. 免费而可靠

更加详细的内容可以参见这里 [todo: Jekyll + GitHub Pages 的优点与缺点](#)

话不多说,现在就来试试看。


---------------------------------------------
<p id="002"></p>
## 二、10分钟快速搭建一个博客原型

首先确认:

+ 拥有一个GitHub账号

+ 已经安装 [Git](http://git-scm.com/downloads) ,(在Windows下,个人推荐直接安装 [GitExtensions](https://code.google.com/p/gitextensions/) ,有中文界面,并且集成了git + putty + kDiff ,比较省心一点啦)

### 1.建立一个项目


先在GitHub创建一个项目,名字随意,尽量全部小写字母,避免随后会碰到的URL冲突问题


本地运行Git,随意选个目录,将刚才创建的项目clone下来

<!-- lang: bash -->
cd /d/
git clone https://github.com/narcotics726/blogdemo.git
cd blogdemo

<br/>
<br/>

### 2.建立配置文件\_config.yml


**注意:之后建立的所有文档务必使用UTF-8 无 BOM 的编码保存**

在项目的根目录下新建文件 `_config.yml` ,填写 `baseurl: /blogdemo` , blogdemo是你的项目名称,这一行内容规定了整个网站的根路径,稍后会详细解释这样做的意义。
<br/>
<br/>

### 3.建立主页

在根目录下新建文件 `index.html` , 内容像这样:


<!-- lang: html -->

---
title: Hello, My Blog
---

{{ page.title }}


先不用急着奇怪为什么一个html文件会出现"{}"这样的标签,这里使用的是 [Liquid 模板语言](https://github.com/shopify/liquid/wiki/liquid-for-designers) ,{{ page.title }} 表示“本页面的标题”,更详细的介绍我们以后再讲,不妨这样理解:

<!-- lang: python -->

#--- begin of page's head
title = "Hello, My Blog"
#--- end of page's head

print(page.title)


OK,那么博客主页设计完毕!(别吵...我答应过你要10分钟内搭建完成的...先弄个毛胚房意思意思,美化啊功能啊什么的晚点再说)
<br/>
<br/>

### 4.发布到GitHub

回到git bash, 检查一下 git status ,确认 `_config.yml` 与 `index.html` 无误后 add,commit,保持使用Git的良好习惯,记得添加提交描述

然后推送到GitHub,这里注意,因为我们使用的是GitHub Pages中的 `Project Pages`, GitHub仅会将分支 `gh-pages` 下的内容进行自动生成操作, 所以本地的 master 分支应推送到远端的 gh-pages 分支

<!-- lang: bash -->

git push origin master:gh-pages


稍微等待一下,最多10分钟(通常不用那么久啦),访问 yourname.github.com/blogdemo ,(其中 yourname 是你的GitHub帐户名,blogdemo则是你的项目名)就会看见你的博客主页(确实很丑...而且完全不像一个博客的样子,不过别急,慢慢来比较快~)

>另外,如果不幸发现你的中文页面出现了乱码的情况,别着急,还是该死的UTF-8问题,后面我们会一劳永逸的解决他的,暂时先手动调整一下浏览器的编码。

<br/>
<br/>

### 5.在\_posts内撰写文章,并在首页加入文章列表

在这段时间里,我们继续为你的博客添砖加瓦,让他拥有最基本的文章阅读功能,另外不断F5页面的同时也可以关注一下自己在GitHub注册时所用的邮箱,如果之前推送的内容有误的话,GitHub将以邮件形式提醒你生成失败。

回到项目根目录, `mkdir _posts` 新建一个目录,看名字也知道啦,这里存放你所有的文章。

进入`_posts`目录,新建一篇文章。注意默认的文件名格式是 `year-month-day-postTitle` 这样。比如 `2013-03-23-my_first_article.md`,尽量避免空格或者其他乱七八糟的字符,这个文件名将作为URL的生成依据。文件名的格式可以通过修改 `_config.yml` 中的 permalink 属性而改变,默认值为 `date` ,也就是我们刚刚创建的文件的样子,具体的规则可以看[这里](https://github.com/mojombo/jekyll/wiki/Permalinks),后面我们也会讲到。

如果你发现了我刚才创建的文件后缀名是 `.md` ,熟悉GitHub或者StackOverFlow的朋友应该知道[Markdown 格式](http://daringfireball.net/projects/markdown/),推荐使用GitHub托管博客的原因之一也正是[如此](http://www.yangzhiping.com/tech/writing-space.html),我们可以在大部分时候避开恼人的HTML,转而使用更加直观的Markdown语法。如果不熟悉也没关系,可以参见这份[Markdown 语法说明](http://wowubuntu.com/markdown/),应该说是相当易学,并且在熟悉之后非常易用的。

回到主题,打开刚才创建的文件,输入如下内容:


<!-- lang: html -->

---
title: 我的第一篇文章
---

# {{ page.title }}

## 目录
+ [第一部分](#partI)
+ [第二部分](#partII)
+ [第三部分](#partIII)

----------------------------------

## 第一部分 <p id="partI"></p>
这里是第一部分的内容

----------------------------------

## 第二部分 <p id="partII"></p>
这里是第二部分的内容

----------------------------------

## 第三部分 <p id="partIII"></p>
这里是第三部分的内容

{{ page.date|date_to_string }}

这段内容中使用了最常用的几种Markdown语法,比如使用 \# ,\#\# 表示 HTML 中的 `<h1></h1>` , `<h2></h2>`。使用`[text](link)`创建超链接,使用 连续多个 `-` 创建水平线(注意:不包括最上端包围title所使用的横线,那里表示一个页面的“头属性”),等等。更多详细的语法可以在之前提到的页面查询,这里不再赘述,总之,这是一种更加贴近真实写作的语法,推荐大家尝试。

啊对了,最后面的那个 `{{ page.date|date_to_string }}` 是指显示本页的日期属性,并且转换为可读的字符串形式。同样也是Liquid语法。

OK,那么第一篇文章也写好了,再把最新的repo推送到github,稍等片刻,就可以...等下,忘记给文章加上入口的链接了。

Sorry啦,重新打开我们的 index.html 文件,添加内容,变成下面这样:


<!-- lang: html -->

---
title: My Blog
---

{{ page.title }}

{% for post in site.posts %}

{{ post.date|date_to_string }} <a href='{{ site.baseurl }}{{ post.url }}'>{{ post.title }}</a>

{% endfor %}

唔...都是Liquid的内容,简单解释一下,Liquid标记最主要分为两种,一种是直接输出变量内容,像这样:

`{{ page.title }}`

另一种则是逻辑命令形式的,像这样:

`{% for x in y %} ... {% endfor %}`

而刚才写进主页的内容,就是遍历所有post文件,然后逐一显示在页面上,这里需要注意的一点就是在创建文章的超链接时,除了 `post.url` 之外,也要注意在前面加上`site.url` ,原因前面也有提到过,我们正在创建的是 Project Pages 类型的网站,其最终生成的网址根目录是:username.github.com/projectname,而 post.url 生成的超链接仅仅会自动加上 username.github.com/ 这样的前缀。

现在检查一下更改的所有内容,确认不要犯下愚蠢的错误,比如把 "." 打成 "。"或者单词拼错之类的,提交并推送!

当当!如果一切顺利,就能看到你的首页外加文章列表闪亮登场。

<br/>
<br/>

### 6.增加模板套装\_layouts

文章进行到这里,或许开头承诺的10分钟已经超过不少了...很抱歉我欺骗了你,不过至少我们进展很快~接下来——如果你仍有兴趣的话,让我们为网站增加一些统一性的风格设置。

回到项目根目录,新建文件夹 `_layouts`,顾名思义,“布局”是也。在 `_layouts` 中新建一个最基本的布局文件,姑且命名为default.html好了:


<!-- lang: html -->

<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>{{ page.title }}</title>
</head>
<body>

{{ content }}

</body>
</html>

诺,首先解决了UTF-8的编码问题,随后指定了正文内容的位置,当然在这里只是一个最简单的内容,在body内仅有一个 {{ content }} 标签,你可以根据自己的喜好对页面进行任何改动,只要记得保留这个内容标签在你想要的位置就好。

然后我们修改index.html和刚写完的那篇文章,只要在头属性上加一句就好:


<!-- lang: html -->

---
title: xxoo
layout: default.html
---

我们当然还可以把这个结构变得更灵活一些,比如继续新增两个模板分别叫做l_post.html与l_index.html,他们首先引用default.html,但在其基础上做出一定的修改。然后首页使用l_index模板,而所有的post文件则使用l_post模板,等等等等,请随意发挥。**但始终记得加上 `{{ content }}` 标签**

再次推送到服务端,查看效果。

至少这一点我没骗你,要发布最新的更改实在是太简单了,只需要一次push而已。

那么,基本的项目结构如下:

.
|-- _config.yml
|-- _includes
|-- _layouts
| |-- default.html
| `-- post.html
|-- _posts
| |-- 2007-10-29-why-every-programmer-should-play-nethack.textile
| `-- 2009-04-26-barcamp-boston-4-roundup.textile
|-- _site
`-- index.html

这幅图来自于:[Yes We Jekyll](http://yeswejekyll.com/),原谅我的懒惰,我实在不擅长排版...

到此为止,基本的步骤和项目结构已经全部讲完了(好吧,你一定发现了上图中的`_includes` 和 `_site`我还没有提到过,请继续看[系列的下一篇:todo](#)吧~),我还将在下篇中告诉你为什么本地的 特定结构目录 + 其他一些乱七八糟的东西 上传到GitHub之后就会变成一个网站,这一切都是背后[Jekyll](https://github.com/mojombo/jekyll)的功劳。另外还将讲述的是,如何在本地,尤其是如何在Windows平台上搭建起Jekyll环境,当然这不是必须的一步,但这样做避免了我们每一次调试都不得不先上传到服务器,即费时,也容易把自己的未完成作品展示出去(很丢人的啦~)。

那么本篇就先行结束,多谢大家的耐心观看,如果有任何的意见或疑问,请直接在下方留言,或是通过页面右上角的图标与我联系。各位再见~

 

 
 
 
标签: Blog博客GitHub

 

 

 ----------------------------------------------------------------------------------------------------------------------------------------

http://wiki.7color.org/git_wiki.html

Github 搭建个人Wiki

需求分析

  1. 需要自动同步 7color.github.com 的所有文件
  2. 有变更的文件才同步上去
  3. 被删掉的文件也要能同步删掉
  4. 由于文件修改频繁,不需要一旦修改就马上同步
  5. 有需要时可以手动同步
  6. 最好能排除一些不用放在线上的文件
  7. 不能占用太多系统资源

看了上面的需求分析,相信大家想到的都是各种版本管理工具。那就来试试时下最火的 git 吧!

使用 Git + Batch file(Win)

 

  1. 首先新建一个仓库,我这里使用的项目名是 7color.github.com。获得SSH地址 git@github.com:7color/7color.github.com.git。
  2. 接着把 7color.github.com 文件夹初始化为 git 项目,push 到 github 上去。git命令参考:Git安装与配置
  3. 接下来就要想办法做到自动提交。首先绕不开的问题就是用户验证。相信会用 Git 的人都已经按照Github上的指导建立了 ssh key 。但不知道你试过 ssh-agent 这个东西没有?简单来说,它可以让你不用每次提交修改到 git 服务器时都输入密码。请参照这篇教程进行设置:http://help.github.com/working-with-key-passphrases/ 。
    然后写一段批处理脚本,自动完成 commit, push 等操作。但经过本人亲身尝试,虽然 msysgit 可以让 Window 命令行里有 git 命令可以用,却不能在里面享用 ssh-agent 的登录状态,要做到免密码输入, 只能进入到 git bash ,然后用 vbs 模拟键盘输入 。这段 vbs 我是暂时没有能力写出来了。而且就算能写,还牵涉到判断提交是否已经成功的问题,就算我们爱折腾,也要量力而行哈。
    所以,一劳永逸的方法还是生成ssh key时不要设置 passphrase 。鉴于这个 key 并不那么容易被泄露,不要 passphrase 还是可以接受的。忘了怎么generate SSH key了?看这里: http://help.github.com/msysgit-key-setup/

批处理文件内容(增加了commit手动添加)

@echo off
title Sync Blogger

:PULL
echo Blogger sync(pull) starting...
echo .
git pull 7color master

echo .
echo ==============================================================================
git status

echo .
echo ==============================================================================
:LABEL_CONFIRM
set /p doPush=Pull from server completed, continue to push(y/n)?
if "%doPush%"=="y" goto LABEL_PUSH
if "%doPush%"=="n" goto exit
goto LABEL_CONFIRM


:LABEL_PUSH
echo .
set /p commit=Enter commit:
if "%commit%"==""(goto LABEL_AUTOMATIC) else (goto LABEL_MANUAL)
: LABEL_AUTOMATIC
:: get date and time
:: for /f "delims=" %%a in ('date/t') do @set mydate=%%a
:: for /f "delims=" %%a in ('time/t') do @set mytime=%%a
set mydate=%DATE:~0,10%
set mytime=%TIME:~0,8%
set fvar=%mydate% %mytime%
set commit="Automatic commit at %fvar%"

: LABEL_MANUAL
set commit=%commit%

git add .
git commit -a -m %commit%

:: check if ssh-agent is running
:: tasklist|find /i "ssh-agent.exe" || cmd /c ""C:\Program Files\Git\bin\sh.exe" --login -i" && exit
call git push 7color master

echo .
echo .---------------------------------------------------------------------------.
echo ' '
echo ' Sync complete! '
echo ' '
echo `---------------------------------------------------------------------------+

:LABEL_DONE
pause
exit

另存为 sync.bat ,放到 7color.githu.com 目录下。然后将其添加到 Windows 的任务计划程序里,就可以做到定时推送。或者你不喜欢定时推送,每次有需要时再运行这个脚本也可以。

  1. 绑定快捷键
      map <C-F2> :exec 'silent !start cmd /k "cd /d "'.VimwikiGet('path_html').'" & sync"'<cr>
      map <S-F2> :VimwikiAll2HTML<cr>
      map <F2> :Vimwiki2HTML<cr>
    
  2. 至此文件自动push完成

在github上显示网页

本文仅介绍Github Pages的方式,其它方式请参考: 丘迟的维基世界

关于Github Pages,请参考: Github Pages帮助文档设置CNAME,404等

: github 页面生成后,会给用户发送提醒邮件。每次同步成功都有这个邮件,多烦人啊,到 https://github.com/account/notifications 去改一下设置吧

 ===========================================

http://www.ruanyifeng.com/blog/2012/08/blogging_with_jekyll.html

作者: 阮一峰

日期: 2012年8月25日

喜欢写Blog的人,会经历三个阶段。

  第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写。

  第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客。

  第三阶段,觉得独立博客的管理太麻烦,最好在保留控制权的前提下,让别人来管,自己只负责写文章。

大多数Blog作者,都停留在第一和第二阶段,因为第三阶段不太容易到达:你很难找到俯首听命、愿意为你管理服务器的人。

但是两年前,情况出现变化,一些程序员开始在github网站上搭建blog。他们既拥有绝对管理权,又享受github带来的便利----不管何时何地,只要向主机提交commit,就能发布新文章。更妙的是,这一切还是免费的,github提供无限流量,世界各地都有理想的访问速度。

今天,我就来示范如何在github上搭建Blog,你可以从中掌握github的Pages功能,以及Jekyll软件的基本用法。更重要的是,你会体会到一种建立网站的全新思路。

一、Github Pages 是什么?

如果你对编程有所了解,就一定听说过github。它号称程序员的Facebook,有着极高的人气,许多重要的项目都托管在上面。

简单说,它是一个具有版本管理功能的代码仓库,每个项目都有一个主页,列出项目的源文件。

但是对于一个新手来说,看到一大堆源码,只会让人头晕脑涨,不知何处入手。他希望看到的是,一个简明易懂的网页,说明每一步应该怎么做。因此,github就设计了Pages功能,允许用户自定义项目首页,用来替代默认的源码列表。所以,github Pages可以被认为是用户编写的、托管在github上的静态网页。

github提供模板,允许站内生成网页,但也允许用户自己编写网页,然后上传。有意思的是,这种上传并不是单纯的上传,而是会经过Jekyll程序的再处理。

二、Jekyll是什么?

Jekyll(发音/'dʒiːk əl/,"杰克尔")是一个静态站点生成器,它会根据网页源码生成静态文件。它提供了模板、变量、插件等功能,所以实际上可以用来编写整个网站。

整个思路到这里就很明显了。你先在本地编写符合Jekyll规范的网站源码,然后上传到github,由github生成并托管整个网站。

这种做法的好处是:

  * 免费,无限流量。

  * 享受git的版本管理功能,不用担心文章遗失。

  * 你只要用自己喜欢的编辑器写文章就可以了,其他事情一概不用操心,都由github处理。

它的缺点是:

  * 有一定技术门槛,你必须要懂一点git和网页开发。

  * 它生成的是静态网页,添加动态功能必须使用外部服务,比如评论功能就只能用disqus

  * 它不适合大型网站,因为没有用到数据库,每运行一次都必须遍历全部的文本文件,网站越大,生成时间越长。

但是,综合来看,它不失为搭建中小型Blog或项目主页的最佳选项之一。

三、一个实例

下面,我举一个实例,演示如何在github上搭建blog,你可以跟着一步步做。为了便于理解,这个blog只有最基本的功能。

在搭建之前,你必须已经安装了git,并且有github账户。

第一步,创建项目。

在你的电脑上,建立一个目录,作为项目的主目录。我们假定,它的名称为jekyll_demo。

  $ mkdir jekyll_demo

对该目录进行git初始化。

  $ cd jekyll_demo

  $ git init

然后,创建一个没有父节点的分支gh-pages。因为github规定,只有该分支中的页面,才会生成网页文件。

  $ git checkout --orphan gh-pages

以下所有动作,都在该分支下完成。

第二步,创建设置文件。

在项目根目录下,建立一个名为_config.yml的文本文件。它是jekyll的设置文件,我们在里面填入如下内容,其他设置都可以用默认选项,具体解释参见官方网页

  baseurl: /jekyll_demo

目录结构变成:

  /jekyll_demo
    |-- _config.yml

第三步,创建模板文件。

在项目根目录下,创建一个_layouts目录,用于存放模板文件。

  $ mkdir _layouts

进入该目录,创建一个default.html文件,作为Blog的默认模板。并在该文件中填入以下内容。

  <!DOCTYPE html>

  <html>

  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8" />

    <title>{{ page.title }}</title>

  </head>

  <body>

    {{ content }}

  </body>

  </html>

Jekyll使用Liquid模板语言,{{ page.title }}表示文章标题,{{ content }}表示文章内容,更多模板变量请参考官方文档

目录结构变成:

  /jekyll_demo
    |-- _config.yml
    |-- _layouts
    |   |-- default.html

第四步,创建文章。

回到项目根目录,创建一个_posts目录,用于存放blog文章。

  $ mkdir _posts

进入该目录,创建第一篇文章。文章就是普通的文本文件,文件名假定为2012-08-25-hello-world.html。(注意,文件名必须为"年-月-日-文章标题.后缀名"的格式。如果网页代码采用html格式,后缀名为html;如果采用markdown格式,后缀名为md。)

在该文件中,填入以下内容:(注意,行首不能有空格)

  ---
  layout: default
  title: 你好,世界
  ---

  <h2>{{ page.title }}</h2>

  <p>我的第一篇文章</p>

  <p>{{ page.date | date_to_string }}</p>

每篇文章的头部,必须有一个yaml文件头,用来设置一些元数据。它用三根短划线"---",标记开始和结束,里面每一行设置一种元数据。"layout:default",表示该文章的模板使用_layouts目录下的default.html文件;"title: 你好,世界",表示该文章的标题是"你好,世界",如果不设置这个值,默认使用嵌入文件名的标题,即"hello world"。

在yaml文件头后面,就是文章的正式内容,里面可以使用模板变量。{{ page.title }}就是文件头中设置的"你好,世界",{{ page.date }}则是嵌入文件名的日期(也可以在文件头重新定义date变量),"| date_to_string"表示将page.date变量转化成人类可读的格式。

目录结构变成:

  /jekyll_demo
    |-- _config.yml
    |-- _layouts
    |   |-- default.html 
    |-- _posts
    |   |-- 2012-08-25-hello-world.html

第五步,创建首页。

有了文章以后,还需要有一个首页。

回到根目录,创建一个index.html文件,填入以下内容。

  ---
  layout: default
  title: 我的Blog
  ---

  <h2>{{ page.title }}</h2>

  <p>最新文章</p>

  <ul>

    {% for post in site.posts %}

      <li>{{ post.date | date_to_string }} <a href="{{ site.baseurl }}{{ post.url }}">{{ post.title }}</a></li>

    {% endfor %}

  </ul>

它的Yaml文件头表示,首页使用default模板,标题为"我的Blog"。然后,首页使用了{% for post in site.posts %},表示对所有帖子进行一个遍历。这里要注意的是,Liquid模板语言规定,输出内容使用两层大括号,单纯的命令使用一层大括号。至于{{site.baseurl}}就是_config.yml中设置的baseurl变量。

目录结构变成:

  /jekyll_demo
    |-- _config.yml
    |-- _layouts
    |   |-- default.html 
    |-- _posts
    |   |-- 2012-08-25-hello-world.html
    |-- index.html

第六步,发布内容。

现在,这个简单的Blog就可以发布了。先把所有内容加入本地git库。

  $ git add .

  $ git commit -m "first post"

然后,前往github的网站,在网站上创建一个名为jekyll_demo的库。接着,再将本地内容推送到github上你刚创建的库。注意,下面命令中的username,要替换成你的username。

  $ git remote add origin https://github.com/username/jekyll_demo.git

  $ git push origin gh-pages

上传成功之后,等10分钟左右,访问http://username.github.com/jekyll_demo/就可以看到Blog已经生成了(将username换成你的用户名)。

首页:

文章页面:

第七步,绑定域名。

如果你不想用http://username.github.com/jekyll_demo/这个域名,可以换成自己的域名。

具体方法是在repo的根目录下面,新建一个名为CNAME的文本文件,里面写入你要绑定的域名,比如example.com或者xxx.example.com。

如果绑定的是顶级域名,则DNS要新建一条A记录,指向204.232.175.78。如果绑定的是二级域名,则DNS要新建一条CNAME记录,指向username.github.com(请将username换成你的用户名)。此外,别忘了将_config.yml文件中的baseurl改成根目录"/"。

至此,最简单的Blog就算搭建完成了。进一步的完善,请参考Jekyll创始人的示例库,以及其他用Jekyll搭建的blog

(完)

=============================================

http://www.zhihu.com/question/19931404

Github不是突然火起来的,在Ruby社区Github其实从一开始就很流行,我们2009年搞Ruby大会就邀请了Github的人来上海了,早在2009年Github在国内的Ruby社区就很有名气了。之所以今天大家突然觉得Github火,只不过是因为刚拿到1亿美元融资的眼球效应罢了。

Github是一个从Ruby社区诞生出来的项目,这几年我也算是看着Github发展起来的,可以说Git在Ruby社区普及和爆发几乎是必然的事情。Git虽然是Linux内核社区开发出来的,但前几年一直不温不火。真正在开源社区普及和爆发,是从Ruby社区和Github开始的。

Rails是一个高度集成的Web框架,通常情况下一到两个Rails程序员做一个Web项目就够了,一旦多人同时在一个Rails项目上工作,代码提交和协作会遇到很大的麻烦,更不要说开源项目大规模远程协作了。这算是Rails项目的一个痛点:单个工程师开发效率很高,但是团队协作很困难,CVS/SVN这种集中提交式的SCM都不能很好的支持Rails团队的工作模式。事实上我的Ruby团队规模一大也遇到了这个难题,代码提交经常冲突,协作困难。

Git这种良好支持分支管理的分布式的SCM真正解决了这个问题:每个工程师在自己本地分支上开发,完成功能以后往master分支合并。我们Ruby团队使用Git以后,代码提交冲突问题迎刃而解。所以Git这种SCM像是给Ruby社区量身打造的一样,所以你可以看到Ruby社区几乎没有不用Git的。

Github本身也是这种需求下的产物,一些湾区的Ruby社区的程序员使用Git以后,找不到好的Git托管网站,于是就开发了Github出来。然后Rails框架率先迁移到Github上,形成了示范效应,整个Ruby社区呼啦啦都迁上去了。Ruby社区另有一好处:各种开源库和包都统一用Gem格式发布,而一旦大量Gem都迁移到Github上了,Ruby程序员就跟着都开始用Github了。我当年就是为了跟一些gem的库就开始用Gihub的。

这里多说两句:Ruby社区是一个相当团结的社区,很少分裂,经常是一旦采用一个技术,整个社区就会迅速跟进和普及。虽然在国内Ruby是个小众的编程语言,但是在硅谷,Ruby很火,被誉为云计算时代的Web编程语言。Ruby整个社区都迁移到Github,开始对其他编程语言社区形成示范效应,其他编程语言社区接着跟进。

Ruby程序员因为做Web开发,经常用JavaScript,很多Ruby社区核心人员本身也是JS社区的核心人员,JS社区也就很快进驻Github。同时Ruby社区因为DHH的示范效应,基本上整个社区都是人手一台Mac,天然对OSX比较近,而随着iOS开发的繁荣,大量的Ruby程序员跟进开发iOS app,带动iOS社区也从Github上成长起来了。看看今天的Github,Ruby,JS和iOS的项目比例是非常高的,Java比例则远不如Sourceforge和Google Code,这有一定的社区渊源。

Github也很重视社区活动,经常搞Drinkup,此外Github产品上有很多领先的地方,例如从网站产品上定位为social coding,支持大规模开源项目分布式协作的各种工作模式等等。

不过Github现在估值这么高,我认为主要还是云计算SAAS平台的概念带来的,它给企业用户提供Private代码仓库托管收费服务是盈利的。云平台现在估值都很高,Dropbox,Evernote都远比Github估值高,所以Github现在的估值高也不算意外。

一个是 git 本身在开源社区里面的流行,这是主要是因为 Linus 的影响非常大。 
然后就是因为 Github 本身。创始人都是在 Ruby 社区里面非常活跃的人。所以大家可以看到在 Github 上 Ruby 的成分非常多。他们的创始人曾经在 Startup Open Sourced 这本书上提到他们是如何在一个 Ruby 的线下聚会遇到,所以他们非常重视线下的社区聚会活动。他们的 Github Drinkup 活动从湾区开始,后来变成用户自发组织,变成全球很多开发者聚集的城市都会搞的活动。这样的社区号召力使得 Github 从一个源代码管理的工具变成了真正的开发者社区。 
在发展过程中,Github 获得了开源社区非常大的支持,Ruby on Rails 和 Linux Kernel(根据张西家在评论中的勘误,Linux Kernel 的代码是直到 2011 年秋季 kernel.org 事故之后才临时放到 Github 的。之前的 github.com/mirrors/linu[-2.6].git 是有 Github 负责同步的非官方镜像。 )的代码都被放到了 Github 上,这是非常重要的里程碑。 
Github 本身非常重视从开源社区中吸取精华,他们的 wiki 系统是 gollum,Github Pages 是 Jekyll,这两者都 host 在 Github 上并开源,并也成为了 Github 产品中非常好用的部分。 
Github 在社区方面的努力还包括他们的 Changelog 播客,招聘程序员的 Github Jobs 以及一大堆有趣的纪念品,比如那个“fork you”的 Tee。这些都从侧面帮忙 Github 建立了独一无二的品牌。 
也许这些都是一些侧面原因,但是我会倾向认为 Github 的成功来自他们对社区的重视。 

PS - 如何和 Sourceforge 相比,好像前者有一段时间在国内是不能访问的。

 

####################################################################################################

    http://www.yangzhiping.com/tech/github.html

    

如何高效利用GitHub

正是Github,让社会化编程成为现实。本文尝试谈谈GitHub的文化、技巧与影响。

 

Q1:GitHub是什么

A1:一家公司

github

位于旧金山,由Chris WanstrathPJ Hyett 与Tom Preston-Werner三位开发者在2008年4月创办。迄今拥有59名全职员工,主要提供基于git的版本托管服务。

在此之前,它是由TomChris 在本地程序员聚会中,开始的一个用于托管git的项目。正如每个伟大的传奇都开始于一场冒险,Tom在这篇文章我如何辞掉微软30万年薪邀约,创办GitHub中谈到:

当我老去,回顾一生,我想说,“哇,那是一场冒险“;而不是,“哇,我真的很安稳。“

另一位创始人Chris也详细描述了GitHub初创的前因后果,他说道:

Do whatever you want.

于是,在2008年4月10号这一天,GitHub正式成立。

目前看来,GitHub这场冒险已经胜出。根据来自维基百科关于GitHub的描述,我们可以形象地看出GitHub的增长速度:

github

今天,GitHub已是:

  • 一个拥有143万开发者的社区。其中不乏Linux发明者Torvalds这样的顶级黑客,以及Rails创始人DHH这样的年轻极客。
  • 这个星球上最流行的开源托管服务。目前已托管431万git项目,不仅越来越多知名开源项目迁入GitHub,比如Ruby on Rails、jQuery、Ruby、Erlang/OTP;近三年流行的开源库往往在GitHub首发,例如:BootStrapNode.jsCoffeScript等。
  • alexa全球排名414的网站。
 

Q2:GitHub风格

A2: GitHub只是GitHub

强调敏捷开发与快速原型,而又的确成功的创业团队,常具备一个重要气质:有自己的文化风格。如GitHub,又如37signals。通过他们的快速开发,向用户证明了团队在技术上的能力,并且时常有惊喜。同时,通过强调特立独行的文化,将对半衰期过短的产品族群的信任转为对GitHub团队的信任。

Gravatars的创始人(对,就是互联网最流行的头像托管系统)、Jekyll(对,它就是我近几年用的博客系统)作者、GitHub创始人,现任CTO Tom在GitHub第一年学到的10大教训创业学校演讲中谈到GitHub文化的方方面面。我尝试将这种风格总结为以下要点:

  • 专注创作,高创意
  • 运营良好与较高的内外满意度
  • 高利润,较低的融资额或零融资

创业公司多半死在钱上,就让我们先从钱谈起:

高利润,较低的融资额或者零融资

类似于GitHub这样的公司,拿到风险投资很难吗?恰恰相反,创始人PJ Hyett 在Hacker News的一篇评论中提到,自从GitHub创办以来,已与几十个VC沟通过。但是,直到今天,GitHub的融资额还是为零,并引以为豪。让我们看看GitHub官网的自我介绍:

image

运营良好与较高的内外满意度

在Quora上有人问道,GitHub是否寻找被收购?,还是PJ Hyett ,他的回答是:No。

GitHub从一开始就运营良好,员工拥有较高满意度,看看这些不太一样的做法:

  • 每一位GitHub公司的新员工,官方博客将发表文章欢迎。
  • 在GitHub内部,没有经理,需求内容与优先级由项目组自行决策。
  • 选择自己的工作时间、工作地点。
  • 员工来自开源社区。
  • 能开源的尽可能开源。

富有激情、创意的员工使得GitHub得到了社区的广泛认同,从而拥有极高的客户满意度,并从创业一开始就盈利。一份早期的调查表明,GitHub很快成为Git托管首选。

专注创作,高创意

GitHub59名全职员工仅有29名员工在本地工作!不仅仅是工作地点的安排富有创意,GitHub员工Holman, 详细介绍了GitHub的工作方式:

 

Q3:在GitHub,如何跟牛人学习

A3:在学习区刻意练习

追随牛人,与他们一起修行

修行之道:
关注大师的言行,
跟随大师的举动,
和大师一并修行,
领会大师的意境,
成为真正的大师。

正如这首禅诗所言,与其在墙内仰望牛人,不如直接在GitHub:

  • watch、fork牛人们
  • 对他们的项目提交pull request
  • 主动给牛人们的项目写wiki或提交测试用例,或者问题
  • 还可以帮他们翻译中文

GitHub本身建构在git之上,git成为勾搭大师们的必要工具,以下读物成为首选:

如果希望进一步深入,可以阅读已有中文翻译版的材料:

同样,如果希望了解更多GitHub自身的知识,GitHub官方文档值得推荐:

牛人在哪里?

关于学习的心理学研究,常常会谈到一个术语:元认知、元学习、元知识。是的,关于认知的认知、关于学习的学习、关于知识的知识,你对这些信息的偏好与熟练掌握,会让你在学习一门新东西时更加轻车熟路。对一手信息进行回溯,比如作者、创始人、最初文献出处,总是会让你更容易理解知识。

在学习区刻意练习:借助GitStats进行项目统计

如何学习一门新的编程语言?——在学习区刻意练习中,我已谈过:

学习编程最好的方式是在学习区刻意练习。

如何进行自我监督?

借助于GitStats,我们能很好地统计自己的每个项目的工作量,从而看到工作进展。

用法如下,

#复制GitStats项目到本地
cd ~/dev
git clone git://github.com/trybeee/GitStats.git
python ~/dev/gitstats/git-stats /youproject public 

以下为生成结果示范:

每周代码提交次数:

github

每天代码提交行数:

github

如果Fork别人的项目或者多人合作项目,最好每人都拥有一个独立分支,然后由项目维护人合并。如何建立自己的分支?

# 分支的创建和合并
# git branch yourbranch 
# git checkout yourbranch    切换到yourbranch

# 开发yourbranch分支,然后开发之后与master分支合并

# git checkout master
# git merge yourbranch
# git branch -d yourbranch    合并完后删除本地分支

如何将牛人的远程分支更新到自己的本地分支?

# 查看当前项目下远程
# git remote
# 增加新的分支链接,例如
git remote add niuren giturl…
# 获取牛人的远程更新
git fetch niuren
# 将牛人的远程更新合并到本地分支
git merge niuren/master

生产力小技巧

codeshelver:给git库做标签

观察的项目如果多了,怎么管理?用codeshelver,安装扩展之后,可以对GitHub项目做标签。

gollum:利用git与github做wiki

gollum是一个基于git的轻型wiki系统。

GitHubwatcher: 监测重点项目

GitHubwatcher适用于通知不频繁的情景。

GitHub官方资源

GitHub官方列出了一些有用的脚本与书签

社区驱动的安装与配置文件

GitHub中各类配置文件层出不穷,一些常用的:

  • osh-my-zsh:将终端从bash改为zsh之后,可考虑安装社区驱动的zsh配置文件,含有多个插件。可参考旧文zsh与oh-my-zsh
  • gitignore:GitHub官方出品
  • yourchili:服务器各类安装shell,比如安装nginx等。
 

Q4: 享受纯粹的写作与演讲

A4:回归创作的初始

写作

早在2008年,就有技术图书作者通过Git来写作,以下是示范:

你能想到的技术前沿话题,大多能在GitHub找到相应的培训材料或者开源图书。

个人写作照样适用。在前文理想的写作环境:Git+GitHub+Markdown+Jekyll,我已经格外赞美过这些美好事物了。

暖色调的灯光,足够宽度的工作台,听着清脆的键盘声音,基于Git、GitHub、Markdown与Jekyll来写作,不担心写废与排版,只关注最纯粹的写作,是一种享受。我有时候会想,如果Git、Github、Markdown、Jekyll,再加上Yaml、Json的作者,让这些作者们重新来设计今天互联网基础架构偏文本的部分,会诞生一些什么?

个人博客

借助于Jekyllbootstrap,可以在Github上快速搭建一个基于jekyll的博客系统。

除了这个简单易行的办法之外,还存在一些其他方法,例如:

演讲

借助于GitHub,可以享受更纯粹、更酷的演讲。GitHub 2011年收购Ordered List之后,从此可以通过speakerdeck更好的分享ppt文档。

我们还可以:

  • 使用GitHub著名传教士、Progit作者Scott Chacon开发的showoff
  • 来自开源社区的其他演讲库impress.js
 

Q5: 代码帮你找工作

A5:GitHub简历很诚实

NumEricR(非GitHub工作人员)基于GitHub Pages功能做了一个简历生成器,使用极其简单,登陆网站GitHub简历生成器,填入你的GitHub网站用户名即可。

fredwu是Ruby中文社区活跃份子,他的开源项目angel_nest,一个天使投资与创业者对接的网站,适合Ruby初学者升级为Ruby中级开发者时学习,也在Hacker News上被热烈讨论过,让我们来看看他的简历:

http://resume.GitHub.com/?fredwu

正是因为GitHub上的代码无法造假,也容易通过你关注的项目来了解知识面的宽度与深度。现在越来越多知名公司活跃在GitHub,发布开源库并招募各类人才,例如:FacebookTwitterYahoo ...

开始有了第三方网站提供基于GitHub的人才招聘服务,例如:

  • GitHire:通过它,可以找出你所在地区的程序员。
  • Gitalytics.com:通过它,能评估某位程序员在GitHub、LinkedIn、StackOverflow、hackernews等多个网站的影响力。
 

Q6: GitHub还在影响一些什么

A6:让计算机增强人类智慧

很多年前,在某个名声显赫的学府中,两位先后拿过图灵奖的牛人有一段对话:

  • 牛人A:我们要给机器赋予智慧,让他们有自我意识!
  • 牛人B:你要给机器做那么多好事?那你打算给人类做点什么呢?

这段对话来自《失控》。牛人A是明斯基,他最喜欢将人类看做有血肉的机器,他的框架理论成为认知心理学、人工智能入门基础。牛人B则是恩格尔巴特。当明斯基1961年发表他著名的文章人工智能走向时,恩格尔巴特还籍籍无名。直到次年,恩格尔巴特发表宏文:人类智力的增强:一种概念框架。提出不同于明斯基的另一条增强人类智力的道路:不要尝试发明自动打字的机器,而是尝试发明鼠标,并且他真的发明鼠标成功了!

从近些年的发展来看,仍然是明斯基占上风,但是,三十年河东,三十年河西,明斯基的人工智能方向又有多少年没有大突破了?相反,来自恩格尔巴特的群件、集体智慧等思想,逐步成为步入Web2.0时代之后的共识。无关对错,可以说,恩格尔巴特为增强人类智力,提供了可行的框架。与其去发明聪明的、昂贵的、功能一体化的智能机器人,还不如发明类似于鼠标这样笨笨的、廉价的、功能单一的人类智慧服务单件。明斯基的机器人很容易陷入死胡同,没有上升到哲学的高度。现在慢慢又回到恩格尔巴特这个方向来了。比如现在IBM开始宣传认知计算

从git与GitHub设计与解决的问题本质来看,明显加速了代码生产流程,促进了卓越智力产品的诞生。这就是一种典型的web2.0对智力生产流程的改良与人类智慧的增强。同样,某种意义上,小说写作网站也起到类似作用。但是,学术界尤其是社会科学类的智力产品生产似乎还停留在一个古老阶段。在开源领域,好想法层出不穷,极客影响极客,最终产生的是酷玩意。这些酷玩意抛弃浮华,直奔问题本质。那么,有没有科学界的GitHub?

类似问题层出不穷,以下为其他领域产品不完全名单。

学术研究

数据

科学计算

  • opani:雏形中,支持R、Python等多种。

教育

  • OpenStudy:一个社会性学习网络,通过互助来更好地学习,主题涉及到计算机、数学、写作等。
  • openhatch: 通过练习、任务等帮助新手更好地进入开源社区
 

Q7:除了GitHub,还可以选择什么?

A7:nil

因为进化的需要,多数裸猿存在选择强迫症:哪种程序语言更好?哪个web开发框架更好?当然,最令宅男技术男们羡慕的问题是,高白瘦御姐还是青春小萝莉好?:D

除了GitHub之外,

  • 中国山寨品是不是更好?(为什么不写他们名字,你懂的,山寨品总是善于争论谁是第一个山寨的,各自的排名先后:D)
  • 免费的BitBucket是不是更适合Python程序员?
  • 作为一名折腾族,我不自己搭建一个gitlabhq,是不是对不起自己?

我们可以理解,正是因为无数条分岔路口,让人类不再受制于某种基因、特定疾病、独裁家族,从而拥有无限的可能。但是,这种选择强迫症与远古时代可怜的信息量相比较,

  • 今天这个大数据时代,它还会有助于人类作为族群的整体进化与作为个体的幸福吗?
  • 今天一位一线城市30岁大学毕业生经历的选择与孔子整个一生经历的选择,纯论数量,谁多谁少?

生命如此短暂,为什么总要将青春浪费在不断的选择之中呢?罚你,回头阅读心理学家施瓦茨(Barry Schwartz)的TED演讲:选择之困惑——为何多即是少,1百遍啊1百遍。请记住施瓦茨的演讲要点:

  • 更多的选择不代表更多的自由;
  • 更多的选择导致决策的延迟和降低的满意感;
  • 快乐之秘诀,在于降低自己的期望值。

相关参考

本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 Unported许可协议进行许可。

 

 

http://www.gracecode.com/vimwiki-usage-notes.html

VimWiki 使用笔记

更新记录

  • 2012-10-11 重新使用 Markdown 格式编辑
  • 2010-04-13 增加使用“时间戳”章节
  • 2010-03-20 基本完成此篇文档
  • 2010-03-19 增加“配置”章节
  • 2010-03-18 初始化版本,增加“安装”章节

前言

如果你在使用 Vim,那么我敢保证你绝对不会错过这款名为VimWiki 的插件。 您使用 VimWiki 可以

  • 组织笔记和想法
  • 组织行动列表(TODO List)
  • 编写文档

安装

VimWiki 的项目主页为 http://vimwiki.googlecode.com ,下载压缩文件解压缩后用 Vim 打开,然后

:source %

即可安装完成。

同时建议 Vim 配置文件中有下面的选项:

set nocompatible
filetype plugin on
syntax on

上述配置的具体解释详细解释看 help 文档。

配置

配置路径

我的 VimWiki 配置

" VimWiki 配置
let g:vimwiki_list = [{"path": "~/Wiki/", "path_html": "~/Sites/wiki/", "auto_export": 1}]

其中,path 为 保存 wiki 的文件路径,pathhtml 为输出 html 的路径,autoexport 设置为自动导出。

管理多个 Wiki

管理多个 VimWiki 即在 g:vimwiki_list 中增加对应的数组选项即可,如

let g:vimwiki_list = [{"path": "...", "path_html": "..."},
                    \ {...}, ... ]

其他配置

let g:vimwiki_auto_checkbox = 0

设置列表不自动添加 checkbox 框

let g:vimwiki_w32_dir_enc = 'cp936'

如果在中文版的 Windows 下,目录名称如果为中文,则应用此选项(否则默认使用 Vim encoding 指定的编码)。

使用

命令

Golbal 命令

  • :VimwikiGoHome
  • :VimwikiTabGoHome
  • :VimwikiUISelect

Buffer 命令

  • :Vimwiki2HTML
  • :VimwikiAll2HTML
  • :VimwikiDeleteWord
  • :VimwikiDeleteWord
  • :VimwikiFollowWord
  • :VimwikiGoBackWord
  • :VimwikiNextWord
  • :VimwikiPrevWord
  • :VimwikiRenameWord
  • :VimwikiSplitWord
  • :VimwikiToggleListItem
  • :VimwikiVsplitWord

快捷键

[n]\ww :: 打开第 N 个 Wiki,如果没指定,则打开默认 Wiki
[n]\wt :: 新标签页打开第 N 个Wiki
\ws :: 打开 Wiki 列表并选择打开
<Enter> :: 打开、创建 !WikiWord
<Shift + Enter> :: 水平分隔并打开、创建 !WikiWord
<Ctrl + Enter> :: 垂直分割打开、创建 !WikiWord
<Backspace> :: 回到上一个 !WikiWord
<Tab> :: 找到下个 !WikiWord
<Shift-Tab> :: 找到上个 !WikiWord
\wd :: 删除当前 !WikiWord
\wr :: 重命名 !WikiWord
<Ctrl-Space> :: 打开、关闭列表
= :: 增加、创见标题
- :: 删除、减少标题

语法

章节

*text* :: 粗体
_text_ :: 斜体
~~text~~ :: 删除线
^text^ :: 上标
,,text,, :: 下标
`code` :: 代码、不解析
<!- - text - -> :: 注释,同时布显示于 HTML 输出

标题

= header = :: 标题一
== header == :: 标题二
=== header === :: 标题三
==== header ==== :: 标题四
===== header ===== :: 标题五
====== header ====== :: 标题六

链接

TextText :: !WikiWord
!TextText :: 不要链接指定的 !WikiWord
[[Text text]] :: 强制指定某个 !WikiWord,注意中文等字符
[[Text text | Text]] :: 使用某个描述到 !WikiWord

下述链接格式可多项组合

http://site/ :: 自动连接
[http://site/ home page] :: 带描述的连接
http://site/pic.jpg :: 解析为图片
[[images/pic.jpg]] :: 链接到本地图片

列表

无序列表
* items
* items
* items
* items
有序列表
# items
# items
# items
# items
定义列表
define :: desption
define :: desption
define :: desption
define :: desption

表格

| 表格 | 表格 | 表格 |
| 表格 | 表格 | 表格 |
| 表格 | 表格 | 表格 |

技巧

同步 Vimwiki

可以考虑使用 Dropbox & rsync 同步 Wiki 文件以及脚本,架构图如下

同步图例

生成所有的 HTML

重新生成所有的 HTML 页面(不包括样式)

:VimwikiAll2HTML

Windows 下路径变错的问题

1、检查 HTML 输出的路径是否正确

: shellescape(expand('%:p:h'))

2、配置文件文件中,盘符路径必须大写而且最后最好加上目录分隔符,例如

" 注意!
" 1、如果在 Windows 下,盘符必须大写
" 2、路径末尾最好加上目录分隔符
let s:vimwiki_root = "C:/.../Vimwiki"
let g:vimwiki_list = [
            \{"path": s:vimwiki_root."/Default/",
            \"path_html": s:vimwiki_root."/Default/html/", "auto_export": 1}
            \]

增加 HTML 输出时间戳标记

给 $VIM_FILES/autoload/vimwiki_html.vim 打补丁

然后再设置的自定义 footer.tpl 的合适位置中,加入

%time_stamp%

即可在每份输出的 HTML 中加入时间戳(导出 HTML 的时间)。如果想更改时间戳的格式,更改变量

g:vimwiki_timestamp_format

即可,例如

let g:vimwiki_timestamp_format = '%Y-%m-%d %H:%M:%S'

-- EOF--

 

posted @ 2013-10-17 10:52  陳聽溪  阅读(2908)  评论(0编辑  收藏  举报