ページ

2012年1月24日火曜日

AutoComplPopをほんの少しいじる

tabで補完するために以下を.vimrcに書く。

"<TAB>で補完
" {{{ Autocompletion using the TAB key
" This function determines, wether we are on the start of the line text (then tab indents) or
" if we want to try autocompletion
function! InsertTabWrapper()
        let col = col('.') - 1
        if !col || getline('.')[col - 1] !~ '\k'
                return "\<TAB>"
        else
                if pumvisible()
                        return "\<C-N>"
                else
                        return "\<C-N>\<C-P>"
                end
        endif
endfunction
" Remap the tab key to select action with InsertTabWrapper
inoremap <tab> <c-r>=InsertTabWrapper()<cr>
" }}} Autocompletion using the TAB key

でしばらく使ってたんだけどしっくり来ない。

補完の第一候補が最初から選択されているので、returnキーならそのまま確定するのだけどtabを押すと二個目が選択されちゃって戻ったりしなきゃいけない。

これはストレスなので.vim/bundle/AutoComplPop/autoload/acp.vimの中身を見て、
function acp#onPopupPost()
  " to clear <C-r>= expression on command-line
  echo ''
  if pumvisible()
    inoremap <silent> <expr> <C-h> acp#onBs()
    inoremap <silent> <expr> <BS>  acp#onBs()
    " a command to restore to original text and select the first match
    return (s:behavsCurrent[s:iBehavs].command =~# "\<C-p>" ? "\<C-n>\<Up>"  : "\<C-p>\<Down>")
の部分をこう書き換えた
function acp#onPopupPost()
  " to clear <C-r>= expression on command-line
  echo ''
  if pumvisible()
    inoremap <silent> <expr> <C-h> acp#onBs()
    inoremap <silent> <expr> <BS>  acp#onBs()
    inoremap <expr> <CR> pumvisible() ? "\<C-Y>\<CR>" : "\<CR>"
    " a command to restore to original text and select the first match
    return (s:behavsCurrent[s:iBehavs].command =~# "\<C-p>" ? "\<C-n>\<Up>\<C-n>"  : "\<C-p>\<Down>\<C-p>")
最後のところは<Up>と<Down>を消すだけでもいいけど、なんとなく消すのが嫌だったのでこうした。
これで、tabを押したタイミングで第一候補から選択、returnは補完があろうがなかろうが改行になった。

参考:
autocomplpop.vimでリアルタイムにキーワード補完 - ナレッジエース
autocomplpop.vim -自動補完プラグイン- « Labs@doya.in

2012年1月8日日曜日

Vundleを使う

EmacsとVimの二刀流になるべくVimをメインに使い始めて数カ月。

プラグインを入れるのにはpathogenを使っていたのだが、どうやら近頃はVundleなるもののほうがよさげ。というわけで乗り換える。

というかpathogen使ってるのに、プラグイン追加するときgit submodule addとかするのすっかり忘れてた。意味ねー


ドットファイルをgitで管理しているのでsubmoduleとして取り込む
% cd ~/dotfiles
% git submodule add http://github.com/gmarik/vundle.git .vim/bundle/vundle

.vimrcに記述
filetype off

if has('win32') || has('win64')
  let $DOTVIM = expand('~/vimfiles')
else
  let $DOTVIM = expand('~/.vim')
endif
set rtp+=$DOTVIM/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!

後半を編集して自分の入れたいものを書く。

先に:BundleInstall!してVundle自体を最新にしておいたほうがいいかも。

書いたらVimを起動して:BundleInstallすると書いたものが~/.vim/bundle/にインストールされる。

参考:
Vim-users.jp - Hack #215: Vundle で plugin をモダンに管理する
Vim のプラグイン管理を pathogen から Vundle に移行した - present
gmarik/vundle - GitHub

各種設定ファイルをgitで管理する

.emacsとか.vimrcとか.zshrcとか、それらをまとめて管理することにした。

dotfilesフォルダを作って、各種設定ファイルを突っ込み、個別にシンボリックリンクを貼る

こんな感じ
% mkdir ~/dotfiles
% mv .emacs dotfiles/
% ln -s dotfiles/.emacs ~/.emacs

で、dotfilesフォルダをgitで管理する。

2012年1月4日水曜日

Nodeのデーモン化

foreverを使う
% npm install forever

% forever start app.js

これだけ。簡単。

Node + Nginxの設定をする

見よう見まねで設定。やたら手こずってしまった。

ExpressアプリをNginxで動かす。

/home/zakuni/hoge/ にapp.jsがあり、それをhogehoge.comで動かしたいとする。
% sudo vi /etc/nginx/sites-available/hoge

/etc/nginx/sites-available/hoge
server {
  listen 80;
  server_name http://hogehoge.com;
  access_log /var/log/nginx/hoge_access.log;
  error_log /var/log/nginx/hoge_error.log;

  location / {
   root /home/zakuni/hoge/;
   index /;
   proxy_pass http://localhost:3000;
  }
}

リンクを貼る
% sudo ln -s /etc/nginx/sites-available/domain1.com /etc/nginx/sites-enabled/domain1.com

nginxを再起動。
% sudo /etc/init.d/nginx restart


参考:
nginx @ ウィキ - nginx バーチャルホスト
nginx設定メモ - おおにしあきらの日記
node.js + nginx - And now? - Stack Overflow