VimScriptでHashTableを実装する

2009-01-11

ruby_imaps.vim を入れた。補完、snippetなど

| 07:56


間違いある可能性。


  • insert modeにてC-X,O で自動補完が入る
  • snippetは、maplocalladerを;として使う。よく使いそうなのをruby_imaps.vim内からぴっくあっぷ

; + command
bl { \|<+ arg +>\| <+ block +> }
bldo do \|<+ arg +>\|\n <+ block +>\nend
cas case\nwhen <+ condition +>\n<+ action +>\nelse\n<+ action +>\nend
cast case <+ target +>\nwhen <+ comparison +>\n<+ action +>\nelse\n<+ action +>\nend
con concat( <+ other_array +> )
def def <+ defname +>\nend
defi def initialize\n<++>\nend
defs def self.<+ class method name +>\nend
do do \|<++>\|っ\n<++>\nend
if if <+ boolean exp +>\n<+ block +>\nend
tif <+ boolean exp +> ? <+ exp if true +> : <+ exp if false +>
elsif elsif <+ boolean exp +>\n<+ block +>
unl unless <+ boolean exp +>\n<+ block +>\nend
sqs %q/<+ single quoted string +>/
dqs %Q/<+ double quoted string +>/
int #{<+ string to substitute +>}
%w %w/<+ words in array (not substituted) +>/
%W %W/<+ words in array (substituted) +>/
cl class <+ class name +>\nend
ea each {\|<+ record +>\| <+ block +> }
eai each_index {\|<+ index +>\| <+ block +> }
eak each_key {\|<+ key +>\| <+ block +> }
eal each_line {\|<+ line +>\| <+ block +> }
eav each_value {\|<+ value +>\| <+ block +> }
dirg Dir.glob(\"<+ pattern +>\") { \|file\| <+ block +> }
file File.foreach(\"<+ dirname +>\") { \|file\| <+ block +> }
open open(\"<+ path or url +>\", \"<+ rw +>\") { \|io\| <+ block +> }
col collect { \|<+ obj +>\| <+ block +> }
fin find { \|<+ element +>\| <+ block +> }
grep grep(/<+ pattern +>/) { \|<+ match +>\| <+ block +> }
rej reject {\|<+ element +>\| <+ block +> }
sel select {\|<+ element +>\| <+ block +> }
sub sub(/<+ pattern +>/) {\|<+ match +>\| <+ block +> }
gsub gsub(/<+ pattern +>/) {\|<+ match +>\| <+ block +> }
h <Space>=><Space>
com <Space><=><Space>


ruby_imaps.vim内でIMAP_PutTextWithMovementという関数が使われている。これは


*IMAP_PutTextWithMovement* *ls_a_ea*

You can also set up a Latex-Suite style mapping which calls a custom

function as follows:

:call IMAP('FOO', "\<C-r>=MyFoonction()\<CR>", 'tex')

where MyFoonction is a custom function you have written. If

MyFoonction also has to return a string containing <++> characters,

then you will need to use the function IMAP_PutTextWithMovement(). An

example best explains the usage:

ujihisaujihisa2010/02/24 06:54途中に出てくる「つ」が気になります

SundanceSundance2011/07/09 20:09Why do I bother cllaing up people when I can just read this!

dorgbpypiudorgbpypiu2011/07/10 00:47YJWbQe <a href="http://ushpkiwawlxf.com/">ushpkiwawlxf</a>

seuiutussqseuiutussq2011/07/10 20:30fX4dQo , [url=http://kvqvzqekyxzk.com/]kvqvzqekyxzk[/url], [link=http://sqwefnfzvpdo.com/]sqwefnfzvpdo[/link], http://gmvbqreigiec.com/

wjmgcrbzhwjmgcrbzh2011/07/11 20:06HP4kVn <a href="http://ogagshodiliy.com/">ogagshodiliy</a>

bjhpyrebjhpyre2011/07/12 22:02KAxQQX , [url=http://lkzlufsmeack.com/]lkzlufsmeack[/url], [link=http://ukdnumeandyf.com/]ukdnumeandyf[/link], http://nudatqmkjtsn.com/

2008-09-20

練習用につくるもの

| 13:09

  • はてな記法をサポートするVimScript(plugin)。
    • とりあえず箇条書きの自動補完とかそのへん
    • 既に書いた文章に一行ごとに1.2.3.4....と入れてくれる
nnoremap <Leader>ln <ESC>:s/\./\. \r/g<CR>
  • Vimの中からperl, rubyを実行して結果を横目に見れる
    • どこかで誰か書いていた
  • 文字数カウント
    • 選択して呼び出すと文字数をカウントして、
    • その下の行に結果を出力
    • 全角半角区別できると良い

読むヘルプ

12:52

  • :h usr_41.txt "Write a Vim Script"
  • :h usr_43.txt "Using Filetypes"
  • :h template
  • :h text-objects

ArtieArtie2011/07/09 21:19Holy coicnse data batman. Lol!

dqtysgiblddqtysgibld2011/07/10 00:25zU4tK3 <a href="http://nshdewlboxfd.com/">nshdewlboxfd</a>

wtllmzwtllmz2011/07/10 20:36wECkvX , [url=http://gyiwuxbmenag.com/]gyiwuxbmenag[/url], [link=http://phhfsqbdzaop.com/]phhfsqbdzaop[/link], http://ucozougfbihx.com/

ykocuzxykocuzx2011/07/12 22:445kPbKw , [url=http://irbjvsqfwofk.com/]irbjvsqfwofk[/url], [link=http://ugwvlvubgows.com/]ugwvlvubgows[/link], http://jnskwqmcypeb.com/

2008-09-19

CygwinとGVimでvimrcを共有する

| 12:02


結論としては

$HOMEの下に.gvimrc, .vimrcをおく

.vimrcでも_vimrcでもどちらでも読んでくれる*1

$HOMEは :echo $HOMEとするかcmdでチェック。今C:\Document and Settings\username\下に置いている。vimperatorrcもここ。プラグインも共有したいなら...どうするか。runtimeまるごと置いていいんか?とりあえずvimrc共有できて作業に支障がなくなったので保留。

*1CygwinのみならずLinuxも_vimrcを読んでくれるらしい

ka-nachtka-nacht2008/09/19 21:09(GVimはWindowsネイティブ版のgvimのことでしょうか)
Cygwin内でもHOME=/cygdrive/c/Documents and Settings/{username}としているのであれば、プラグインなどは$HOME/vimfiles下に置いて、Cygwinからは$HOME/.vimから$HOME/vimfilesへのシンボリックリンクを張れば良いと思います。
あるいはvimrcで'runtimepath'を調整するのも手。

HashHash2008/09/20 12:00kanaさん++
【エラー: これ以上インクリメントできません】

JhettJhett2011/11/23 13:15Great artcile, thank you again for writing.

opkzavhazopkzavhaz2011/11/24 19:068QUCpw <a href="http://cwbkagkzbadt.com/">cwbkagkzbadt</a>

kesacdekesacde2011/11/24 23:47XVxx7n , [url=http://isupinjvbrme.com/]isupinjvbrme[/url], [link=http://zzkycdwrgwzk.com/]zzkycdwrgwzk[/link], http://maivvwipbhtc.com/

yqmesfityqmesfit2011/12/01 02:24yijCJF <a href="http://vmbegliuanzi.com/">vmbegliuanzi</a>

exnaijzexnaijz2011/12/05 00:06eCM898 , [url=http://mvwgfrhlkgvu.com/]mvwgfrhlkgvu[/url], [link=http://kbtlqkzitnqk.com/]kbtlqkzitnqk[/link], http://ynjtwxqjaiey.com/

2008-09-10

.vimrcを晒す

23:48

!!gitでconfig/.vimrcとして置いた。下は古い情報。

githubとやらを使って常に最新情報を複数のPCで共有したいのだけど、とりあえずここにかもしておく。Vim Scriptを勉強してもっと変態的にしたい。

Windows XP (on Let'sNote R7), GVIM

"----------------------------------------------
"My Settings
" Alignを日本語環境で使用するための設定
"let g:Align_xstrlen = 3
" 実際には、この設定は完璧には機能していないようなので、
" 現段階では設定を追加しなくても良いと思います。 -> コメントアウト

" 文字コードの自動認識{{{ 
if &encoding !=# 'utf-8'
  set encoding=japan
  set fileencoding=japan
endif
if has('iconv')
  let s:enc_euc = 'euc-jp'
  let s:enc_jis = 'iso-2022-jp'
  " iconvがeucJP-msに対応しているかをチェック
  if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'eucjp-ms'
    let s:enc_jis = 'iso-2022-jp-3'
  " iconvがJISX0213に対応しているかをチェック
  elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'euc-jisx0213'
    let s:enc_jis = 'iso-2022-jp-3'
  endif
  " fileencodingsを構築
  if &encoding ==# 'utf-8'
    let s:fileencodings_default = &fileencodings
    let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
    let &fileencodings = &fileencodings .','. s:fileencodings_default
    unlet s:fileencodings_default
  else
    let &fileencodings = &fileencodings .','. s:enc_jis
    set fileencodings+=utf-8,ucs-2le,ucs-2
    if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
      set fileencodings+=cp932
      set fileencodings-=euc-jp
      set fileencodings-=euc-jisx0213
      set fileencodings-=eucjp-ms
      let &encoding = s:enc_euc
      let &fileencoding = s:enc_euc
    else
      let &fileencodings = &fileencodings .','. s:enc_euc
    endif
  endif
  " 定数を処分
  unlet s:enc_euc
  unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
  function! AU_ReCheck_FENC()
    if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0
      let &fileencoding=&encoding
    endif
  endfunction
  autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
  set ambiwidth=double
endif

" フォント設定 from http://memo.xight.org/2007-11-01-2
if has("gui_win32")
    " set guifont=MS_ゴシック:h9:cSHIFTJIS
    set guifont=meiryo:h16:cSHIFTJIS
    " set guifont=メイリオ:h9:cSHIFTJIS
    set printfont=MS_ゴシック:h10:cSHIFTJIS
    " set printfont=メイリオ:h10:cSHIFTJIS
    autocmd GUIEnter * winpos 200 100
    autocmd GUIEnter * winsize 100 50
endif

"}}}


"""""""""""""""""""""""plugin settings""""""""""""""""""""""""""""
" vim-latex
" REQUIRED. This makes vim invoke latex-suite when you open a tex file.
filetype plugin on

" IMPORTANT: win32 users will need to have 'shellslash' set so that latex
" can be called correctly.
" \ -> /
set shellslash

" IMPORTANT: grep will sometimes skip displaying the file name if you
" search in a singe file. This will confuse latex-suite. Set your grep
" program to alway generate a file-name.
set grepprg=grep\ -nH\ $*

" OPTIONAL: This enables automatic indentation as you type.
filetype indent on



" set my options
set dictionary=$VIM/dict/java14.dict
set cursorline
set tabstop=4
set shiftwidth=4
set autoindent
"set backupdir=$VIM/tmp
set noswapfile
set incsearch
set nowrapscan




" autocomplete (, [, {, ", '
" たまに邪魔. 
inoremap () ()<LEFT>
inoremap <> <><LEFT>
inoremap {} {}<LEFT>
inoremap [] []<LEFT>
inoremap '' ''<LEFT>
inoremap "" ""<LEFT>

" hjkl move in insert mode
" inoremap <C-j> <DOWN>
" inoremap <C-k> <UP>
" inoremap <C-l> <RIGHT>
" inoremap <C-h> <LEFT>


" When searching, always move the cursor to center of window
nnoremap n nzz
nnoremap N Nzz
nnoremap * *zz
nnoremap # #zz
nnoremap g* g*zz
nnoremap g# g#zz


" <Esc>
inoremap <C-@> <Esc>
vnoremap <C-@> <Esc>
cnoremap <C-@> <Esc>

nnoremap <C-Space> <Esc>
inoremap <C-Space> <Esc>
vnoremap <C-Space> <Esc>
cnoremap <C-Space> <Esc>


" window間の移動、拡大縮小
nnoremap <space>j <C-W>j
nnoremap <space>k <C-W>k
nnoremap <space>h <C-W>h
nnoremap <space>l <C-W>l
nnoremap <space>+ <C-W>5+
nnoremap <space>- <C-W>5-
nnoremap <space>> <C-W>3>
nnoremap <space>< <C-W>3<

"Ruby
nnoremap <space>r :<C-u>!ruby %<CR>


" 矢印キーでバッファ操作
"nnoremap <DOWN>  :<C-u>bdelete<CR>
nnoremap <UP>    :<C-u>ls<CR>
nnoremap <RIGHT> :<C-u>bnext<CR>
nnoremap <LEFT>  :<C-u>bprevious<CR>


" Tab。C-tの避難:戻る挙動はC-[に割り当てる(↑)
nnoremap <C-t> :tabedit
nnoremap <C-Tab> :tabNext<CR>
nnoremap <C-S-Tab> :tabPrevious<CR>
nnoremap <C-[> <C-t>

" ujihisa流、保存と終了
nnoremap <space>w :<C-u>write<CR>
nnoremap <space>q :<C-u>quit<CR>

" 検索ハイライトを消す
nnoremap <ESC><ESC> :^Unohlsearch<CR>
" 空白行を追加する操作を1ストロークでやりたい
nnoremap <C-o> o<ESC>k

" 移動は常に表示ラインでの移動。
noremap j gj
noremap k gk
noremap 0 g0
noremap $ g$

" kana1さんの設定から
let mapleader=','
inoremap <Leader>df <C-R>=strftime('%Y-%m-%dT%H:%M:%S+09:00')<CR>
inoremap <Leader>dd <C-R>=strftime('%Y-%m-%d')<CR>
inoremap <Leader>dt <C-R>=strftime('%H:%M:%S')<CR>
" Copy/Paste via clipboard
vnoremap <Leader>cc "+y
vnoremap <Leader>cx "+y<Esc>gvd
nnoremap <Leader>cp "+p


" 文字数カウント
" vnoremap <F1> :s/./&/g<CR> " うまくいかない



" 自動補完 from 
" Vimの自動補完を大文字と数字にも対応させる - Hatena::Diary::Ubuntu 
" <http://d.hatena.ne.jp/Ubuntu/20080124/1201139267>
set completeopt=menuone,preview
function! CompleteWithoutInsert()
	return "\<C-n>\<C-r>=pumvisible() ? \"\\<C-P>\\<C-N>\\<C-P>\": \"\"\<CR>"
endfunction
inoremap <expr> <C-n> pumvisible() ? "\<C-n>" : CompleteWithoutInsert()
let letter = "a"
while letter <=# "z"
	execute 'inoremap <expr> ' letter ' "' . letter . '" . (pumvisible() ? "" : CompleteWithoutInsert())'
	let letter = nr2char(char2nr(letter) + 1)
endwhile
let letter = "A"
while letter <=# "Z"
	execute 'inoremap <expr> ' letter ' "' . letter . '" . (pumvisible() ? "" : CompleteWithoutInsert())'
	let letter = nr2char(char2nr(letter) + 1)
endwhile
let letter = "0"
while letter <=# "9"
	execute 'inoremap <expr> ' letter ' "' . letter . '" . (pumvisible() ? "" : CompleteWithoutInsert())'
	let letter = nr2char(char2nr(letter) + 1)
endwhile
inoremap <expr> <CR> pumvisible() ? "\<C-Y>\<CR>" : "\<CR>"
set lazyredraw

AundreAundre2011/07/11 01:45This aritcle went ahead and made my day.

leyvoknleyvokn2011/07/11 17:45N7jf6Y <a href="http://munjisvihtnl.com/">munjisvihtnl</a>

jybycmeljybycmel2011/07/11 22:20UhVLc6 , [url=http://povinqmpovbw.com/]povinqmpovbw[/url], [link=http://fskujbsukiex.com/]fskujbsukiex[/link], http://luonedkfzbkz.com/

sxjhvehaososxjhvehaoso2011/07/13 18:09D9SnpC <a href="http://ghktmkrasfpx.com/">ghktmkrasfpx</a>

queqflpmqueqflpm2011/07/14 00:08QAjKa2 , [url=http://tjgyqhqfport.com/]tjgyqhqfport[/url], [link=http://mcipduubqxeq.com/]mcipduubqxeq[/link], http://rqqeuxlanftn.com/

TaimiTaimi2016/04/30 08:01That's a crcjekrcaak answer to an interesting question

LynellLynell2016/05/03 13:19I like the valuable info you supply in your articles. <a href="http://kigbhhhrym.com">I&271#8;ll</a> bookmark your weblog and test again here regularly. I am quite sure I will be told a lot of new stuff right right here! Best of luck for the following!

2008-09-08

VimM#2のメモ(自分用): 第一部 plugin使おう

| 23:43

ブログは最近リアル知人が見ることが多くなったため、本業ではないイベントはこちらにおこうかと。


kana, maedana, ukstudio, yoshuki, ujihisa

pluginとは?

実態はvim script

1.global

起動されるとロードされる。

2.filetype

Vim: Filetype pluginを極める- while (“im automaton”);


3.compiler

quickfixで利用される。(?)


How to?
  • doc/plugin.txt(ドキュメント。:helpで読める)
  • plugin/plugin.vim(本体)
  • インストール方法
    • ファイルをコピーするだけ。
    • :set runtimepath # :help runtimepath

~/.vim(ディレクトリ)

# この指定は.vimrcだっけ?


実際の使い方
  • Exコマンド
    • ex :: Edit :writeなどのこと
    • プラグ印によっては独自にコマンド提供

  • keymapping

キーシーケンスを別のキーシーケンスに変更

Vim: Key mappingを極める- while (“im automaton”);

  • e.g. surround.vim
    • cs'" , ysi})

  • nmap s <Plug>Tsurround

かんすうとは
  • exコマンドの羅列をまとめたもの
  • 値を返す。(Exコマンドは返せない)
  • e.g. smartchr
    • 設定しておくと、=押すたびに' = ' , ' == ', '='を順に。*1


はじめてのcompiler plugin

maedanaさん

派遣プログラマ。フリーを目指す

SKIPって社内向けSNSつくってる.今年6月に

  • vimではテキストを解析して結果を返すものはcompilerとみなしていい(?)

特定のテキストのコンパイルサイクルを:makeprg, :errorformat

compilerを使うことで
makeprgと:errorformatを設定
comp,
make, :cn, :cp, :clist, :copen

:help usr_30

  • compiler pluginでvimのなかだけで実行でき、エラー行に飛ぶことが出来る。
  • quickfix
    • :makeはQuickFixコマンドのひとつ
    • :help QuickFixCmdPre
    • 標準のcompilerプラグイン

ukstudio の rails.vim

RAWHIDE, vim暦1.5年

まず:Rails demo

Rscript generate scaffold string
title

:Rlog, Rak, Rserverなどなど

Aとか
Rで関係するファイルが開く。関係ファイルは定義されている。
Rmodel,
Rviewなどで開ける。候補がM, V, Cで選べる

:Rabbrev。Rails独特の表現に略語を割り当てている

:RSpecに対応させる #今対応してない

id;secondlifeさんがバッチ

validates_hogehogeは便利。


yoshiyukiさん"project.vim"

フリーエンジニア

RubyPHP, Vim1年ちょっと。

no title中の人

vimpluginの更新情報を取得。vim.orgから絞込み

Demo:

  1. treeにディレクトリを登録
    • \c
  2. ファイルを開く
    • enter
  3. tree情報更新 # cat > aaa.txt
    • \r
  4. 複数ファイルを同時に開く
  5. treeファイルをgrep
    • \g

ツリーはテキストファイルになっており、追加してファイルを作成とか。

:h project-mapping

filter="*"など。"**/*"とか。

翌日は:Projectを打つだけで前回のプロジェクト。



ujihisa

中二vim。まともにvim触ったのは今年から*2

Ruby, Haskell, Vimscript

来年からCS.Stanford.Edu

Vim勉強会2,5,8月。

Ctrlキーを叩くとき。薬指第一関節より小指が短ければ。


quickrun

<space>rで編集中rubyファイル実行

<space>w :<C-u>write<Cr>

<space>q :<C-u>quit<Cr>

metarw(めたりら)

ファイルでないものをファイルであるかのように扱うようなプラグインを書くためのプラグイン

fakepath

edit,
writeの挙動を上書き

e.g. :e git:master:src/ui.c

metarw-git, metarw-nowaとか。

git/dotfiles

VimM#2のメモ(自分用):第二部: pluginを作ろう

| 23:43

kana, ujihisa

(ここは試験的にマインドマップでまとめた)

f:id:Hash:20080908235438j:image:w200f:id:Hash:20080908235439j:image:w200

f:id:Hash:20080908235440j:image:w200f:id:Hash:20080908235441j:image:w200

nnoremap <Plug>Hello :call Hello()<Return>

nmap <Leader>h <Plug>Hello

<Plug>Hello *<Plug>Hello*

書きながら横にリンク張っておく

カスタマイズ

:nmap ,

callは範囲指定を取る

<C-u>は、間違って押してる内容をリセットする意味がある。カウント指定を無意味に。

:help key-mapping


setfiletype ifb

vimruby binding

ドキュメント。:h runtimepath


おまけ: Hashthonのメモ

  • YRShow
  • i_CTRL-o
  • au FileType changelog <buffer> <Leader>......
    • 開いたときのファイルタイプ限定
  • insertmodeで
    • autocmdの次にC-x C-V
    • C-x C-fファイル補完
    • C-x C-lライン補完

*1:おもろげ

*2:極めるのはええ

ka-nachtka-nacht2008/09/09 02:39マインドマップのtypoっぽいの:

×Vim 7.2新機能タブ
○Vim 7.0

×マルチセットは鬼門
○マルチスレッド

HashHash2008/09/10 19:08おお、ありがとうございます><
マインドマップ本体の方は直しておきます。

LetticeLettice2011/07/09 15:43Wow, this is in every resepct what I needed to know.

tzcrogshmtzcrogshm2011/07/10 00:15U7Ouj1 <a href="http://vxfnxbohiwjr.com/">vxfnxbohiwjr</a>

xzceaqyxzceaqy2011/07/10 20:53iwYlYj , [url=http://aypzosshvgqw.com/]aypzosshvgqw[/url], [link=http://wtycrbnxcfvt.com/]wtycrbnxcfvt[/link], http://hzqjwuligrzl.com/

qhcsiaqhcsia2011/07/11 20:07NIYiUc <a href="http://fdnzybllpbwb.com/">fdnzybllpbwb</a>

tyfkujntyfkujn2011/07/12 22:17Jp8z7n , [url=http://banfopefshot.com/]banfopefshot[/url], [link=http://ydhjjzvibycz.com/]ydhjjzvibycz[/link], http://qkitqzjvjfjy.com/

NeniNeni2013/05/03 11:58Thanks for tkanig the time to post. It's lifted the level of debate

kcvrqezuzjkcvrqezuzj2013/05/05 14:32AOdJ81 , [url=http://usaavpftotea.com/]usaavpftotea[/url], [link=http://gpnlxfwtuwhl.com/]gpnlxfwtuwhl[/link], http://ycncumxhirjn.com/