2013年3月15日 星期五

使用 GitHub 管理 VIM

之前我並沒有在 VIM 裡安裝任何插件 (Plugin),最近開始嘗試使用 VIM 的各種插件,爬文後發現用 GitHub 來管理 VIM 的設定和插件是一件很方便的事。而且,VIM 的配置都放在 $HOME/.vim 這個目錄內,所以也只要同步這個目錄就可以了。

之前在 "使用 pathogen 管理 VIM 的插件 (plugin)" 這篇文章裡,我已經使用 pathogen 來管理 VIM 插件了,使用 pathogen 的好處是只要將插件放到 ~/.vim/bundle 目錄內就行。另外,目前多數的 VIM 插件都集中到 Vim Scripts 這裡,所以只要簡單地搭配 Git Submodule 就可以簡化下載插件的動作。爬了爬文後,似乎很多人都是從 Tsung-Hsiang (Sean) Chang 維護的 vgod's vimrc 開始。vgod's vimrc 確實是一個很棒的範例,所以我也試著研究這個並自己來建立一個屬於自己的 vimrc。

以下這幾篇文章就是使用 pathogen 搭配 Git Submodule 的用法。基本上,Git Submodule 就是將別人的 Repository 當成自己的一部份,所以若來源是 VIM 的插件時,就相當於將 VIM 插件安裝到自己的環境裡。

  1. vgod's vimrc
  2. 使用 Git Submodule 和 Vim-pathogen 管理、同步 Vim 插件及配置
  3. 寶尼: Vim Plugin:GitHub 與 Submodule 共舞

如果將 $HOME/.vim 這個目錄變成一個 Repository,那麼使用 pathogen 搭配 Git Submodule 就很簡單了。只要在 $HOME/.vim 這個目錄內執行這個指令就可以安裝插件了:

$ git submodule add [GIT-REPOSITORY-URL] bundle/[PLUGIN-NAME] 

例如,要安裝 EditPlus 這個插件,而它的來源在 https://github.com/vim-scripts/EditPlus.git,那麼只要執行這一個指令就可以了:

$ git submodule add https://github.com/vim-scripts/EditPlus.git bundle/EditPlus

另外,也可以使用 Vundle 來管理插件。Vundle 的邏輯很有意思,在 Vim Scripts 選好插件後,在 $HOME/.vimrc 裡寫上這麼一行 Bundle [PLUGIN-NAME] ,然後在 VIM 裡執行 :BundleInstall 就搞定安裝的步驟了。下面的文章都有說明怎麼使用 Vundle,也可以直接參考 Vundle 開發者的說明

  1. Git时代的VIM不完全使用教程
  2. 使用github管理VIM

Vundle 的安裝也很簡單,先將 Vundle 下載到 $HOME/.vim/bundle/vundle 目錄:

$ git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

然後在 $HOME/.vimrc 裡加上這段:

set nocompatible       " be iMproved
filetype off          " required!

set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" let Vundle manage Vundle
" required! 
Bundle 'gmarik/vundle'

" My Bundles here:
"
" original repos on github
Bundle 'tpope/vim-fugitive'
Bundle 'Lokaltog/vim-easymotion'
Bundle 'rstacruz/sparkup', {'rtp': 'vim/'}
Bundle 'tpope/vim-rails.git'
" vim-scripts repos
Bundle 'L9'
Bundle 'FuzzyFinder'
" non github repos
Bundle 'git://git.wincent.com/command-t.git'
" ...

filetype plugin indent on     " required!
"
" Brief help
" :BundleList          - list configured bundles
" :BundleInstall(!)    - install(update) bundles
" :BundleSearch(!) foo - search(or refresh cache first) for foo
" :BundleClean(!)      - confirm(or auto-approve) removal of unused bundles
"
" see :h vundle for more details or wiki for FAQ
" NOTE: comments after Bundle command are not allowed..

其中以 Bundle 開頭的就是要安裝的插件。

所以整理了一下,我決定也試試用 GitHub 來管理我的 VIM,首先在 GitHub 上建立一個名稱為 vimrc 的專案。

接著,在 $HOME/.vim 建立我的 Repository,

$ git init
$ git submodule add git://github.com/tpope/vim-pathogen.git bundle/vim-pathogen
$ git submodule add git://github.com/gmarik/vundle.git bundle/vundle

然後再參考 https://github.com/tpope/vim-pathogenhttps://github.com/gmarik/vundle 的說明,建立 $HOME/.vim/vimrc 這個檔案,然後加入:

