Hatena::Groupvim

bless {category => 'vim'}, shift

2010-03-05i_CTRL-aとi_CTRL-eを改造してみる このエントリーのブックマークコメント

readlineのおかげでEmacs likeな移動に慣れてしまったので

i_CTRL-aとi_CTRL-eをもっと使いやすく改造してみました。

具体的に言うと<C-a>, <C-e>で

  • 0で移動する位置
  • ^で移動する位置
  • $で移動する位置

に前後移動できるようにしました。

" go to head, or tail. {{{
inoremap <expr> <C-a> <SID>goto_head()
func! s:goto_head() "{{{
    let col = col('.')
    let lnum = line('.')
    let tilde_col = match(getline(lnum), '\S') + 1

    if col > tilde_col
        " go to ^ pos.
        return "\<C-o>^"
    else
        " go to head.
        return "\<Home>"
    endif
endfunc "}}}

inoremap <expr> <C-e> <SID>goto_tail()
func! s:goto_tail() "{{{
    let col = col('.')
    let lnum = line('.')
    let tilde_col = match(getline(lnum), '\S') + 1

    if col < tilde_col
        " go to ^ pos.
        return "\<C-o>^"
    else
        " go to tail.
        return "\<End>"
    endif
endfunc "}}}
" }}}

DeliaDelia2011/11/23 12:27Stay inofrmaitve, San Diego, yeah boy!

ehosgxnaehosgxna2011/11/24 19:07KR7Ish <a href="http://bunjvyplthzr.com/">bunjvyplthzr</a>

