Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all 5720 articles
Browse latest View live

最近ホットな Vim Plugin 3つ

$
0
0

最近ホットな Vim Plugin を3つ紹介します。どれもカッコいいプラグインですので、気に入ったら是非使ってみてください。

vim-over

vim-overの概要

vim-overは、EmacsのEvilのような一括置換ができるプラグインです。

どういうことかというと、置換する対象文字列がハイライトされ、さらに、その横に変更予定の文字列を表示するという、見た目がすごくカッコいい置換なのです。

Vimでは、:%s/foo/bar/gとしても、ハイライトされませんし、変更予定の文字列も表示されません。

たしかに、1つずつ確認するには、:%s/foo/bar/gcでできますが、どうも味気なく、地味なのです。

しかし、vim-overを使うと、そんな地味さも吹っ飛びます。以下の画像を見てください。画像では、一括置換を実行していますが、視覚的に分かりやすいし、カッコいい置換になっています。

%s/command/testpaste

vim-overのインストール

プラグイン管理をしている場合は、以下のようにします。プラグイン管理というのは、具体的には、VundleNeoBundleを使った方法を言います。

~/.vimrc
NeoBundle 'osyo-manga/vim-over'

:so $MYVIMRC | NeoBundleInstall

プラグイン管理していない場合は、プラグインフォルダに当該プラグインをダウンロードします。

$ mkdir -p ~/.vim/plugin/

$ cd !$ && git clone https://github.com/osyo-manga/vim-over.git

vim-overの使い方

vim-overの使い方は簡単です。基本的には、コマンドが設定されていますので、そちらで起動します。

:OverCommandLine

キーマップで起動したい方は、~/.vimrc設定ファイルに以下を追記します。

~/.vimrc
nnoremap <silent> <Leader>m :OverCommandLine<CR>%s/

これで、,+mを押すと、vim-overを起動できるようになりました。ちなみに、,<Leader>を意味します。キーボードによって異なりますので注意が必要です。

コマンドラインスペースでの操作方法は以下のとおりになっています。

キー効果
< Up > or < C-p >1つ前のコマンド履歴を挿入
< Down > or < C-n >1つ後のコマンド履歴を挿入
< C-r >< C-f >カーソル下のファイル名を挿入
< C-r >< C-w >カーソル下の word を挿入
< C-r >< C-r >カーソル下の WORD を挿入
< C-r >{0-9a-z"%#:-=.*}番号/名前付きレジスタの挿入

初期のvim-overは、割と見た目重視だったような気がするのですが、最近、本気で便利になってきました。

また、コマンドラインのキーマッピングする機能を追加されています。

~/.vimrc
" OverCommandLineNoremap {lhs} {rhs}
" {lhs} を {rhs} のキーとして割り当てる
" ここで設定する事ができるキーは1文字、
" もしくは修飾キー+1文字のみ割り当てることができます
OverCommandLineNoremap <A-b> <C-b>
OverCommandLineNoremap <A-f> <C-f>

yankround.vim

yankround.vimの概要

副作用の少ないYankRing.vimを目指して作られたプラグインです。

YankRing.vimは他のプラグインや設定と干渉してしまう弊害があるので、好みが分かれるプラグインでした。

しかし、その機能が魅力的故に、我慢して使っている人も多かったみたいです。

そこで登場したのが、yankround.vimです。

YankRing.vimとほぼ同じようなことが実現できて、かつ、弊害が少ないです。

yankround.vimのインストール

~/.vimrc
NeoBundle 'LeafCage/yankround.vim'
NeoBundle 'kien/ctrlp.vim'

:so $MYVIMRC | NeoBundleInstall

プラグイン管理していない場合は、プラグインフォルダに当該プラグインをダウンロードします。

$ mkdir -p ~/.vim/plugin/

$ cd !$ && git clone https://github.com/LeafCage/yankround.vim.git

yankround.vimの使い方

~/.vimrc
" yankround.vim {{{
"" キーマップ
nmap p <Plug>(yankround-p)
nmap P <Plug>(yankround-P)
nmap <C-p> <Plug>(yankround-prev)
nmap <C-n> <Plug>(yankround-next)
"" 履歴取得数
let g:yankround_max_history = 50
""履歴一覧(kien/ctrlp.vim)
nnoremap <silent>g<C-p> :<C-u>CtrlPYankRound<CR>
}}}

基本的には、ペースト直後にC-nを押して、履歴を辿れます。

そして、,+g+C-pを押して、履歴一覧をctrlp.vimで表示し、選択することが出来ます。

wauto.vim

wauto.vimの概要

wauto.vimは、簡単には、オートセーブのプラグインです。

現在行が変更されると、ノーマルモードに移行した時、ファイルが自動で保存されるようになります。

wauto.vimのインストール

~/.vimrc
NeoBundle 'syui/wauto.vim'

:so $MYVIMRC | NeoBundleInstall

プラグイン管理していない場合は、プラグインフォルダに当該プラグインをダウンロードします。

$ mkdir -p ~/.vim/plugin/

$ cd !$ && git clone https://github.com/syui/wauto.vim.git

wauto.vimの使い方

~/.vimrc
nmap <Leader>s  <Plug>(AutoWriteStart)
nmap <Leader>ss <Plug>(AutoWriteStop)

キーでオートセーブの有効無効を設定します。

キー効果
< Leader >+sオートセーブを有効にする
< Leader >+ssオートセーブを無効にする

vimrc を githubで管理したい

$
0
0

私はWindows7 で Vim を使ってます。主にgvim
最近windows を 再インストールする機会がありまして
環境も新たにしたいなぁと思いまして、
そういえば、githubでdotfilesを管理してる人がいたなぁ
ということで、やってみました。

Git インストール

http://holypp.hatenablog.com/entry/20110321/1300722152

http://ngyuki.hatenablog.com/entry/2013/01/01/222816

ここらへんを参考にインストール。
私は ssh に putty を使っているので、plink.exeを使う設定に。

vimrc を github に

http://holypp.hatenablog.com/entry/20110515/1305443997

http://holypp.hatenablog.com/entry/20110516/1305552171