runtime bundle/vim-pathogen/autoload/pathogen.vim
call pathogen#infect()

set nocompatible
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
" let Vundle manage Vundle
Bundle 'gmarik/vundle'
" My Bundles here:
" vim-scripts repos, vim-scripts.org
Bundle 'SrcExpl'
Bundle 'Trinity'
Bundle 'taglist.vim'
Bundle 'The-NERD-tree'
filetype plugin indent on

接著,將 $HOME/.vim 的內容上傳到 GitHub 去,就搞定了。

$ git add .
$ git commit -m "first commit"
$ git remote add origin https://github.com/yuanfarn/vimrc.git
$ git push -u origin master

往後,在別台 Linux 的電腦上要取用這個 VIM 的設定時,只要依照 https://github.com/yuanfarn/vimrc/blob/master/README.md 的步驟說明下載就可以了。

延伸閱讀

  1. vgod's vimrc
  2. 使用 Git Submodule 和 Vim-pathogen 管理、同步 Vim 插件及配置
  3. 寶尼: Vim Plugin:GitHub 與 Submodule 共舞
  4. Git时代的VIM不完全使用教程
  5. 使用github管理VIM
  6. Windows下安装Vim插件管理Vundle
  7. Git Submodule 的認識與正確使用!

2013年3月14日 星期四

讓 openSUSE 12.2 支援多媒體檔案格式

之前我很少在 Linux 下播放影音檔,所以也沒有特別去比較用過的 Linux 發行版本在多媒體檔案格式上的支援程度。以 openSUSE 12.2 來說,在安裝後還是得另外再搞定多媒體檔案格式的 codecs,不然像 mp4、H.264 格式的檔案大概都不能播放了。

幸好,openSUSE 12.2 在這點還不算太麻煩。首先參考 "Restricted formats/12.2" 這篇文章,執行下面這兩行指令添加 codecs 的套件庫來源:

$ sudo zypper addrepo -r http://packman.inode.at/suse/12.2/packman.repo
$ sudo zypper addrepo -r http://www.opensuse-guide.org/repo/12.2/libdvdcss.repo 

然後,再執行這個指令安裝需要的套件:

$ sudo zypper install libxine2-codecs k3b-codecs ffmpeg lame gstreamer-0_10-plugins-bad gstreamer-0_10-plugins-ugly gstreamer-0_10-plugins-ugly-orig-addon gstreamer-0_10-plugins-ffmpeg libdvdcss2 

這時,你可能會遇到套件相依的問題,如下:

問題: ffmpeg-1.0.5-1.1.x86_64 需要 libavutil51 = 1.0.5,但無法提供此需求
問題: k3b-codecs-2.0.2-15.104.x86_64 需要 k3b = 2.0.2-15.104,但無法提供此需求

問題: ffmpeg-1.0.5-1.1.x86_64 需要 libavutil51 = 1.0.5,但無法提供此需求
  無法安裝的提供者: libavutil51-1.0.5-1.1.i586[packman]
                   libavutil51-1.0.5-1.1.x86_64[packman]
解決方案 1:下列行動將被執行:
  請勿安裝 ffmpeg-1.0.5-1.1.x86_64
  請勿安裝 libxine2-codecs-1.2.2-81.1.x86_64
解決方案 2:取代 libavutil51-0.11.1-3.1.2.x86_64 以 libavutil51-1.0.5-1.1.x86_64
解決方案 3:請勿安裝 ffmpeg-1.0.5-1.1.x86_64
解決方案 4:藉由忽略某些它的相依性破壞 ffmpeg-1.0.5-1.1.x86_64 

使用'數字'選擇上列的解決方法,或 skip(跳過)、retry(重試)或 cancel(取消) [1/2/3/4/s/r/c] (c): 2

問題: k3b-codecs-2.0.2-15.104.x86_64 需要 k3b = 2.0.2-15.104,但無法提供此需求
  無法安裝的提供者: k3b-2.0.2-15.104.i586[packman]
                   k3b-2.0.2-15.104.x86_64[packman]
解決方案 1:降級 k3b-2.0.2-22.1.2.x86_64 到 k3b-2.0.2-15.104.x86_64
解決方案 2:請勿安裝 k3b-codecs-2.0.2-15.104.x86_64
解決方案 3:請勿安裝 k3b-codecs-2.0.2-15.104.x86_64
解決方案 4:藉由忽略某些它的相依性破壞 k3b-codecs-2.0.2-15.104.x86_64 

