くまのりくふん RSSフィード

|

2008-08-31

smartchrの間違った使い方

00:16 | はてなブックマーク - smartchrの間違った使い方 - くまのりくふん

smartchr - Insert several candidates with a single key : vim online

function! s:owata_init()
  call s:owata_make_window("[owata]")
  call s:owata_make_keymapping()
  call s:owata_make_autocommand()
endfunction

function! s:owata_loop()
  if !exists("s:owata_count")
    let s:owata_count = 0
  elseif s:owata_count >= 20
    let s:owata_count = 0
    close
    return
  endif
  call feedkeys("A_\<Esc>")
  let s:owata_count += 1
endfunction

function! s:owata_make_window(owata_bufname)
  1new
  setlocal bufhidden=wipe
  setlocal buftype=nofile
  setlocal noswapfile
  setlocal nobuflisted
  file `=a:owata_bufname`
endfunction

function! s:owata_make_keymapping()
  inoremap <buffer> <expr> _ smartchr#one_of(
        \ '←9/1                  ┗(^o^ )┓三',
        \ '←9/1                 ┗(^o^ )┓三',
        \ '←9/1                ┗(^o^ )┓三',
        \ '←9/1               ┗(^o^ )┓三',
        \ '←9/1              ┗(^o^ )┓三',
        \ '←9/1             ┗(^o^ )┓三',
        \ '←9/1            ┗(^o^ )┓三',
        \ '←9/1           ┗(^o^ )┓三',
        \ '←9/1          ┗(^o^ )┓三',
        \ '←9/1         ┗(^o^ )┓三',
        \ '←9/1        ┗(^o^ )┓三',
        \ '←9/1       ┗(^o^ )┓三',
        \ '←9/1      ┗(^o^ )┓三',
        \ '←9/1     ┗(^o^ )┓三',
        \ '←9/1    ┗(^o^ )┓三',
        \ '←9/1   ┗(^o^ )┓三',
        \ '←9/1  ┗(^o^ )┓三',
        \ '←9/1 ┗(^o^ )┓三',
        \ '←9/1┗(^o^ )┓三',
        \ '\(^o^)/夏休みオワタ')
endfunction

function! s:owata_make_autocommand()
  let s:backup_updatetime = &updatetime
  let &updatetime = 300
  augroup Owata
    autocmd!
    autocmd BufEnter    <buffer> let &updatetime=300
    autocmd BufLeave    <buffer> let &updatetime=s:backup_updatetime
    autocmd CursorHold  <buffer> call s:owata_loop()
  augroup END
endfunction

command! -nargs=0 Owata call s:owata_init()

おもむろに、

:Owata<CR>

とたたく。

スクリプトを書いている間に9月1日になったのが凄く悔しいです。

変更履歴

augroupを閉じ忘れていたのを修正

test用にs:owata_countをechoしていたのを削除

トラックバック - http://vim.g.hatena.ne.jp/kuhukuhun/20080831

2008-07-28

かなしいね

18:31 | はてなブックマーク - かなしいね - くまのりくふん

noremap : ;
noremap ; :

短い小指に優しいね。

nmap x :let g:hoge = 1<CR><Plug>Hoge

かなしいね。

RioRio2013/03/02 23:10How neat! Is it really this sipmle? You make it look easy.

dtbhcfkgoidtbhcfkgoi2013/03/06 09:45tBBuJq <a href="http://tjuvufofsjbz.com/">tjuvufofsjbz</a>

トラックバック - http://vim.g.hatena.ne.jp/kuhukuhun/20080728

2008-07-18

セッション(session)をもっと使おうキャンペーン(失敗済)

02:34 | はてなブックマーク - セッション(session)をもっと使おうキャンペーン(失敗済) - くまのりくふん

セッションをもっと使おうじゃないかというキャンペーン。すでに失敗済。

二ヶ月くらい前の話ですが、僕はもっとセッションを使おうと思い、だらだらとスクリプトを書きました。できあがったのは、セッションを指定したディレクトリに一括管理することで、セッションの作成と読込みを楽にしようというものでした。2日で使わなくなった代物です。