http://teppeis.hatenablog.com/entry/20080705/1215262928

ここらへんを参考に設定

The server's host key is not cached in the registry なるエラーが出てpushできない

dotfiles へのコミットで認証エラーが続出してなかなかpushができない事態に、そのメモを以下に書きます。

http://blog.recyclebin.jp/archives/2641

ここらへんを参考に解決。putty で一度github.comにログインしないといけなかったみたいです。

FATAL ERROR: Disconnected: No supported authentication methods available (server sent: publickey) エラーがでて push できない

http://blog.shinichy.com/2012/05/cygwingitgithubssh.html

ここらへんを参考に解決。pageant.exe を起動して、タスクトレイに表示された pageant から Add Key して 秘密鍵を追加してやる必要があるみたいでした。

reject されて push できない

http://d.hatena.ne.jp/snaka72/20100602/

ここらへんを参考に解決。なんか変に修正してしまってたみたいです。


ということで、同じ過ちを起こさないために主に私用の備忘録として残しておきますが、皆さんのお役にも立つ情報であることをお祈りしております。

VimでのMarkdownプレビューを快適にする方法を考えてみた

$
0
0

VimでMarkdown、HTMLなどをプレビューする方法は、検索すれば、たくさんヒットします。

しかし、どれも個人的にはしっくり来なかったので、VimでMarkdownプレビューする方法を考えてみました。参考になれば幸いです。

今回、cscroll.vimをちょっとだけ改良しました。

Markdownプレビュー

previm

今回は、previmというプラグインを使ったプレビューをしてみたいと思います。

このプラグインは、依存関係を極力減らすというコンセプトのプラグインです。

しかし、previmは、現在開いているファイルをブラウザでプレビューするのですが、スクロールするには、ブラウザにフォーカスを移動しなければならず、ちょっと不便でした。

したがって、ここでは、previm以外に、いくつかのプラグインを組み合わせることで、Markdown プレビューがより快適になる方法を模索していきたいと思います。


[Vimでカーソル移動すると、ブラウザのスクロールが連動している様子 *ただし、スクロール幅は連動しません]

特殊事情

なお、今回の方法は、AppleScriptを使用したプラグインを利用しますので、Macユーザー限定となってしまいます。

インストール

NeoBundle 'vim-scripts/vim-auto-save'
NeoBundle 'kannokanno/previm'
NeoBundle 'syui/cscroll.vim'
NeoBundle 'kana/vim-submode'

以下のコマンドを実行してください。

:so $MYVIMRC | NeoBundleInstall

プラグイン名用途
previmVim で編集した Markdonw ファイルをブラウザプレビューするために必要(自動リロード機能付き)
cscroll.vimVim から Google Chrome を操作するために必要
vim-submode連続スクロールを実現するために必要
vim-auto-save編集しているファイルを自動保存するために必要

設定

~/.vimrc
" Markdown プレビュー {{{
nnoremap <silent> <F7> :PrevimOpen<CR>
"nnoremap <silent> <F7> :PrevimOpen \|:Silent open -a it2_f &<CR>
nmap <silent> <Leader>j <Plug>(ChromeScrollDown)
nmap <silent> <Leader>k <Plug>(ChromeScrollUp)
nmap <silent> <Leader>q <Plug>(ChromeTabClose)
nmap <buffer> <Leader>f <Plug>(ChromeKey)

call submode#enter_with('cscroll', 'n', '', '<Leader>j', ':ChromeScrollDown<CR>')
call submode#enter_with('cscroll', 'n', '', '<Leader>k', ':ChromeScrollUp<CR>')
call submode#leave_with('cscroll', 'n', '', 'n')
call submode#map('cscroll', 'n', '', 'j', ':ChromeScrollDown<CR>')
call submode#map('cscroll', 'n', '', 'k', ':ChromeScrollUp<CR>')

"" Auto Scroll
"nmap <silent> <Leader>j <Plug>(ChromeAutoScrollDown)
"nmap <Leader>js <Plug>(ChromeAutoScrollDownStop)
"nmap <silent> <Leader>k <Plug>(ChromeAutoScrollUp)
"nmap <Leader>ks <Plug>(ChromeAutoScrollUpStop)
" }}}

使い方

補足説明

まず、設定ファイルへ書き込んだ内容の捕捉として、Auto Scrollは、実験用の機能ですので、常用は、オススメできません。

また、:PrevimOpenコマンドでプレビューを実行した時、フォーカスがブラウザに移ってしまいますので、フォーカスを端末(iTerm2)に戻す方法を提案しています。

これは、コメントアウトした"nnoremap <silent> <F7> :PrevimOpen \|:Silent open -a it2_f &<CR>という記述のことです。

ちなみに、it2_fの内容としては、以下の様なコマンドになっています。

osascript -e 'tell application "iTerm" to activate'

基本操作

F7キーを押して、プレビューを実行します。ここでは、Google Chromeでプレビューされるようにしておいてください。

~/.vimrc
let g:previm_open_cmd = 'open -a Google\ Chrome'

[たぶん、上記のように設定するのだと思います。間違ってたらごめんなさい]

そして、<Leader>+j+j+j...で下スクロール。<Leader>+k+k+k...で上スクロールです。

<Leader>+qでタブを閉じます。

<Leader>+f+{char}で任意のキーをブラウザに送ります。

まとめると以下の様な感じです。

キー効果
<Leader>+j+j+j...下スクロール
<Leader>+k+k+k...上スクロール
<Leader>+qタブを閉じる
<Leader>+f+{char}任意のキーをブラウザに送る

イメージ画像

標準