使用'數字'選擇上列的解決方法,或 skip(跳過)、retry(重試)或 cancel(取消) [1/2/3/4/s/r/c] (c): 1 

依次回應處理方式後,就可以開始下載及安裝了:

正在解析相依性...
正在解決套件相依性...

將會安裝下列新的套件:
  ffmpeg gstreamer-0_10-plugins-bad gstreamer-0_10-plugins-ffmpeg 
  gstreamer-0_10-plugins-ugly gstreamer-0_10-plugins-ugly-orig-addon k3b-codecs lame 
  liba52-0 libass4 libavcodec52 libavcodec54 libavdevice54 libavfilter1 libavfilter3 
  libavformat52 libavformat54 libavresample0 libavutil50 libcdaudio libdirac_encoder0 
  libdv4 libdvdcss2 libdvdnav4 libfaac0 libfaad2 libgme0 libgstbasecamerabinsrc-0_10-23 
  libgstbasevideo-0_10-23 libgstcodecparsers-0_10-23 libgstphotography-0_10-23 
  libgstsignalprocessor-0_10-23 libgstvdp-0_10-23 liblrdf2 libmad0 libmjpegutils-2_0-0 
  libmp3lame0 libmpeg2-0 libmusicbrainz4 libofa0 libopenal1-soft libopencore-amrnb0 
  libopencore-amrwb0 libopus0 libpostproc51 libpostproc52 libquicktime0 librtmp0 
  libschroedinger-1_0-0 libsidplay1 libslv2-9 libSoundTouch0 libspandsp2 libswresample0 
  libswscale0 libswscale2 libtimidity-0_1-0 libtwolame0 libvdpau1 libvo-aacenc0 libvpx1 
  libx264-129 libxine2-codecs libxvidcore4 libzvbi0 openal-soft 

下列套件將會升級:
  libavutil51 

下列套件將會降級:
  k3b 

下列推薦的套件已自動被選取:
  openal-soft 

下列套件將會變更供應商:
  k3b          openSUSE -> http://packman.links2linux.de
  libavutil51  openSUSE -> http://packman.links2linux.de


1  套件將升級, 1  將降級, 65  新的, 2  將變更供應商.
全部下載大小: 20.2 MiB。 完成操作後,將增加 41.1 MiB 的使用。
要繼續嗎? [y/n/?] (y):  

在安裝完 codecs 後,接著我們還要再安裝 VLC 這個播放器,根據 "VLC media player for openSUSE" 這一頁的說明,在 openSUSE 12.2 裡安裝 VLC 時,只要執行下面這行將 VLC 的來源加入:

$ sudo zypper addrepo http://download.videolan.org/pub/vlc/SuSE/12.2 VLC

然後執行下面這行安裝 VLC 就可以了:

$ sudo zypper install vlc 

收工,現在 openSUSE 12.2 裡可以用 VLC 播放許多影音囉!

延伸閱讀:

2013年3月6日 星期三

apt 與 zypper 的比較

Debian GNU/Linux 與其它以 Debian GNU/Linux 為基礎的發行版本都採用 apt-get 指令來管理 package 的安裝移除,而 OpenSUSE 則採用 zypper 這個指令來管理。

以往嘗試使用 OpenSUSE 時,我都直接使用圖型化介面的工具來管理 package 的安裝移除,畢竟 OpenSUSE 在桌面環境的整合上確實很有一套,不過這兩天重新安裝了 OpenSUSE 12.2 後,我一直很好奇有沒有指令工具可以使用。在摸索及爬文後,發現原來 OpenSUSE 可以使用 zypper 這支工具程式來管理 package 及 repository。稍微嘗試了一下,這個指令確實好用,不過和以往使用 apt-get 指令的習慣不同,所以我也整理了一下比較表。在比較表裡,我同時列上了 aptitude 這個指令,目前在 Debian GNU/Linux 裡,因為我習慣以 aptitude 這個指令工具來取代 apt-get。

延伸閱讀:

2013年3月2日 星期六

D90 進廠了!

話說,我的 D90 服役滿三年又六十六日,擊殺快門數十三萬六千有餘,今天是第一次進廠檢修了。進廠的原因不是快門,而是熱靴。只要裝上 NIKON 的閃燈,不管是那一顆,都會進入待機狀態;若是裝上單點觸發的副廠閃燈,則無法觸發閃燈。


[NIKON D90, 50mm f/1.4G] ISO 800, 50mm, f/3.2, 1/160 sec., 0EV, 5000K (@Flickr)

所以啊!別太斤斤計較手上相機的快門數了,用力拍下去就對了!哈! :D