tpbetthtpbetth2011/11/25 00:44l3VNCD , [url=http://sbpgxwkchtmm.com/]sbpgxwkchtmm[/url], [link=http://olgxwzdshzte.com/]olgxwzdshzte[/link], http://hzoqsqxuhdkj.com/

hngwlbyylhngwlbyyl2011/12/01 02:28tuknmQ <a href="http://ueuoslzhdlrg.com/">ueuoslzhdlrg</a>

mqmwzmmqmwzm2011/12/05 00:548spXwW , [url=http://rffimsiuqrni.com/]rffimsiuqrni[/url], [link=http://gyrryyehrkrr.com/]gyrryyehrkrr[/link], http://gfmpiyexrxnk.com/

トラックバック - http://vim.g.hatena.ne.jp/tyru/20100305

2010-03-04Tabを動かす このエントリーのブックマークコメント

Vimperatorの話なのですが、

Vimperatorではこのようにすることで<Left>、<Right>でタブを動かせます。

nnoremap <Right> :tabmove! +1<CR>
nnoremap <Left>  :tabmove! -1<CR>

Vimでもやってみました。

nnoremap <silent> <Left>    :<C-u>execute 'tabmove' tabpagenr() - 2<CR>
nnoremap <silent> <Right>   :<C-u>execute 'tabmove' tabpagenr()<CR>

ついでにタブを最後に持ってくる設定

nnoremap <silent> <S-Left>  :<C-u>execute 'tabmove' 0<CR>
nnoremap <silent> <S-Right> :<C-u>execute 'tabmove' tabpagenr('$')<CR>

<S-Left>と<S-Right>はgVimでしか使えないマッピングなので、

端末版を使ってる人は好きなマッピングに変えてください。

mattnmattn2010/03/04 01:19nnoremap <silent> <s-left> gT
nnoremap <silent> <s-right> gt

でよいのでは?

tyrutyru2010/03/04 13:13> id:mattn
Tabを移動ってそういうことじゃないです。
正しく言うと「Tabを動かす」です。
日本語まぎらわしかったですね...

tyrutyru2010/03/04 15:54「Tabを動かす」に直しました。

AspenAspen2012/03/26 04:00Wow! Great to find a post knciokng my socks off!

rebwaorebwao2012/03/26 14:56mbx7px <a href="http://hiqltaofzxfu.com/">hiqltaofzxfu</a>

ruulanuyjtruulanuyjt2012/03/27 18:03mmQ0VC <a href="http://vsocywgahuhu.com/">vsocywgahuhu</a>

xpmbgmjvonxpmbgmjvon2012/03/28 18:28xcXmO8 , [url=http://fszthmkjavzg.com/]fszthmkjavzg[/url], [link=http://tldgmpbrkhxi.com/]tldgmpbrkhxi[/link], http://rclvlfzghkoy.com/

トラックバック - http://vim.g.hatena.ne.jp/tyru/20100304

2010-02-26colorschemeを選ぶミニバッファ このエントリーのブックマークコメント

vim colorscheme selector ? GitHubが素晴らしかったのでforkしてみました。


追記:

なんだかgithubのシンタックスハイライトのせいでひどく見にくいのでここに書いておく。

fun! s:SelectColorS()
30vnew

let files = split(globpath(&rtp, 'colors/*.vim'), "\n")
for idx in range(0, len(files) - 1)
  let file = files[idx]
  let name = matchstr(file , '\w\+\(\.vim\)\@=')
  call setline(idx + 1, name)
endfor

file ColorSchemeSelector
setlocal bufhidden=wipe
setlocal buftype=nofile
setlocal nonu
setlocal nomodifiable
setlocal cursorline
nmap <buffer>  <Enter>  :<C-u>exec 'colors' getline('.')<CR>
nmap <buffer>  q        :<C-u>close<CR>
endf
com! SelectColorS   :cal s:SelectColorS()

JoyelleJoyelle2011/11/23 17:30Finlaly! This is just what I was looking for.

zhrhzugjyzhrhzugjy2011/11/24 19:35fIlLz1 <a href="http://qkkmcepdxwur.com/">qkkmcepdxwur</a>

ochaprnochaprn2011/11/25 00:50uWFcfd , [url=http://wvehlnmrctaq.com/]wvehlnmrctaq[/url], [link=http://ygeuyocugjgr.com/]ygeuyocugjgr[/link], http://udnacwonqhnk.com/

izuiqelntizuiqelnt2011/12/01 02:59IQyV3E <a href="http://zprijwrgwdqz.com/">zprijwrgwdqz</a>

gmxomzxlzaqgmxomzxlzaq2011/12/05 01:35O5N24z , [url=http://ainyraxtmawx.com/]ainyraxtmawx[/url], [link=http://crcpgsrazhuo.com/]crcpgsrazhuo[/link], http://hnekrxyzscwp.com/

トラックバック - http://vim.g.hatena.ne.jp/tyru/20100226

2010-02-15最近作った小物プラグイン このエントリーのブックマークコメント

最近2つ小さなプラグインを作りました。

その2つのプラグインを紹介したいと思います。

追記:

ヘルプをそれぞれ更新した。

特にstickykey.vimの方はMacのコマンドキー*1について書き忘れてたので修正。


追記:

またヘルプを更新しました。

ここにあるヘルプはもう古いのでgithubの方を当たってください。


stickykey.vim

GitHub - tyru/stickykey.vim: Let meta keys get sticky

これはメタキーの入力を、メタキーを使わずにエミュレートするものです。

まだインサートモード(i), コマンドラインモード(c)、言語モード(l)でのみ動作します。


追記:

元ネタはShougoさんのgistから拝借しました。

Sticky shift in vim ? GitHub

(貼り忘れてた...申し訳ないです)


以下:helpからの引用です。

==============================================================================
概要					*stickykey-introduction*

このプラグインはスティッキーキーを実現するためのものです。
スティッキーキーとは、例えば<C-o>を押す場合に、
CtrlキーとOのキーを一緒に押すのではなく
「;o」と打つことで<C-o>の入力をエミュレートするものです。
(<Plug>(stickykey-ctrl)に「;」が割り当てられていた場合)

また例えばもしあなたがscreenを使っている場合、
screenのホットキーを入力するのはちょっと面倒です。
でもこのプラグインをインストールしていれば速く、
かつ確実にキー入力をVimに送ることができます。

なお、この文書では、キー入力をエミュレートするスティッキーキーのことを指す
場合には「スティッキーキー」と、このプラグイン自体のことを指す場合には
「stickykey」と表記します。


==============================================================================
インターフェース					*stickykey-interface*

==============================================================================
マッピング							*stickykey-mappings*

<Plug>(stickykey-ctrl)
<Plug>(stickykey-ctrl-remap)
	Ctrlキー用のスティッキーキーです。
	<Plug>(stickykey-ctrl-remap)は入力を再帰的に展開します。

<Plug>(stickykey-alt)
<Plug>(stickykey-alt-remap)
	Altキー用のスティッキーキーです。
	<Plug>(stickykey-alt-remap)は入力を再帰的に展開します。

<Plug>(stickykey-shift)
<Plug>(stickykey-shift-remap)
	Shiftキー用のスティッキーキーです。
	<Plug>(stickykey-shift-remap)は入力を再帰的に展開します。

<Plug>(stickykey-command)
<Plug>(stickykey-command-remap)
	MacのCommandキー用のスティッキーキーです。|<D-|
	<Plug>(stickykey-command-remap)は入力を再帰的に展開します。


==============================================================================
変数						*stickykey-variables*

g:stickykey_when_no_escaped_key			string (default: "thru")
	この変数はstickykeyがメタキーによってエスケープされた
	入力を見つけられなかった時の動作を定義するものです。
	例えば、<Plug>(stickykey-ctrl)が実行された後に
	<C-o>などのメタキーで修飾されたキーを受け取った場合などです。
	この変数のとる値は次のいずれかです。
		"nop":
			何も入力が無かったかの様に振る舞います。
		"thru":
			キーをメタキーで修飾せず実行します。
		"again":
			受け取ったキー入力を捨ててもう一回入力を受け付けます。

command-buffer.vim

GitHub - tyru/command-buffer.vim: small buffer for command-line ## THIS PLUGIN IS DEPRECATED. USE CMDWIN. (:help cmdwin)

以下:helpからの(ry

==============================================================================
概要					*cmdbuf-introduction*

コマンドラインはインサートモードほどは操作が自由ではありません。
omni補完のような強力な補完はありませんし、
何より<Esc>を押せばコマンドラインから離れてしまいます。
そこで考え方を変えて、編集しずらいコマンドラインで操作するのではなく、
一旦バッファでコマンドを組み立てて実行すればよいのです。
このプラグインはその一時バッファとそのためのインターフェースを提供します。


==============================================================================
インターフェース					*cmdbuf-interface*

==============================================================================
マッピング							*cmdbuf-default-mappings*

	nmap <buffer> <Esc> <Plug>(cmdbuf-close)

	nmap <buffer> <CR>      <Plug>(cmdbuf-execute-:)
	imap <buffer> <CR>      <Plug>(cmdbuf-execute-:)
	nmap <buffer> <C-CR>    <Plug>(cmdbuf-execute-/)
	imap <buffer> <C-CR>    <Plug>(cmdbuf-execute-/)
	nmap <buffer> <S-CR>    <Plug>(cmdbuf-execute-?)
	imap <buffer> <S-CR>    <Plug>(cmdbuf-execute-?)

	nmap <buffer> <C-g>:    <Plug>(cmdbuf-paste-to-cmdline-:)
	imap <buffer> <C-g>:    <Plug>(cmdbuf-paste-to-cmdline-:)
	nmap <buffer> <C-g>/    <Plug>(cmdbuf-paste-to-cmdline-/)
	imap <buffer> <C-g>/    <Plug>(cmdbuf-paste-to-cmdline-/)
	nmap <buffer> <C-g>?    <Plug>(cmdbuf-paste-to-cmdline-?)
	imap <buffer> <C-g>?    <Plug>(cmdbuf-paste-to-cmdline-?)


									*cmdbuf-customize-mappings*
これらのマッピングはデフォルトのものであり、
ユーザは自由に変えることができます。
変える場合は次のようにします。
<buffer>を付けないと他のバッファでも
マッピングされてしまうので気をつけてください。

	autocmd BufEnter __command_buffer__ call s:cmdbuf_mappings()

	func! s:cmdbuf_mappings()
		imap <buffer> <Esc> <Plug>(cmdbuf-close)
	endfunc

==============================================================================
<Plug>付きのマッピング				*cmdbuf-plug-mappings*

右の文字はモードを表しています。


<Plug>(cmdbuf-open)			(n)
	バッファを開きます。

<Plug>(cmdbuf-close)			(ni)
	バッファを閉じます。

<Plug>(cmdbuf-execute-:)		(ni)
<Plug>(cmdbuf-execute-/)
<Plug>(cmdbuf-execute-?)
	バッファの文字列をコマンドラインに挿入し、エンターを押します。

	最後の文字はコマンドラインのタイプを表していて、
		:はexコマンド
		/は前方検索コマンド
		?は後方検索コマンド
	をそれぞれ表しています。

<Plug>(cmdbuf-paste-to-cmdline-:)		(ni)
<Plug>(cmdbuf-paste-to-cmdline-/)
<Plug>(cmdbuf-paste-to-cmdline-?)
	バッファの文字列をコマンドラインに挿入します。
	エンターは押されず、各行の間にはg:cmdbuf_multiline_separator
	が挟まれて挿入されます。

<Plug>(cmdbuf-open-from-cmdline)		(c)
	コマンドラインの現在の文字列をバッファに挿入します。


==============================================================================
変数						*cmdbuf-variables*

g:cmdbuf_no_default_mappings				*g:cmdbuf_no_default_mappings*
									(デフォルト: 0)
	もしtrueならデフォルトのマッピングを用意しない。
	*cmdbuf-mappings* 参照。

g:cmdbuf_no_default_autocmd					*g:cmdbuf_no_default_autocmd*
									(デフォルト: 0)
	もしtrueならデフォルトのautocmd(BufEnter)を用意しない。
	*cmdbuf-autocmd* 参照。

g:cmdbuf_buffer_size						*g:cmdbuf_buffer_size*
									(デフォルト: 1)
	g:cmdbuf_open_commandの先頭に付けられる数値です。

g:cmdbuf_open_command						*g:cmdbuf_open_command*
									(デフォルト: "new")
	バッファを開くコマンドです。

g:cmdbuf_multiline_separator				*g:cmdbuf_multiline_separator*
									(デフォルト: " | ")
	<Plug>(cmdbuf-paste-to-cmdline-...)系のマッピングが
	複数行に渡る時にこの文字列が各行の間に挟まれて
	コマンドラインに挿入されます。


まとめ

どちらも数時間で作り上げたものですが、とても有用です。

しばらくしたらwww.vim.orgにもアップロードしたいと思います。

*1::help <D-

JennahJennah2011/07/08 00:47Big help, big help. And supertlaive news of course.

ivggpbvivggpbv2011/07/08 16:338ldIo6 <a href="http://vnibrkwmewii.com/">vnibrkwmewii</a>

ozuspsozusps2011/07/09 21:36MKioKW , [url=http://iynavxcxuhuy.com/]iynavxcxuhuy[/url], [link=http://rbivnzpcrfcl.com/]rbivnzpcrfcl[/link], http://awfaeyjthyan.com/

tyrutyru2011/07/09 21:37thanks for spamming!!!

sfnxyqwjwxsfnxyqwjwx2011/07/11 01:31Sm7XKd <a href="http://ebzequycfzww.com/">ebzequycfzww</a>

euvtjvatezfeuvtjvatezf2011/07/11 23:29oZbUTI , [url=http://stvtwxpvzkka.com/]stvtwxpvzkka[/url], [link=http://ytbzqhuzyqwk.com/]ytbzqhuzyqwk[/link], http://qftzoybqdpag.com/

SantaSanta2013/03/02 17:18What's it take to bcemoe a sublime expounder of prose like yourself?

トラックバック - http://vim.g.hatena.ne.jp/tyru/20100215

2010-02-09submode.vim + winmove.vimでgVimのウインドウをjkhlで動かす このエントリーのブックマークコメント

ふと思いついて、winmove.vim

  • <Plug>(winmove-up)
  • <Plug>(winmove-right)
  • <Plug>(winmove-down)
  • <Plug>(winmove-left)

のようなマッピングを追加してみました。

そしてsubmode.vimインストールし、.vimrcにこのように書きます。

" マッピングさせないようにする
let g:wm_move_down  = ''
let g:wm_move_up    = ''
let g:wm_move_left  = ''
let g:wm_move_right = ''

call submode#enter_with('move-window', 'n', '', ',w', '<Nop>')
call submode#leave_with('move-window', 'n', '', '<Esc>')
call submode#map('move-window', 'n', 'r', 'j', '<Plug>(winmove-down)')
call submode#map('move-window', 'n', 'r', 'k', '<Plug>(winmove-up)')
call submode#map('move-window', 'n', 'r', 'h', '<Plug>(winmove-left)')
call submode#map('move-window', 'n', 'r', 'l', '<Plug>(winmove-right)')

これで「,w」でsubmodeに入ると、jkhlでgVimのウインドウの移動ができます。id:ka-nacht++


ダウンロードの注意点

たった今コミットしたので最新版じゃないと動きません。

なのでwww.vim.orgからではなく、githubから最新版をダウンロードするかgit cloneしてください。

AnitAnit2012/06/27 21:13Hey, good to find soemone who agrees with me. GMTA.

pcysnvccnpcysnvccn2012/06/28 13:16XVis43 <a href="http://kxakibkwldkr.com/">kxakibkwldkr</a>

gthpwwvuqdgthpwwvuqd2012/06/28 18:30QqBBGr , [url=http://iuocslwxlnps.com/]iuocslwxlnps[/url], [link=http://wdmhubmifkzd.com/]wdmhubmifkzd[/link], http://mggjsddgvsvj.com/

wtkazidwtkazid2012/06/29 07:54qnqAVK <a href="http://nyghasqdcsmw.com/">nyghasqdcsmw</a>

ntjmoypoyntjmoypoy2012/07/01 05:05vZUhYv , [url=http://svivtkxgbgna.com/]svivtkxgbgna[/url], [link=http://oghhfcjyhjjd.com/]oghhfcjyhjjd[/link], http://dlovmqpfjggu.com/

トラックバック - http://vim.g.hatena.ne.jp/tyru/20100209