僕は使っていませんが、奇特な方が使うかもしれないのでこの場に書いておきます。

ソースコード

" var
if !exists('g:session_dir') | let g:session_dir = '.' | endif

" function
function! s:make_session(file)
  if a:file == ''
    let l:file = "0.vim"
  elseif a:file !~ '^[[:alnum:]]$'
    echoerr "セッション名には英数1文字を指定して下さい"
    return
  else
    let l:file = a:file . '.vim'
  endif
  let l:dir = fnamemodify(g:session_dir, ":p")
  if !isdirectory(l:dir)
    echoerr "セッションの保存先がディレクトリじゃないよ!"
    return
  endif
  execute "mksession! " . l:dir . l:file
endfunction

function! s:load_session(file)
  if a:file == ''
    let l:file = "0.vim"
  elseif a:file !~ '^[[:alnum:]]$'
    echoerr "セッション名には英数1文字を指定して下さい"
    return
  else
    let l:file = a:file . '.vim'
  endif
  let l:dir = fnamemodify(g:session_dir, ":p")
  if !isdirectory(l:dir)
    echoerr "セッションの保存先がディレクトリじゃないよ!"
    return
  endif
  let l:path = l:dir . l:file
  if !filereadable(l:path)
    echoerr "セッションを読みこめないよ!"
    return
  endif
  execute "source" l:path
endfunction

" command
command! -nargs=? MkSession call s:make_session(<q-args>)
command! -nargs=? LoSession call s:load_session(<q-args>)

" keymapping
" make session
nnoremap <silent> <Leader>ms :MkSession 0<CR>
for i in range(10)
  execute "nnoremap <silent> <Leader>m" . i . " :MkSession " . i . "<CR>"
endfor

" load session
nnoremap <silent> <Leader>ls :LoSession 0<CR>
for i in range(10)
  execute "nnoremap <silent> <Leader>l" . i . " :LoSession " . i . "<CR>"
endfor

使いかた

上記のソースコードを設定ファイルなりに貼り付けて下さい。

以下コマンドの説明

:MkSession [file]  g:session_dir に [file] という名前のセッションファイルを作成する。
                     [file] には英数1文字を指定する。
                     [file] を省略した場合は "0.vim"に保存する。

:LoSession [file]  g:session_dir から [file] という名前のセッションファイルを読込む。
                     [file] には英数1文字を指定する。
                     [file] を省略した場合は "0.vim"を読込む。

補足とか

ソースコードの方では、<Leader>ms と <Leader>m0-9、<Leader>ls と <Leader>l0-9 というキーマッピングを設定しています。問題があれば適宜変更を加えて下さい。

セッションの保存ディレクトリが初期状態だと、カレントディレクトリになっているので、本当に一括管理したい方は適当なディレクトリを指定してあげて下さい。(例:let g:session_dir = '~/vimfiles/session/')

変更履歴

セッション名が英数1文字であるかの判定を正確に行うように修正

エラーメッセージをechoerrで出力するように修正

ka-nachtka-nacht2008/07/19 12:37- \wには_も含まれる。
- :echoerr

kuhukuhunkuhukuhun2008/07/19 15:16ご指摘ありがとうございます。
該当個所を修正しておきました!

EuisEuis2012/06/28 10:54I love these atrilecs. How many words can a wordsmith smith?

enliccenlicc2012/06/29 04:39dY0KC4 <a href="http://grxbozrsklcn.com/">grxbozrsklcn</a>

sxorujqhusxorujqhu2012/06/29 15:421ha2pT , [url=http://mbyjxefwjakv.com/]mbyjxefwjakv[/url], [link=http://oryktakcupam.com/]oryktakcupam[/link], http://vclwdicypwhr.com/

micaucmicauc2012/07/01 01:25X15GAx <a href="http://ydrznavoywar.com/">ydrznavoywar</a>

トラックバック - http://vim.g.hatena.ne.jp/kuhukuhun/20080718
|