実際には、以下の様な感じでプレビューできます。(画面がちらつきますが、これを何とかしたい…。

欠点としては、操作性はそこそこですが、①画面がちらつくのと、②Vimのカーソル行とプレビューが連動しない点などが挙げられます。

オートスクロール

オートスクロールのイメージ画像は、一番上に載せたものになります。

ここでいうオートスクロールとは、Vimのカーソルを動かせば、それに伴って、ブラウザもスクロールしてくれるというものです。

AutoScroll機能を有効にすると、画面のちらつきが抑えられていい感じです。

また、Vimでカーソルを動かすと、プレビューのスクロールと連動します(ただし、移動幅は連動しません)。

もし、AutoScroll機能を有効にするなら、上記で説明したキーマップのコメントアウトを外してください。具体的には、以下の部分になります。

~/.vimrc
"" Auto Scroll
"nmap <silent> <Leader>j <Plug>(ChromeAutoScrollDown)
"nmap <Leader>js <Plug>(ChromeAutoScrollDownStop)
"nmap <silent> <Leader>k <Plug>(ChromeAutoScrollUp)
"nmap <Leader>ks <Plug>(ChromeAutoScrollUpStop)

ただし、コメントアウトを外した場合、同じキーが登録されているので、注意が必要です。

また、この場合は、vim-submodeは必要なくなります。よって、Auto Scrollする場合の設定ファイルは以下の様な感じになります。

~/.vimrc
" Markdown プレビュー {{{
nnoremap <silent> <F7> :PrevimOpen<CR>
"nnoremap <silent> <F7> :PrevimOpen \|:Silent open -a it2_f &<CR>
"nmap <silent> <Leader>j <Plug>(ChromeScrollDown)
"nmap <silent> <Leader>k <Plug>(ChromeScrollUp)
nmap <silent> <Leader>q <Plug>(ChromeTabClose)
nmap <buffer> <Leader>f <Plug>(ChromeKey)

"call submode#enter_with('cscroll', 'n', '', '<Leader>j', ':ChromeScrollDown<CR>')
"call submode#enter_with('cscroll', 'n', '', '<Leader>k', ':ChromeScrollUp<CR>')
"call submode#leave_with('cscroll', 'n', '', 'n')
"call submode#map('cscroll', 'n', '', 'j', ':ChromeScrollDown<CR>')
"call submode#map('cscroll', 'n', '', 'k', ':ChromeScrollUp<CR>')

"" Auto Scroll
nmap <silent> <Leader>j <Plug>(ChromeAutoScrollDown)
nmap <Leader>js <Plug>(ChromeAutoScrollDownStop)
nmap <silent> <Leader>k <Plug>(ChromeAutoScrollUp)
nmap <Leader>ks <Plug>(ChromeAutoScrollUpStop)
" }}}

操作は簡単で、以下の通りになります。

キー効果
<Leader>+jVim上のカーソル移動とブラウザの下スクロールの連動を開始する
<Leader>+kVim上のカーソル移動とブラウザの上スクロールの連動を開始する
<Leader>+js下スクロールの連動を停止する
<Leader>+ks上スクロールの連動を停止する
<Leader>+qタブを閉じる
<Leader>+f+{char}任意のキーをブラウザに送る

欠点としては、①Vimのカーソル移動に依存しているという点、②スクロール幅が調整されていないという点、③キーを押さなければ、一方方向へのスクロールに対応しないという点です。

まだ、実験段階の機能なので、予期せぬ不都合が起こるかもしれません。注意してください。

VimでTextMateのようなコードスニペット(コード補完)を実装する

$
0
0

MacのエディタといえばTextMateやSublimetextが有名ですが、コードスニペット(コード補完)をVimでも簡単に再現できます。

snipMate

まずsnipMateのサイトから最新版の「snipMate.zip」を適当な場所(今回は、~/Downloads)にダウンロードします。

http://www.vim.org/scripts/script.php?script_id=2540

次にターミナルで、以下のコマンドを打つと~/.vim/以下にsnipMateが展開されコードスニペット機能が使えるようになります。

$ unzip ~/Downloads/snipMate.zip -d ~/.vim

スニペットの追加

snipMateは最初からいくつかの言語に対応していますが、足りないものは直接編集して追加します。

$ cd ~/.vim/snippets/
$ ls
_.snippets      mako.snippets       snippet.snippets
autoit.snippets     objc.snippets       tcl.snippets
c.snippets      perl.snippets       tex.snippets
cpp.snippets        php.snippets        vim.snippets
html.snippets       python.snippets     zsh.snippets
java.snippets       ruby.snippets
javascript.snippets sh.snippets

PHPの場合は、php.snippetsを編集します。

echoのコードスニペットは「ec」と設定されていますね。

$ vim php.snippets
snippet ec
    echo "${1:string}"${2};

例えば、printのスニペットとして、こんな感じに追記すれば、

snippet pr
    print "${1:string}"${2};

pr<tab>でprintのコードスニペットができるようになります。

スクリーンショット 2013-11-19 12.53.43.png

MacVimからMarkedでMarkdownプレビューを開く

$
0
0
.vimrc
:command! Marked :!open -a Marked "%"

あとは:Markedと入力すると、表示中のMarkdownファイルがMarkedで開かれる。

簡単な説明:

  • MarkedはMac用のMarkdownファイルをプレビューするアプリ。 $3.99
  • command!でコマンド登録
  • :!…でMacのコマンドを実行
  • open -aで任意のアプリを(使ってファイルを)開く
  • %で表示中のファイル名を取得、空白を含むものに対応するため引用符で括る

これで良いのかな? 実践Vimを読んだら知らない事だらけってくらいのVim使いなので、なんかアレなら教えてください。

Unite.vimのkey-mappingを変更する

$
0
0

unite実行中のkey-mappingは<Plug>(hogehoge)と定義されているので

autocmd FileType unite calls:unite_my_keymappings()function!s:unite_my_keymappings()" fを押下でカーソル下の候補を選択状態にする
    nmap <buffer>f<Plug>(unite_toggle_mark_current_candidate)endfunction

こんなかんじで出来る

めんどくさくてプラグインとか入れない時の.vimrc

$
0
0

プラグインもいれないで、いまを生きる君のためのvimの設定

~/.vimrc
"" 色の設定" シンタックスオン(色つける)syntaxon" 色テーマの指定(おまかせ)colorscheme darkblue

" 現在のカーソルの色をつけるsetcursorlinehi Comment ctermfg=103hi CursorLine term=none cterm=none ctermbg=17 guibg=236" 検索したときのハイライトをつけるsethlsearch" 行番号の表示setnumber" 折り返しオフsetnowrap"" 補完系(せっかくデフォであるのでいれておく)" オムニ補完の設定(insertモードでCtrl+oで候補を出す、Ctrl+n Ctrl+pで選択、Ctrl+yで確定)setomnifunc=pythoncomplete#Complete
setomnifunc=javascriptcomplete#CompleteJS
setomnifunc=htmlcomplete#CompleteTags
setomnifunc=csscomplete#CompleteCSS
setomnifunc=xmlcomplete#CompleteTags
setomnifunc=phpcomplete#CompletePHP

" ステータスラインの設定setcmdheight=1setlaststatus=2setstatusline=%<%F\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ %c%V%8P

" Ctrl-L で検索ハイライトを消す
nmap <C-l><C-l>:nohlsearch<CR>

githubにもあげたくない。

vim から :shell で抜けたときにわかりやすくする

$
0
0

# VimShell 使ったりして :shellとか使ってない人が多いかもだけど。

:shellでシェルに抜けたときに,それを忘れていて,編集中のファイルをふたたび開こうとして怒られたり,気がついたら3つくらい vim を抜けたりしたりして困っていたので,vim からシェルに抜けている時はちゃんとハッキリ分かるようプロンプトにだすようにした。

[[ -n "$VIMRUNTIME"]]&&\PROMPT="%{${fg[white]}${bg[blue]}%}(vim)%{${reset_color}%} $PROMPT"

最初はシェルの親プロセスの名前を調べていたんだけど, @thincaさんのご指摘により,$VIMRUNTIMEという環境変数 (あと $VIMという環境変数も設定されていた) を調べることにしました。格段にシンプルになりました。変数のローカリゼーションする必要もなくなりました。 @thincaさんありがとうございます!

これを ~/.zshrcに書くことで

このように表示されるようになった。

そもそも :shellつかわずに CTRL-Zを使って抜けている人も多いみたいです。

@dayflower :sh 使うとそのへん面倒なので、自分は C-z でシェルに戻ってシェルを使い、あとプロンプトにジョブ数(%j)を表示してます。vimへはfgコマンドで戻ります。

https://twitter.com/todashuta/status/402718109833756672

わたしはどうしてもエディタを CTRL-Zするのに抵抗感があるので :shに慣れてしまいましたが。


enable-luaなvim7.4をインストール

$
0
0

neocomplcacheの後継でneocompleteなるものが出てるらしい。
neocomplcacheはファイルパスやら変数やらを補完してくれるんだけども、サジェストが遅いのがウーンだった。
neocompleteは速くなってるらしい。
しかし、luaなるものにvimが対応してなければいけないらしく、CentOS6.4のデフォルトのvimは古くて対応不可
ということで、ソースからインストールしてみた

ソースの入手

cd /usr/local/src/
wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2
tar xvf vim-7.4.tar.bz2
cd vim74/

configure

どういうオプションが利用可能かは、./configure --helpで確認できる

./configure \
 --enable-multibyte \
 --with-features=huge \
 --enable-luainterp \
 --enable-perlinterp \
 --enable-pythoninterp \
 --with-python-config-dir=/usr/lib64/python2.6/config \
 --enable-rubyinterp \
 --with-ruby-command=/usr/bin/ruby \

make

make
  • ここでエラーが出るようなら、末尾のあやしいメッセージをggrる
  • エラーがなければ、makeしたvimで意図した機能が有効になってるか確認する
./src/vim --version

これがmakeしたvim(たとえば、luaが有効なら+lua/無効なら-lua)

  • おかしいようなら、configureのログを見る
less ./src/auto/config.log

ハマったこと

make が失敗する

no terminal library found
checking for tgetent()... configure: error: NOT FOUND!
      You need to install a terminal library; for example ncurses.
      Or specify the name of the library with --with-tlib.
  • yum install ncurses-develで対応

luaが有効にならない

checking --enable-luainterp argument... yes
checking --with-lua-prefix argument... no
checking LUA_PREFIX environment var... not set, default to /usr
checking --with-luajit... no
checking for lua... (cached) /usr/bin/lua
checking Lua version... (cached) 5.1
checking if lua.h can be found in /usr/include... no
checking if lua.h can be found in /usr/include/lua5.1... no
  • yum install lua-develで対応

--enable-perlinterp でconfigureが失敗する(ログとり忘れたので、参考程度に

Can't open perl script "/usr/share/perl5/ExtUtils/xsubpp":
  • yum install perl-ExtUtils-Embedで対応

pythonが有効にならない(ログとり忘れたので、参考程度に

  • --enable-pythoninterpだけオプションにしてたので、--with-python-config-dir=hogeもつける→ディレクトリないぞ!
  • yum install python-devel
  • find / -name config -type d でそれらしきディレクトリを見つけた

rubyが有効にならない(ログとり忘れたので、参考程度に

  • --enable-rubyinterpだけオプションにしてたので、--with-ruby-command=/usr/bin/rubyもつける

vim7.4をgitのコミットエディタに指定してコミットするとエラーが起こる

$
0
0

vimをcore.editorに指定してgit commitすると、以下のようなエラーが発生する。

"COMMIT_EDITMSG" [変換済] 10L, 329C
/usr/local/vim74/share/vim/vim74/syntax/diff.vim の処理中にエラーが検出されました:
行   65:
E401: パターン区切りが見つかりません: "^\\ Δεν υπάρχει χαρακτήρας νέας γραμμής στο τέλος του αρχείου"
E475: 無効な引数です: diffNoEOL^I"^\\ Δεν υπάρχει χαρακτήρας νέας γραμμής στο τέλος του αρχείου"

このエラーが出てもEnter押せば通常通りコミットできるのだが、気持ち悪い。

/usr/local/vim74/share/vim/vim74/syntax/diff.vimを見てみると、20行目から321行目のロケール関連の設定があやしい。先頭の英語と中段のja、ja DiffUtils 3.3だけ残してあとはコメントアウトしたらエラーが発生しなくなった。

なぜsyntax/diff.vimが処理されたのかよくわからないが、ひとまず。

vim で lua を有効にする

$
0
0
brew install lua
brew reinstall vim --with-lua

vim versionを実行して、+luaになっていたらOK

VIMでmanを読む

$
0
0

下記コマンドを入力するだけの簡単なお仕事です。

man <知りたいこと> -P "col -b | vim -Rc 'setl ft=man ts=8 nomod nolist nonu' -c 'nmap q :q<cr>' -"

zsh使っているなら、~/.zshrcにこんな感じで書いておくとデフォルトのmanを(大体)置き換えられて恍惚。

~/.zshrc
function man(){ /usr/bin/man $* -P "col -b | vim -Rc 'setl ft=man ts=8 nomod nolist nonu' -c 'nmap q :q<cr>' -"}

キーバインド

使えます。

KeyBehavior
<C-]>カーソル下の単語を更にmanで調べる
<C-t>戻る

vimでsequential-command.el の の機能を実現したい。

$
0
0

Emacs使っていた頃につかっていた sequential-command.el (の <C-a><C-e>のみ)みたいなこと出来ないかな?と、vimrcを頑張ってみた。
いろいろ拙いし考慮漏れもあるような気がするけどとりあえず出来たので書いてみる。

※車輪が再開発されている可能性は否めない

.vimrc(一部)
"ローテート {{{function!s:save_pos()letb:cur_pos = getpos('.')endfunction
autocmd WinEnter,BufRead * call<SID>save_pos()nnoremaphh:<C-u>call<SID>save_pos()<CR>nnoremapjj:<C-u>call<SID>save_pos()<CR>nnoremapkk:<C-u>call<SID>save_pos()<CR>nnoremapll:<C-u>call<SID>save_pos()<CR>nnoremapbb:<C-u>call<SID>save_pos()<CR>nnoremap<C-b><C-b>:<C-u>call<SID>save_pos()<CR>nnoremap<C-f><C-f>:<C-u>call<SID>save_pos()<CR>function!s:rotate_in_buffer(r)let pos_f= getpos('.')if pos_f == [b:cur_pos[0],1,1,b:cur_pos[0]]
        call setpos('.',b:cur_pos)returnendif

    execute a:r ? "normal! ^" : "normal! $"let pos_s= getpos('.')if pos_f == pos_s
        execute a:r ? "normal! 0" : "normal! G$"let pos_t = getpos('.')if pos_s == pos_t
            ifa:r
                execute "normal! gg^"elsecall setpos('.',b:cur_pos)endifendifelseifa:r&& pos_s[1] ==b:cur_pos[1] && pos_f[2] < pos_s[2]
        execute "normal! gg^"endifendfunctionnnoremap<silent><C-a> :<C-u>call<SID>rotate_in_buffer(1)<CR>nnoremap<silent><C-e> :<C-u>call<SID>rotate_in_buffer(0)<CR>"}}}

<C-a>を上書いてしまっていいのかは謎い。

vimのレジスタ

$
0
0

マニュアルから概要のみ抜粋。

レジスタの種類

  1. 無名レジスタ ""
  2. 10個の番号付きレジスタ "0 から "9
  3. 小削除用レジスタ "-
  4. 26個の名前付きレジスタ "a から "z または "A から "Z
  5. 4個の読み取り専用レジスタ ": と ". と "% と "#
  6. expression 用レジスタ "=
  7. 選択領域用レジスタ "* と "+ と "~
  8. 消去専用レジスタ "_
  9. 最終検索パターン用レジスタ "/

1. 無名レジスタ

最後に使用されたレジスタの内容を格納。
削除・ヤンクなどされるたびに書き換えらる。

  • "というレジスタ名で指定可能
  • _を指定した削除_ddの場合はどのレジスタにも入らない

2.10個の番号付きレジスタ "0 から "9

レジスタ名意味
0コピーしたテキスト
1行削除したテキスト。1行以下は小削除用レジスタ_に格納される
2新たに削除コマンドが発生する度に、"1の内容が格納される
3~8"2と同様、直前のレジスタの内容が順次格納される
9同様だが、9番目の内容は破棄される
  • 明示的にレジスタを指定した場合は格納されない

3. 小削除用レジスタ "-

1行以下の削除テキストが格納される。

  • 明示的にレジスタを指定した場合は格納されない

4. 26個の名前付きレジスタ "a から "z または "A から "Z

明示的にした場合のみ使用される。

レジスタ名意味
a-z上書きで格納される
A-Za-zの内容に追加で格納される
  • 貼り付け時の動作は小文字も大文字も同じ

5. 4個の読み取り専用レジスタ ": と ". と "% と "

レジスタ名意味
.最後に挿入されたテキスト(コマンドラインのでは利用不可)
%カレントファイル名
#代替ファイル名
:最後に入力されたコマンドライン(@:で直近コマンド繰り返し)

6. expression 用レジスタ "=

指定するとコマンド行に移動し、
コマンドラインにて入力したコマンドの実行結果が格納される。

7. 選択領域用レジスタ "* と "+ と "~

GUIで選択されたテキストが格納される。
クリップボードのデータを操作するのに使用する。

8. 消去専用レジスタ "_

何も格納されない。
レジスタの内容を変更せずに消去するために使用する。

9. 最終検索パターン用レジスタ "/

最後に使用された検索パターンが格納される。

vim忘備録


OS英語化とか、キーリマップとか

$
0
0

企業のグローバル化が声高に叫ばれる現代、英語というものに高い壁を感じており、最近猛特訓中です。
そんな中、この記事を読んで妙に納得してしまったのでUS配列のキーボードを購入し、(出来る範囲で)イングリッシュな環境を整えてみました。
※ お試しになる場合は自己責任でお願いします。。

ラインナップ

  1. OS X Mavericksを英語化してみる
    • Terminal(というよりGNU Core Utilities)の文字化け対策
  2. キーリマップでUSキーボードを使いやすく
    • with KeyRemap4MacBook (Mac) / YAMY (Win)
      • ついでにVimのIME対策も

OS X Mavericksを英語化してみる

ちょっと昔にOS X高速化、などのコンテクストで語られていたTipですね。
設定一発で変えられます。

  1. システム環境設定言語と地域を表示します。
  2. 左のリストで"English"を一番上に持ってきます。
  3. ログアウトして入り直すか、再起動を行えば反映完了です。

Terminalの文字化け対策

以前の記事でSolarizedを導入した際に、GNU版lsを使うため(ファイル、ディレクトリの色分けを適用するため)にcoreutilsをインストールしたのですが、こいつのロケール設定が変わってしまったため、日本語ディレクトリ・ファイル名が文字化けしてしまっていました。

glsを使っていることをすっかり忘れていたのでだいぶハマってしまいましたが、~/.bash_profileに以下を設定しすれば、日本語が正しく表示されるようになります。

.bash_profile
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8

キーリマップでUSキーボードを使いやすく

Mac環境

USキーボードではJISキーボードで言うcontrolの位置とcaps lockの位置が入れ替わっているような配置になっており、ちょっと使いにくいです。この位置はOS設定から変更可能です。

  1. System PreferencesKeyboardModifier Keysの順にクリック
  2. Caps Lock KeyControl Keyの設定を入れ替え

以上です。
controlキーを押すとちゃんとcaps lockキーが点灯するのであまり違和感なく使えるんじゃないかな、と思います。

さて、JISキーボードとUS配列キーボードの最大の違いが英数かなキーがない、ということなのですが、日本語入力自体はどちらのキー配列であっても+spaceで変更可能です。私の場合、後述するWin環境となるだけ近い操作性にしたかったので、キーリマップツールを使ってshift+spaceに割り当てました。慣れてくるとやりやすいですよ。

  1. KeyRemap4MacBookをインストールします。インストールは簡単です。
  2. 「Change Key」タブ → 「For Japanese」 → 「Change Space Key」と進みます。
  3. 「Shift + Space to KANA/EISUU (toggle)」を選択します。

ついでにターミナルVimでIME onのまま挿入モードを抜けると悲しい気持ちになってしまいますので、カスタムリマップでesc連打でIMEも抜けるように設定します。

  1. KeyRemap4MacBookの設定画面を開き、Misc & Uninstallタブを選択します。
  2. Open private.xmlボタンをクリックします。Finderが開き、private.xmlが見えると思います。
  3. 中身を以下のように編集します。こちらのサイトを参考にさせていただきました。
  4. keyRemap4MacBookの設定画面に戻り、Change Keyタブ選択 → ReloadXMLボタンをクリックして反映します。
private.xml
<?xml version="1.0"?><root><list><item><name>ESC to IME off (to English) + Esc + Esc</name><appendix>Enable for all but HHK</appendix><identifier>private.vim.ime_off_ESC</identifier><only>TERMINAL, VI</only><inputsource_only>JAPANESE</inputsource_only><autogen>
                __KeyToKey__ KeyCode::ESCAPE, ModifierFlag::NONE,
                KeyCode::VK_CHANGE_INPUTSOURCE_ENGLISH,
                KeyCode::VK_CHANGE_INPUTSOURCE_JAPANESE,
                KeyCode::VK_CHANGE_INPUTSOURCE_ENGLISH,
                KeyCode::ESCAPE, KeyCode::ESCAPE
            </autogen></item><item><name>Control + BRACKET_LEFT to IME off (to English) + Esc + Esc</name><identifier>private.vim.ime_new</identifier><only>TERMINAL, VI</only><inputsource_only>JAPANESE</inputsource_only><autogen>
                __KeyToKey__ KeyCode::BRACKET_LEFT,
                MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL|ModifierFlag::NONE,
                KeyCode::VK_CHANGE_INPUTSOURCE_ENGLISH,
                KeyCode::VK_CHANGE_INPUTSOURCE_JAPANESE,
                KeyCode::VK_CHANGE_INPUTSOURCE_ENGLISH,
                KeyCode::ESCAPE, KeyCode::ESCAPE
            </autogen></item></list></root>

Win環境

会社のWin環境ではJIS配列の109キーRealforceを使っているのですが、これはちょっと気に入っている上に気軽に乗り換えられるお値段ではないので、なるだけ近い操作性になるようにキーリマップツールで対応します。。。

  1. YAMYをインストールします。といっても解凍するだけです。
  2. インストールディレクトリ内にあるyamy.iniを開き、"escapeNLSKeys"の値を"1"にします。
  3. caps lockキー入れ替えが正しく動作するように、インストールディレクトリ内にある104on109.mayuの以下の行を以下のようにコメントアウトします。英語キーボード配列なんかまっぴらだよ、という方は飛ばしてください。

    104on109.mayu
    # def subst    *英数      = S-*英数
    # def subst    *E0英数        = S-*英数
    
  4. インストールディレクトリの中に以下のようなオリジナル設定ファイル(****.mayu)を作成します(ファイル名は任意)。
    109キーボードを104キーボード配列で使うため、最初はそこそこ混乱します。英語キーボード配列なんかまっぴらだよ、という方は2つめのinclude文をコメントアウトしてください。

    *****.mayu
    include "109.mayu"
    include "104on109.mayu" # 109 キーボードを 104 キーボード風に
    
    mod Control += E0英数
    key *E0英数 = *LControl
    key LControl = E0英数
    
    key S-Space = $ToggleIME
    
    window Mintty /mintty/ : Global
    key IL-~IC-Esc = $ToggleIME Esc # Make IME off, Exit insert mode
    key IC-Esc = $ToggleIME Esc # Make IME off, Exit insert mode
    
  5. YAMYを起動します。その後、タスクトレイに常駐しているYAMYアイコンを右クリック → 「設定」を選択

  6. 追加ボタンをクリック

  7. 適当な名前を付け、参照ボタンより先ほどの*****.mayuを選択し、OKで閉じる

  8. OKで閉じる

  9. 再度タスクトレイのYAMYアイコンを右クリック → 選択と進み、先ほど追加した設定を選択

以上で設定が反映されます。
CapsCtrlが入れ替わり、Shift+SpaceでIME変更ができます。

また、Macの場合と同様Esc連打でVimの挿入モードを抜ける際にIMEもオフになるよう設定しました。
この設定はCygwinターミナルであるMintty上でのみ有効になるように設定しています。

設定の不具合

escキー1回押下でIMEも挿入モードも抜けるように書いたつもりなのですが、2回押さないと抜けてくれません。
また、筆者の環境(WinXP 32bit)ではどうもcontrolキーを押下した際のcaps lockが正しく動いてくれません。
設定に間違いがありましたら、ご指摘いただければ幸いです。

YAMYでは他にも様々なキーバインドができますので、こちらのマニュアルを参考にして使いやすい設定を試してみてください。

以上です。

vimでファイルを行数指定で開く

$
0
0

エラーログやknown_hostsで行数を指定されたとき、ファイルを開いてから
指定行まで移動することがあるけど、行指定で開くことも可能

$ vim +864 ~/.ssh/known_hosts

-cでも良い

$ vim -c 864 ~/.ssh/known_hosts

powerlineとSourceCodeProで簡単につくれるキレイな開発環境

$
0
0

f:id:takuto_kd:20131128015116p:plain

ターミナルの表示をリッチにするpowerlineとadobeがちょっと前に出したソースコード用フォントSourceCodeProでtmuxとvimとzshを面倒な設定ファイルを書く事無くキレイな感じにする。

メリット

  • Gitのブランチが見れたり
  • Vimのモードがカラーで示されて分かりやすかったり
  • SourceCodeProが目に優しかったり
  • 面倒な設定書かなくてもtmuxとzshの表示がリッチになる

以下を前提

  • NeoBundle導入済み
  • MacVim使用

powerline

vimやらtmuxやらのバインディングがまるっと入ってるのでVimプラグインとして入れなくて良いんですが別にパスの設定がちょっと変わるくらいなので好きなところにインストールしときます。

$HOME/.vimrcに以下追加で:NeoBundleInstall

.vimrc
NeoBundle 'alpaca-tc/alpaca_powertabline'
NeoBundle 'https://github.com/Lokaltog/powerline.git'

NeoBundleの用意が面倒だったらそのままgit cloneしましょう。

次はフォントの設定をします。

Source Code Pro

Source Code Proとは?

Source Code Pro そーすこーどぷろ (コンピュータ)
tek29 編集
米アドビがオープンソースとして公開した、ソースコードを表示するためのフォント。

ソースコードの見やすさを優先したモノスペースフォント(等幅フォント)。大文字のI(アイ)/小文字のl(エル)/数字の1(イチ)や、大文字のO(オー)/数字の0(ゼロ)の判別が容易なようにデザインされている。

引用 > はてなキーワード &gt; Source Code Pro

以下のバリエーションから好きなやつを使えます。

f:id:takuto_kd:20131128015240p:plain

↓ここからダウンロードしてインストールします。

Adobe Fonts -

フォントにパッチあてる

インストールしたフォントはそのままpowerlineで使えない事は無いのですが一部の特殊な描画を正常に行うためにpowerlineに同梱されているパッチをフォントにあてる必要があります。

まずパッチの実行に必要なfontforgeコマンドをインストールします。

$ brew install fontforge

fontforgeを使ってfontpatcher.pyというpythonスクリプトをインストールしたフォントに対して実行します。

$ fontforge -script ~/.vim/bundle/powerline/font/fontpatcher.py ~/fonts/SourceCodePro-Light.otf
$ ls
// ↓末尾にfor Powerlineとリネームされて新しくフォントファイルが生成されます
Source Code Pro Light for Powerline.otf
// 生成したフォントがターミナルの設定から見えるように~/Library/Fonts/以下に置く
$ mv Source Code Pro Light for Powerline.otf ~/Library/Fonts/

ターミナルで使用するフォントの設定

Preference > Profiles > Text > Regular Font >Change Fontボタン

Collection::AllFontsから検索

f:id:takuto_kd:20131128015121p:plain

~/.vimrc

以下追加

.vimrc
set laststatus=2
set rtp+=~/.vim/bundle/powerline/powerline/bindings/vim
let g:Powerline_symbols = 'fancy'
set noshowmode

f:id:takuto_kd:20131128015853p:plain

~/.zshrc

以下追加

.zshrc
source /Users/takuto/.vim/bundle/powerline/powerline/bindings/zsh/powerline.zsh

f:id:takuto_kd:20131128020215p:plain

~/.tmux.conf

.tmux.conf
source ~/.vim/bundle/powerline/powerline/bindings/tmux/powerline.conf

f:id:takuto_kd:20131128020335p:plain

SublimeText2もSourceCodeProにする

Preference > Setting User

以下追加

{
  "font_face": "Source Code Pro Light"
}

Thanks

地震速報も取れるらしい

.tmux-powerlinercを開き、地震情報のコメントアウトを外します。デフォルトでは日本中の地震情報から拾ってきます。

引用 > http://matsu.teraren.com/blog/2013/02/10/moteru-tmux-powerline/

powerline入れてから重くなった → powerline-daemon

https://github.com/kovidgoyal/powerline-daemon

↑からソースとってきてREADME通りにpowerline-clientをつくったら実行権限与えてdaemon起動しておくと色々キャッシュしてくれて軽くなる。

参考↓
POWERLINE が重いとか都市伝説を信じてる奴ってまだいるの?(5日目 POWERLINE-DAEMON 編)

$ gcc -O3 powerline-client.c -o powerline-client
$ chmod +x powerline-daemon
$ powerline-daemon
.zshrc
_powerline_tmux_setenv() {
    if [[ -n "$TMUX" ]]; then
        tmux setenv TMUX_"$1"_$(tmux display -p "#D" | tr -d %) "$2"
    fi
}

_powerline_tmux_set_pwd() {
    _powerline_tmux_setenv PWD "$PWD"
}

_powerline_tmux_set_columns() {
    _powerline_tmux_setenv COLUMNS "$COLUMNS"
}

_powerline_prompt() {
    [[ -z "$POWERLINE_OLD_PROMPT_COMMAND" ]] ||
        eval $POWERLINE_OLD_PROMPT_COMMAND
    PS1="$(powerline-client shell left -r zsh_prompt --last_exit_code=$?)"
    _powerline_tmux_set_pwd
}

trap "_powerline_tmux_set_columns" SIGWINCH
_powerline_tmux_set_columns

[[ "$PROMPT_COMMAND" == "_powerline_prompt" ]] ||
    POWERLINE_OLD_PROMPT_COMMAND="$PROMPT_COMMAND"
export PROMPT_COMMAND="_powerline¥_prompt"

vim-airline

vimだけならコレが簡単↓

https://github.com/bling/vim-airline

demo.gif


元記事↓
http://ta9to.hateblo.jp/entry/2013/11/28/022129

GitHubにある自身のすべてのリポジトリの設定ページを開くのようなこと

$
0
0

GitHubの自分のリポジトリ一覧を見ていて、全部のリポジトリの設定ページを開きたくなったときにやったこと。

  1. Option + ⌘ + IでとりあえずDOMを見る
  2. .repolist-nameとればいいっぽい
  3. Option + ⌘ + Jでとりあえずコンソールを開く
GoogleChrome-DevTools-Console
Array.prototype.slice.call(document.querySelectorAll('.repolist-name a')).forEach(function(elm){console.log(elm.href+'/settings');});

ちゃんと出力された。


  1. 出力された文字列をいい感じに選択してクリップボードにコピーする
  2. とりあえずVimに貼付ける
Vim-Scratch
https://github.com/sasaplus1/sasaplus1.github.io/settings VM479:2
https://github.com/sasaplus1/stylesheetselector.js/settings VM479:2
https://github.com/sasaplus1/dotfiles/settings VM479:2
https://github.com/sasaplus1/ltsv-web/settings VM479:2
https://github.com/sasaplus1/slide-first-time-node.js/settings VM479:2
https://github.com/sasaplus1/http-router/settings VM479:2
https://github.com/sasaplus1/ltsv.js/settings VM479:2
https://github.com/sasaplus1/base62.js/settings VM479:2
https://github.com/sasaplus1/rumia/settings VM479:2
https://github.com/sasaplus1/pfmclock/settings VM479:2
https://github.com/sasaplus1/mktemp/settings VM479:2
https://github.com/sasaplus1/pfmloop/settings VM479:2
https://github.com/sasaplus1/generator-prototyping/settings VM479:2
https://github.com/sasaplus1/generator-flowtime/settings VM479:2
https://github.com/sasaplus1/dtree/settings VM479:2
https://github.com/sasaplus1/ltsview/settings VM479:2
https://github.com/sasaplus1/deepcopy.js/settings VM479:2
https://github.com/sasaplus1/split-stream/settings VM479:2

いい感じにカーソルを移動しつつ、以下のようなことをする。

  • "+P
  • :%S/ .+$//
    • eregex.vim使用
  • gg^vGI + "open "
  • ggO + "#!/bin/bash"
Vim-Scratch
#!/bin/bash

open https://github.com/sasaplus1/sasaplus1.github.io/settings
open https://github.com/sasaplus1/stylesheetselector.js/settings
open https://github.com/sasaplus1/dotfiles/settings
open https://github.com/sasaplus1/ltsv-web/settings
open https://github.com/sasaplus1/slide-first-time-node.js/settings
open https://github.com/sasaplus1/http-router/settings
open https://github.com/sasaplus1/ltsv.js/settings
open https://github.com/sasaplus1/base62.js/settings
open https://github.com/sasaplus1/rumia/settings
open https://github.com/sasaplus1/pfmclock/settings
open https://github.com/sasaplus1/mktemp/settings
open https://github.com/sasaplus1/pfmloop/settings
open https://github.com/sasaplus1/generator-prototyping/settings
open https://github.com/sasaplus1/generator-flowtime/settings
open https://github.com/sasaplus1/dtree/settings
open https://github.com/sasaplus1/ltsview/settings
open https://github.com/sasaplus1/deepcopy.js/settings
open https://github.com/sasaplus1/split-stream/settings
  • \r
    • vim-quickrun使用

Google Chromeにずばばばーっとタブが表示されました。WikiとかIssueのon/offしたかっただけです。

vimで検索してから行削除する(globalコマンドを覚える)

$
0
0

いつも忘れたころに必要になるのでメモしておく。

通常通り検索をする。

/hoge

hogeがハイライトされる(削除される行をあらかじめ確認)

検索に一致した行を削除する

:g//d

hogeを含む行が削除される

もちろん1行で書けるが

:g/hoge/d

→ いきなり削除されるので確認できない

確認するなら置換コマンドでも良いが

:%s/.*hoge.*\n//c

→ やはり、やや入力が手間

グローバルコマンド

調べたら組み合わせによりもっといろいろできる。

ヤンクする場合

qqq:g//y Q

qレジスタにヤンクした結果が格納される

  • :g//yだけだと最後にヒットした行しか"0に格納されない
  • 末尾Qをつけると大文字レジスタなので"qに追記されていく
  • qqqであらかじめ"qレジスタの内容を消去している(空のマクロを書き込んでいる)

ファイル末尾に移動する場合

:g//m$

→ ヒットした行がファイル末尾に移動する

  • $の部分を0にすると先頭に移動する
  • $の部分を+3とかにすると各行を3行下に移動する
  • mcotにすると移動ではなくコピーになる

ヒットする行の前後を確認する場合

:g//z#.5|echo '----'

→ ヒット行を中心に前後2行ずつ、----区切りで表示される

  • |echo '----'はなくても良いがつけた方が見やすい

結合する場合

:g//,/<C-r>//j

→ ヒットした2つの行を1行に結合する

  • <C-r>/は最後の検索パターン(この場合はhoge)を挿入している
  • jで与えられた範囲,/<C-r>//、つまり,/hoge/を結合(join)している
  • ,/hoge/は「現在行からhogeを含む直近の行」の範囲を示している
  • ちなみにhogeを含む行が奇数だと怒られる(最後の行が不正な範囲を示すため)

もはやなんでもできる気がしてくる

:g//norm!yyp

→ ヒット行の直後に複製する(ヤンクしてペースト)

  • normでノーマルモードのコマンドを実行できる
  • yyp@qとかにすればマクロも実行できる

参考

Power of g
http://vim.wikia.com/wiki/Power_of_g

Viewing all 5720 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>