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

vimのstatusline装飾プラグインのlightline.vimを導入してみた

$
0
0

vimのstatusline装飾プラグインは

上記のようにいくつかあります。そんな中で最近、更に新しいプラグインが出てきました。

特徴として次のような事が挙げられています。

  • vim scriptのみで書かれて軽量であること
  • 簡単に拡張できること
  • 他のプラグインに干渉しないように気を使っていること

powerlineは導入が面倒そうだったのでvim-airlineもそのまま見送っていたのですが、これなら面倒がなさそうでlandscape themeも気に入ったので導入してみました。

カラーテーマだけ設定してみましたがデフォルトで色々と表示されるので、同系のプラグインを使ってない人でも導入する価値があると思います。

.vimrc
letg:lightline = {
    \ 'colorscheme': 'landscape'
    \ }

lightline.vim


lightline.vim を使って vim のステータスラインをカスタマイズ

$
0
0

先日 vim-powerlineから vim-airlineに乗り換えたばかりだったのですが、あっさり lightline.vimに乗り換えてしまいました。

理由は、lightline.vim 作者さんの以下記事に共感したからです。

また、設定方法が直感的で分かりやすい点や、カスタマイズしやすい点なども気に入りました。

インストール

NeoBundle 'itchyny/lightline.vim'

今回のカスタマイズでは、以下のプラグインと連携させているので入れておくと良いです。
(無くてもエラーになったりはしません)

NeoBundle 'tpope/vim-fugitive'
NeoBundle 'airblade/vim-gitgutter'

NeoBundle 以外のインストール方法は、README読んで下さい。

カスタマイズ

おすすめの設定ですが、READMEを上から順に試していくのも良いですが、作者さんの設定を真似るのが一番手っ取り早いです。

作者さんの設定は、READMEの一番最後に記載されています。
もしくは、直接 作者さんの .vimrcを参考にしましょう。

さらに今回は、カーソル下の文字コード表示と、vim-gitgutterと連携してGitの追加/変更/削除のハンク数も表示させるようにしました。

lightline-vim.png

以下が最終的な設定です。

特に解説はしませんが lightline.vim の設定方法は非常に直感的で分かりやすいので、すぐに理解できると思います。
また、READMEがチュートリアル方式になっているので、もし分からなければ読んでみると良いでしょう。

" vim-gitgutterletg:gitgutter_sign_added ='✚'letg:gitgutter_sign_modified ='➜'letg:gitgutter_sign_removed ='✘'" lightline.vimletg:lightline = {
        \ 'colorscheme': 'landscape',
        \ 'mode_map': {'c': 'NORMAL'},
        \ 'active': {
        \   'left': [
        \     ['mode','paste'],
        \     ['fugitive','gitgutter','filename'],
        \   ],
        \   'right': [
        \     ['lineinfo','syntastic'],
        \     ['percent'],
        \     ['charcode','fileformat','fileencoding','filetype'],
        \   ]
        \ },
        \ 'component_function': {
        \   'modified': 'MyModified',
        \   'readonly': 'MyReadonly',
        \   'fugitive': 'MyFugitive',
        \   'filename': 'MyFilename',
        \   'fileformat': 'MyFileformat',
        \   'filetype': 'MyFiletype',
        \   'fileencoding': 'MyFileencoding',
        \   'mode': 'MyMode',
        \   'syntastic': 'SyntasticStatuslineFlag',
        \   'charcode': 'MyCharCode',
        \   'gitgutter': 'MyGitGutter',
        \ },
        \ 'separator': {'left': '⮀','right': '⮂'},
        \ 'subseparator': {'left': '⮁','right': '⮃'}
        \ }

function! MyModified()return&ft=~'help\|vimfiler\|gundo' ? '' : &modified ? '+' : &modifiable ? '' : '-'endfunctionfunction! MyReadonly()return&ft!~? 'help\|vimfiler\|gundo'&& &ro ? '⭤' : ''endfunctionfunction! MyFilename()return(''!= MyReadonly() ? MyReadonly() . ' ' : '') .
        \ (&ft=='vimfiler' ? vimfiler#get_status_string() :
        \  &ft=='unite' ? unite#get_status_string() :
        \  &ft=='vimshell' ? substitute(b:vimshell.current_dir,expand('~'),'~','') :
        \ ''!= expand('%t') ? expand('%t') : '[No Name]') .
        \ (''!= MyModified() ? ' ' . MyModified() : '')endfunctionfunction! MyFugitive()tryif&ft!~? 'vimfiler\|gundo'&& exists('*fugitive#head')let _ = fugitive#head()return strlen(_) ? '⭠ '._ : ''endifcatchendtryreturn''endfunctionfunction! MyFileformat()returnwinwidth('.')>70 ? &fileformat : ''endfunctionfunction! MyFiletype()returnwinwidth('.')>70 ? (strlen(&filetype) ? &filetype : 'no ft') : ''endfunctionfunction! MyFileencoding()returnwinwidth('.')>70 ? (strlen(&fenc) ? &fenc : &enc) : ''endfunctionfunction! MyMode()returnwinwidth('.')>60 ? lightline#mode() : ''endfunctionfunction! MyGitGutter()if! exists('*GitGutterGetHunkSummary')
        \ ||!get(g:,'gitgutter_enabled',0)
        \ ||winwidth('.')<=90return''endiflet symbols = [
        \ g:gitgutter_sign_added . ' ',
        \ g:gitgutter_sign_modified . ' ',
        \ g:gitgutter_sign_removed . ' '
        \ ]
  let hunks = GitGutterGetHunkSummary()letret= []
  foriin [0,1,2]
    if hunks[i] >0call add(ret, symbols[i] . hunks[i])endifendforreturnjoin(ret,' ')endfunction" https://github.com/Lokaltog/vim-powerline/blob/develop/autoload/Powerline/Functions.vimfunction! MyCharCode()ifwinwidth('.')<=70return''endif" Get the output of :asciiredir=>asciisilent!asciiredir END

  ifmatch(ascii,'NUL')!=-1return'NUL'endif" Zero pad hex valueslet nrformat ='0x%02x'letencoding=(&fenc=='' ? &enc : &fenc)ifencoding=='utf-8'" Zero pad with 4 zeroes in unicode fileslet nrformat ='0x%04x'endif" Get the character and the numeric value from the return value of :ascii" This matches the two first pieces of the return value, e.g." "<F>  70" => char: 'F', nr: '70'let [str, char, nr; rest] = matchlist(ascii,'\v\<(.{-1,})\>\s*([0-9]+)')" Format the numeric valuelet nr = printf(nrformat, nr)return"'". char ."' ". nr
endfunction

あとは気に入らない部分を自分好みに変えていくと良いかと思います。

  • vim-gitgutter の sign は私の好みで変えてるだけなので、別にデフォルトのままでも良いです
  • separatorsubseparatorvim-powerlineのものなので、対応していない方は設定を削除するか、フォントにパッチを当てて下さい。powerlineを使ってる方はそっちでもおk

私の最新の設定はGithubに置いてあるので、良ければ何かの参考にでも。

メニュー使っていますか?

$
0
0

この記事はVim Advent Calendar 2012 : ATND272日目の記事になります。

突然ですが、皆さんはVimのメニュー使っていますか?

私が思うにVimmerの方々でメニューを表示し使っている方はすごく少数派な気がします。

まぁたぶん、メニューを使わない理由は 「キーボードからマウスに手を動かすのがメンドイ」からでしょう。
私もそんな理由でメニューを以下のような設定で非表示にしていたのですが...。(正確にはメニュー項目を1つも設定しないですが (== 非表示)。)

setwinaltkeys=yes
setguioptions=mM

set winaltkeys=yesguioptions=mにしておかないとAlt+Spaceでシステムメニューが開けなくなっちゃうんですよねぇー。

でもここ最近、私は 「マウスからキーボードに手を動かすのがメンドイ」という理由でVimのメニューを使ったりしています。

ということで今回は、Vimのメニューについて簡単にまとめたいと思います。詳しいことはVimにヘルプしてください(:h menus参照)。

メニューの表示/非表示

  • メニューを表示する。
setguioptions+=m
  • メニューを非表示する。
setguioptions-=m

メニューのデフォルト項目を設定しない。

メニューのデフォルト項目とは、上の図でいう「File Edit Tools Syntax Buffers Window Help」らのことです。
これらは"$VIMRUNTIME/menu.vim"を読み込むことで設定されます。

  • "$VIMRUNTIME/menu.vim"を読み込まない。
setguioptions+=M
  • "$VIMRUNTIME/menu.vim"を読み込む。
setguioptions-=M

メニューに項目を追加する。

メニューに新しい項目を追加するには以下のような構文になります。

menu [項目名] [コマンド]

[項目名]は項目の階層を.で区切って表します。
[コマンド]はその項目を選択した時に実行したいVimコマンドを指定します。

例:

menu Commnads.Edit\ \.vimrc                  :e $MYVIMRC<cr>
menu Commnads.-sep-                          :
menu Commnads.\.vimrcを再読み込みする。      :so $MYVIMRC<cr>

説明:

[項目名]はマルチバイト文字でも基本的にOKです。
エスケープしなければならない文字は半角スペース(0x20)とカンマ(0x2E)です。
-sep-はセパレーターを表します。ハイフン(0x2D)で括られた項目であればsepでなくても大丈夫です。
例えば、Commnads.-これはセパレータです-もセパレーターになります。
ただし、[項目名]の先頭にセパレーターを持ってくることはできません(-seq-.force\ quitとか)。

メニューから項目を削除する。

メニューから項目を削除するには以下のような構文になります。

unmenu [項目名]

[項目名]は:menuコマンドで指定したものです。

  • Commnads.Edit\ \.vimrcの項目を削除する。
unmenu Commnads.Edit\ \.vimrc
  • すべての項目を削除する。
unmenu *

メニューの項目をコマンドラインから実行する。

メニューの項目はコマンドラインからも実行することができます。
構文は項目を削除するするときと同じです。

  • .vimrcを編集する。
emenu Commnads.Edit\ \.vimrc

終わり

以上、「メニュー使っていますか?」でした。
今回紹介したメニュ-コマンドのほんの一部です。メニュ-コマンドは他にもまだまだいっぱいあります。
まぁそんなわけで、Vimのメニューを使ってみることを検討してみてはどうでしょうか?

たまにはマウスからキーボードに手を動かすこともめんどくさがりましょう

明日の記事は@manga_osyoさんです。

vimの新しく覚えたコマンド

$
0
0

いつもQiitaを自分用メモとして使ってますが、今日も自分用メモとして。

vimの最近覚えた小技

・カーソルのある単語を後方検索
*

・カーソルのある単語を前方検索
#

・カーソルのある単語を削除して挿入モードに以降
cw
・カーソルのあるところから単語数を指定し削除して挿入モードに以降
c(単語数)w

そろそろneocomplcacheを入れようかしら。

kaoriyaさんのvimにpluginを追加するスマートな方法

$
0
0

vim74-kaoriya-win32\plugins\にプラグインをディレクトリごと入れるだけで、認識されます。
昔気づかなくてvim74-kaoriya-win32\vim74\に展開して入れてました・・。

plugins
plugins/autofmt
plugins/autofmt/autoload
plugins/autofmt/autoload/autofmt
plugins/autofmt/doc
plugins/autofmt/test
plugins/autofmt/tools
plugins/golang
plugins/golang/autoload
plugins/golang/autoload/go
plugins/golang/ftdetect
plugins/golang/ftplugin
plugins/golang/ftplugin/go
plugins/golang/indent
plugins/golang/plugin
plugins/golang/syntax
plugins/kaoriya
plugins/kaoriya/autoload
plugins/kaoriya/autoload/kaoriya
plugins/kaoriya/keymap
plugins/kaoriya/plugin
plugins/kaoriya/syntax
plugins/unite.vim-master
plugins/unite.vim-master/autoload
plugins/unite.vim-master/autoload/unite
plugins/unite.vim-master/autoload/unite/filters
plugins/unite.vim-master/autoload/unite/kinds
plugins/unite.vim-master/autoload/unite/sources
plugins/unite.vim-master/autoload/vital
plugins/unite.vim-master/autoload/vital/_b268d8d
plugins/unite.vim-master/autoload/vital/_b268d8d/Data
plugins/unite.vim-master/autoload/vital/_b268d8d/System
plugins/unite.vim-master/doc
plugins/unite.vim-master/plugin
plugins/unite.vim-master/plugin/unite
plugins/unite.vim-master/syntax
plugins/unite.vim-master/vest
plugins/vimdoc-ja
plugins/vimdoc-ja/doc
plugins/vimdoc-ja/syntax
plugins/vimfiler.vim-master
plugins/vimfiler.vim-master/autoload
plugins/vimfiler.vim-master/autoload/unite
plugins/vimfiler.vim-master/autoload/unite/filters
plugins/vimfiler.vim-master/autoload/unite/sources
plugins/vimfiler.vim-master/autoload/vimfiler
plugins/vimfiler.vim-master/autoload/vimfiler/columns
plugins/vimfiler.vim-master/autoload/vital
plugins/vimfiler.vim-master/autoload/vital/_13055f8
plugins/vimfiler.vim-master/autoload/vital/_13055f8/Data
plugins/vimfiler.vim-master/autoload/vital/_13055f8/System
plugins/vimfiler.vim-master/autoload/vital/_13055f8/Vim
plugins/vimfiler.vim-master/doc
plugins/vimfiler.vim-master/plugin
plugins/vimfiler.vim-master/syntax
plugins/vimfiler.vim-master/vest
plugins/vimproc
plugins/vimproc/autoload
plugins/vimproc/autoload/vimproc
plugins/vimproc/doc
plugins/vimproc/plugin

lightline.vimとvim-anzuで検索ヒット数を表示する

$
0
0

この内容は以下の記事を元にしたlightline.vim版になります。

先日、以下の投稿でlightline.vimを導入した後に、上の記事を知って同じ事をやりたくなったのでカスタマイズしてみました。

カスタマイズ後の見た目

画像は NeoBundle を検索して47件中、2件目に移動した結果をファイル名の右側に表示したものです。

MacVim_anzu.png

カスタマイズ内容

.vimrc
" lightline.vim関連 {{{letg:lightline = {
    \ 'colorscheme': 'landscape',
    \ 'active': {
    \   'left': [
    \       ['mode','paste'],
    \       ['readonly','filename','modified','anzu']
    \   ]
    \ },
    \ 'component_function': {
    \   'anzu': 'anzu#search_status'
    \ }
    \ }
"}}}" vim-anzu関連 {{{
nmap n<Plug>(anzu-n)
nmap N<Plug>(anzu-N)
nmap * <Plug>(anzu-star)
nmap # <Plug>(anzu-sharp)
augroup vim-anzu
" 一定時間キー入力がないとき、ウインドウを移動したとき、タブを移動したときに" 検索ヒット数の表示を消去する
    autocmd!
    autocmd CursorHold,CursorHoldI,WinLeave,TabLeave * call anzu#clear_search_status()
augroup END
"}}}

lightline.vimの設定

  1. anzu#search_status()が検索ヒット数を出力するので、component_functionにキーanzuで登録します。
  2. 表示位置はキャプチャ画像の青い部分のファイル名の右側にしたいので、先程登録したanzuを`g:lightline.active.leftの2つ目のリストの最後に追加します。

また、anzuの位置を変えれば表示位置も変わります。
たとえば左端の白い場所に表示したいなら、1つ目のリストに追加します。

vim-anzuの設定

n, N, *, #のキーマップはvim-anzuのExampleと一緒ですが、消去は以下のタイミングで自動実行しています。

  • 一定時間キー入力がないとき (CursorHold,CursorHoldI)
  • ウインドウを移動したとき (WinLeave)
  • タブを移動したとき (TabLeave)

root権限のないLinuxサーバーの/home下にzsh5.0.2とvim7.4をローカルインストールする

$
0
0

よくインストールする割にメモを無くしてしまうので健忘録

zsh5.0.2のインストール

$ cd ~$ mkdir -p ~/local/source$ cd ~/local/source$ wget "http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz"$ tar xzvf ncurses-5.9.tar.gz$ cd ncurses-5.9$ ./configure --prefix=$HOME/local$ make$ make install$ cd ..$ wget "http://sourceforge.net/projects/zsh/files/zsh/5.0.2/zsh-5.0.2.tar.gz/download"$ tar xzvf zsh-5.0.2.tar.gz$ cd zsh-5.0.2$ ./configure --prefix=$HOME/local --enable-cflags="-I$HOME/local/include" --enable-cppflags="-I$HOME/local/include" --enable-ldflags="-L$HOME/local/lib"  --enable-multibyte --enable-locale$ make$ make install

最後に、alias zsh="$HOME/local/bin/zsh" を.bashrcに追記。これでzshを実行するとzshに切り替わる。

vim7.4のインストール

$ cd ~$ mkdir -p ~/local/source$ cd ~/local/source$ wget "ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2"$ bzip2 -dc vim-7.4.tar.bz2 | tar xvf -$ cd vim74/$ ./configure --enable-multibyte --enable-xim --enable-fontset --with-features=big --prefix=$HOME/local$ make$ make install

最後に、alias vim="$HOME/local/bin/vim" を.zshrcと.bashrcに追記。これでvimがローカルのものに切り替わる。

各種dotfilesは、以下のものをcloneしてsetupしたりして使う。
https://github.com/sifue/dotfiles

.zshrcは以下のものをコピーして使うと便利。
https://raw.github.com/sifue/dotfiles/master/.zshrc.linux
他のdotfileは好き嫌いが結構あるので、参考程度に。

Vimで矢印キーの有効無効を切り替える

$
0
0

実践Vimを読んでいます、基本機能の習得・おさらいにはとても良い本だと思います。

さて、

コラム:矢印キーに指を伸ばすクセをやめる

によると、 矯正期間に限り vimrcで矢印キーを無効にしてしまうという例があった。

まだまだhjklでの移動をしない軟弱者なので、切り替えできるようにしてみた。

.vimrc
function! HardMode ()noremap<Up><Nop>noremap<Down><Nop>noremap<Left><Nop>noremap<Right><Nop>endfunctionfunction! EasyMode ()noremap<Up><Up>noremap<Down><Down>noremap<Left><Left>noremap<Right><Right>endfunction

command! HardMode call HardMode()
command! EasyMode call EasyMode()

これで:HardModeと打てば矢印キーが無効になり、:EasyModeでまた有効にできた。集中して作業できる時にHardModeにしてみよう。

なお、EasyModeExploreと出だしがかぶっているので、Eをよく使う人は別名にしましょう。


subvimプラグインを使ってみた

$
0
0

思いの外凄かったので。

cmd+k, cmd+tを押すとこんな画面になります。

$ git clone https://github.com/fatih/subvim.git
$ cd subvim
$ make
[ -d ~/.vim/ ]|| ln -s /Users/username/local/git/subvim/vim/ ~/.vim
[ -f ~/.vimrc ]|| ln -s /Users/username/local/git/subvim/vim/base/vimrc ~/.vimrc
[ -f ~/.gvimrc ]|| ln -s /Users/username/local/git/subvim/vim/base/gvimrc ~/.gvimrc
[ -f ~/.ctags ]|| ln -s /Users/username/local/git/subvim/ctags ~/.ctags
$ rm -r ~/.vim/ ~/.vimrc ~/.gvimrc ~/.ctags
$ make

MacVimをダウンロードし、実行。

vimでhtmlをスラスラ書くためのレシピ

$
0
0
  • ただの、自己満足乱れ書き
  • ふむ、下々の文章でも見てやるかって人だけ見てくれればおk
  • 対象はvimはじめたいという人から中級者ぐらい

vimでhtmlファイルを編集するときに知ってると気持ち良くなれるコマンド

というか最低限覚えておかないと、コーディング時間が3倍以上になる系のコマンド。

アクション範囲ターゲットの3つの組み合わせコマンド

例)citとタイプ

<div>text</div> => <div></div>
                       ↑消えて挿入モードに移行
  • citcはアクション。cの場合は削除して挿入モードに変更。他のアクションに置き換える事も可。d(削除)v(選択)など。
  • citiは範囲。iはタグの中身が範囲でaに置き換えるとタグ全体が範囲になる。上記の場合でaにすると<div></div>ごと消えて挿入モードになる。
  • cittはターゲット。tの場合はタグに対して行う。他にも'"<>{}()と言ったような何かで挟むものに使える。<>のような左右で違う記号はどちらか一方で良い。例ci<

その逆はプラグインsurround.vimで。(下の方で紹介)

アクション+検索の組み合わせコマンド

例)ct"とタイプ

image4image5

  • ct"cは削除して挿入モード。もちろん他のアクションなども使える。dvなど。
  • ct"tは次に挿入した文字の手前までカーソルを移動。fの場合は検索する文字も含める。
  • ct"は検索する文字

ちなみに、t(文字単体)のかわりに/(文字列)使うのも結構強力。
例)c/</div>などするとカーソル位置から</div>まで削除して挿入モード。

ctrl+v(矩形範囲)

矩形範囲を使うといろいろと便利
img1img2img2
1. ctrl+vで縦に選択
2. Iを挿入し適当に文字列を挿入
3. escするとあら不思議。すべてに文字列が入る。

Iを他のアクションに変える事も可。例えばdとタイプしたら選択しているところを削除。
これを使えるようになると数行一気にインデントにしたり、コメントアウトしたり、いろいろと使える。

入れていると気持ち良くなれるプラグイン

surround.vim

DL => http://www.vim.org/scripts/script.php?script_id=1697

unzip surround.zip
cp ./surround/plugin/surround.vim ~/.vim/plugin/

使用例

こんにちは ← vで選択後にS<div>と入力
<div>こんにちは</div> 

タグ以外にも'"、括弧系もできる。
逆ももちろんできる。

<div>こんにちは</div> ← dstと入力
こんにちは

削除して別のものに付け替える

<div>こんにちは</div> ← cst<span>と入力
<span>こんにちは</span>

他にもあるが、主要なのはこの三つ。

emmet.vim (zen coding)

DL => https://github.com/mattn/emmet-vim

unzip emmet-vim-master.zip
cp ./emmet-vim/plugin/emmet.vim ~/.vim/plugin/
cp ./emmet-vim/autoload/emmet.vim ~/.vim/autoload/
cp -a ./emmet-vim/pautoload/emmet ~/.vim/autoload/

使用例

html:5 ← 入力後に<ctrl+y>,と入力

<!DOCTYPE html>
<html lang="en">←enをjaに変え方は一番したに記述
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

</body>
</html>
div>ul>li.class#id_$$*5 ← 入力後に<ctrl+y>,と入力

<div>
    <ul>
        <li id="id_01" class="class"></li>
        <li id="id_02" class="class"></li>
        <li id="id_03" class="class"></li>
        <li id="id_04" class="class"></li>
        <li id="id_05" class="class"></li>
    </ul>
</div>

説明

  • >は下の階層
  • +は同階層
  • *数値は個数
  • $は連番が入る $を並べた数の桁が使える
  • .はクラス名 #はID名
  • ()はブロックにできる 複雑な階層があるときなどに使用

div>(ul>li*5)+span

  • []はプロパティなど設定

a[href=http// sytle=display:none;] → <a href="http//" sytle="display:none;"></a>

ちなみに、a:linkと書くと<a href="http://"></a>になるみたいな書き方も用意されているが、量が多いので割愛。
cssも用意されている(pos:rposition:relative;など)が量が多いので割愛。
zen coding css 一覧で先生に聞いて下さい。

設定 lang="en"を"ja"に変更

sed -i -e "s/'lang': \"en\",/'lang': \"ja\",/g" ~/.vim/autoload/emmet.vim

~/.vim/autoload/emmet.vimの中にある'lang': "en"を'lang': "ja"に変更すればおk

2013/09/08 13:32追記コメントにてご指摘を受けたので追記
ソースをわざわざいじらなくてもvimrcの設定で行けるみたいです。普通に公式に書いてました。

let g:user_emmet_settings = {
\   'lang' : 'ja'
\ }

yankring.vim

yankの履歴をさかのぼる(コピペの履歴をさかのぼる)

DL => http://www.vim.org/scripts/script.php?script_id=1234

unzip yankring_170.zip
cp ./yankring_170/plugin/emmet.yankring.vim ~/.vim/plugin/

使用方法
pでペーストした後、ctrl+nで昔のyankにさかのぼれる。反対はctrl+p

後あれば編集に役立つプラグイン(詳しくは先生に聞いて下さい)

  • NERD_tree.vim ディレクトリのtree表示
  • changed.vim 最後に保存したときからどこの行に追加、削除、変更があったかを左側に表示
  • closetag.vim 閉じタグを自動挿入
  • mru.vim 開いたファイルの履歴を管理。NERD_treeを使っていればあまり使わない。

Vim使用中にShellが触りたくなった時に都度Vimを終了している人へ...

$
0
0

ターミナルでVim使用中にがっつりShellで操作したい、けどVimshellとか入っていないよ!

そんな場合はvimをCtrl+zでバックグラウンドにして、終わったらfgでフォアグラウンドにしてあげればいい。

同僚が都度、vimを終了させていたりするので教えてあげたり。

謎のエラー

$
0
0

2013-08-27 15:16:25.253 MacVim[3233:407]
Warning - conversion from 64 bit to 32 bit integral value requested within NSPortCoder,
but the 64 bit value 9223372036854775807 cannot be represented by a 32 bit value

MacVimを使って日本語入力したらというエラーログがでたので、Google日本語入力からことえりに戻したらエラーが出なくなった

Vimで、HTMLの中身でバリデーターを変える

$
0
0

言い訳

最近の案件はIE7がほとんど淘汰されてIE8以上になりましたが、まだまだHTML5にはいけませんね。
会社ではHTML4.01 Strictを原則使用するポリシーになっていますが、一方でスマホ向け案件ではHTML5+CSS3が使い放題で色々と迷います。

HTML 4.01StrictにはAnother HTML Lintを使っていますが、こいつはHTML5に対応してくれていません。
一方、有志がHTML5のバリデータを叩いてくれるものを作ってくれているので、自動判別するようにしました。

といっても、HTML5独特のDOCTYPE HTMLを検索してるだけです。

ちなみにBufWritePostで連動してるため、保存したらすぐにチェックされます。
需要があるかはわかりませんが。

注意

  • Windowsベースで使ってるので、適当にパス等は変えて下さい。
  • NeoBundle使わないやり方は適当になんとかしてください
vimrc
"vimrc上部
NeoBundle 'https://github.com/hokaccha/vim-html5validator.git'"下のほうau!BufWritePost *.html call TypeHTML()function! TypeHTML()let html = search('<!DOCTYPE HTML>')if(html<1)"for XHTML
    autocmd!BufWritePost<buffer> :silentmakeelse"for HTML5au!BufWritePost *.html :HTML5Validate
  endifendfunction
$vim/compiler/htmllint.vim
if exists("current_compiler")finishendiflet current_compiler ="htmllint"if exists(":CompilerSet")!=2" older Vim always used :setlocal
  command -nargs=* CompilerSet setlocal<args>endif

CompilerSet makeprg=perl\ c:\htmllint.sjis\htmllint\ %
CompilerSet errorformat=%f(%l):%m

memo: cuiのvimで、csapproxを使いつつリローダブルなvimrcにする方法

$
0
0
  • 使用しているcolorschemeはgui用の色設定しかしない
  • csapproxを使っている
  • vimrcの再読み込み時、色設定がおかしくなる

詳しい原因まで追ってないけど、so ~/.vimrcするとcui用の色設定がおかしくなる。
redir > loghighlightで設定されてる色情報を、so ~/.vimrcの前後で出力してdiff -uしてみたら、
csapproxが設定するはずのcui用の設定がすべて失われてるのが原因だった。

じゃあ、強制的にcsapproxに仕事させるか、colorschemeのsnapshot取っておいてそいつを指定すればいい。
vimrcに次のどっちかを設定する。

append_to_your_vimrc
" 強制的に仕事させる
CSApprox!" snapshot取る
CSApproxSnapshot ~/.vim/colors/snapshot_{colorscheme-name}.vimcolorscheme snapshot_{colorscheme-name}

gvim上でマウスの中ボタンによる貼り付けを無効化したい

$
0
0

Thinkpadユーザーなのでスクロールしようとしたらgvimに貼り付けられたりしてたので対策を調べた
結果としては、以下を.gvimrcに書くだけ

.gvimrc
map <MiddleMouse> <Nop>
imap <MiddleMouse> <Nop>
map <2-MiddleMouse> <Nop>
imap <2-MiddleMouse> <Nop>
map <3-MiddleMouse> <Nop>
imap <3-MiddleMouse> <Nop>
map <4-MiddleMouse> <Nop>
imap <4-MiddleMouse> <Nop>

参考
http://www.not-enough.org/abe/manual/comm/tips.html


現在開いているファイルと同じディレクトリのファイルを簡単に開く

$
0
0

eで、現在開いてるファイルのディレクトリまでのパスを保管し、:eを開くようにします。

  • 現在のディレクトリパスを%%(任意)にmapします
  • e(任意)に:edit %%をmapします

これでeで%%(現在のディレクトリパス)を開いてくれます。

cnoremap %% <C-R>=expand('%:h').'/'<cr>                                                                                                              
map <leader>e :edit %%                                                                                                                               

Vim の operator プラグインをまとめた

$
0
0

この記事はVim Advent Calendar 2012 : ATND 292日目の記事になります。

今回はoperatorプラグインのまとめ記事です。
以前に、@manga_osyoによるVim の textobj プラグインをまとめたもありました。
まぁなので、その相方をまとめてみようかと思います。

operatorプラグイン

以下、すべてmapとしてますが、実際にはnmapだったりvmapだったりします。
この辺はそのhelpなどを読んでうまく調整してください。mapをそのまま使用するのは危険です。
また、{lhs}は任意の文字列に書き換えて使ってください。

1. emonkak/vim-operator-comment

これは選択したテキストオブジェクトをコメント/アンコメントするオペレーターです。

NeoBundle 'emonkak/vim-operator-comment'

map {lhs}  <Plug>(operator-uncomment)
map {lhs}  <Plug>(operator-comment)

2. emonkak/vim-operator-sort

これは選択したテキストオブジェクトに対して、ソートするオペレーターです。

NeoBundle 'emonkak/vim-operator-sort'

map {lhs}  <Plug>(operator-sort)

3. kana/vim-operator-replace

これは選択したテキストオブジェクトに対してレジスタを汚さない文字列置換するオペレーターです。

NeoBundle 'kana/vim-operator-replace'

map {lhs}  <Plug>(operator-replace)

4. pekepeke/vim-operator-normalize-utf8mac

これは選択したテキストオブジェクトに対してiconv(v:val, "utf-8-mac", "utf-8")をするオペレーターです。

NeoBundle 'pekepeke/vim-operator-normalize-utf8mac'

map {lhs}  <Plug>(operator-normalize_utf8mac)

5. pekepeke/vim-operator-shuffle

これは選択したテキストオブジェクトの各文字をランダムに並び替えるオペレーターです。

NeoBundle 'pekepeke/vim-operator-shuffle'

map {lhs}  <Plug>(operator-shuffle)

6. pekepeke/vim-operator-tabular

これは選択したCSV形式なテキストオブジェクト、もしくはTSV形式なテキストオブジェクトを
Markdown,Textile,Backlogのテーブル書式に変換するオペレーターです。

NeoBundle 'pekepeke/vim-operator-tabular'" Requires
NeoBundle 'pekepeke/vim-csvutil'" Markdown
map {lhs} <Plug>(operator-md_tabularize_tsv)
map {lhs} <Plug>(operator-md_tabularize_csv)
map {lhs} <Plug>(operator-md_untabularize_tsv)
map {lhs} <Plug>(operator-md_untabularize_csv)" Textile
map {lhs} <Plug>(operator-textile_tabularize_tsv)
map {lhs} <Plug>(operator-textile_tabularize_csv)
map {lhs} <Plug>(operator-textile_untabularize_tsv)
map {lhs} <Plug>(operator-textile_untabularize_csv)" Backlog
map {lhs} <Plug>(operator-backlog_tabularize_tsv)
map {lhs} <Plug>(operator-backlog_tabularize_csv)
map {lhs} <Plug>(operator-backlog_untabularize_tsv)
map {lhs} <Plug>(operator-backlog_untabularize_csv)

例:

" 変換前のテキスト
aaa,bbb,cc
aiueo,kaki,kukekosashi
aiueo,kaki,kukekosashi


" Markdown
aaa  |bbb |cc-----|----|-----------
aiueo|kaki|kukekosashi
aiueo|kaki|kukekosashi


" Textile
aaa  |bbb |cc         
aiueo|kaki|kukekosashi
aiueo|kaki|kukekosashi

" Backlog|aaa  |bbb |cc|h|aiueo|kaki|kukekosashi||aiueo|kaki|kukekosashi|

7. rbtnn/vim-operator-quickhl.vim

これは選択したテキストオブジェクトに対してQuickhlAddをするオペレーターです。

NeoBundle 'rbtnn/vim-operator-quickhl.vim'" Requires
NeoBundle 't9md/vim-quickhl'

map {lhs}  <Plug>(operator-quickhl)

8. rhysd/vim-clang-format

これは選択したテキストオブジェクトに対してclang-formatコマンドを使ってコードを整形するオペレーターです。
参照: http://rhysd.hatenablog.com/entry/2013/08/26/231858

NeoBundle 'rhysd/vim-clang-format'

map {lhs}  <Plug>(operator-clang-format)

9. rhysd/vim-operator-evalruby

これは選択したテキストオブジェクトをRuby式として評価して、その結果で置き換えるオペレーターです。

NeoBundle 'rhysd/vim-operator-evalruby'

map {lhs}  <Plug>(operator-evalruby)

10. rhysd/vim-operator-filled-with-blank

これは選択したテキストオブジェクトの各文字をスペースに置換するオペレーターです。

NeoBundle 'rhysd/vim-operator-filled-with-blank'

map {lhs} <Plug>(operator-filled-with-blank)

11. rhysd/vim-operator-trailingspace-killer

これは選択したテキストオブジェクトの末尾のホワイトスペースを削除するオペレーターです。

NeoBundle 'rhysd/vim-operator-trailingspace-killer'

map {lhs} <Plug>(operator-trailingspace-killer)

12. sgur/vim-operator-openbrowser

これは選択したテキストオブジェクトを引数にしてopenbrowser#smart_search()を行うオペレーターです。

NeoBundle 'sgur/vim-operator-openbrowser'" Requires
NeoBundle 'tyru/open-browser.vim'

map {lhs} <Plug>(operator-openbrowser)

13. tek/vim-operator-ag

これは選択したテキストオブジェクトを引数にしてg:operator_ag_cmdのコマンドを行うオペレーターです。
Agコマンド目的で作られているが、普通に他のコマンドでも使えそう。

NeoBundle 'tek/vim-operator-ag'

map {lhs} <Plug>(operator-ag)
map {lhs} <Plug>(operator-agg)

14. tek/vim-operator-assign

これは選択したテキストオブジェクトを代入式へ分離させるオペレーターです。

NeoBundle 'tek/vim-operator-assign'

map {lhs}  <Plug>(operator-assign)

例:

" 変換前call func(str . 'foo')" 変換後letbar= str . 'foo'call func(bar)

15. thinca/vim-operator-sequence

これは複数のオペレーターから1つの新しいオペレーターを作成する補助プラグインです。
参照: http://d.hatena.ne.jp/thinca/20110415/1302879419

NeoBundle 'thinca/vim-operator-sequence'

16. tyru/operator-camelize.vim

これは選択したテキストオブジェクトをsnake_caseやcamelCaseに変換するオペレーターです。

NeoBundle 'tyru/operator-camelize.vim'

map {lhs}  <Plug>(operator-camelize)
map {lhs}  <Plug>(operator-decamelize)

17. tyru/operator-html-escape.vim

これは選択したテキストオブジェクトに対してHTMLエスケープ/アンエスケープを行うこオペレーターです。

NeoBundle 'tyru/operator-html-escape.vim'

map {lhs}  <Plug>(operator-html-escape)
map {lhs}  <Plug>(operator-html-unescape)

18. tyru/operator-reverse.vim

これは選択したテキストオブジェクトを反転するオペレーターです。

NeoBundle 'tyru/operator-reverse.vim'

map {lhs}  <Plug>(operator-reverse-text)

19. tyru/operator-star.vim

これはthinca/vim-visualstarのオペレーターです。

NeoBundle 'tyru/operator-star.vim'" Requires
NeoBundle 'thinca/vim-visualstar'

map {lhs}  <Plug>(operator-*)
map {lhs}  <Plug>(operator-g*)
map {lhs}  <Plug>(operator-#)
map {lhs}  <Plug>(operator-g#)

20. vimtaku/vim-operator-ppd

すいません、この使い道がわからなかったです。とりあえず、見つけたので載せておきます。

NeoBundle 'vimtaku/vim-operator-ppd'

map {lhs}  <Plug>(operator-ppd)

21. yomi322/vim-operator-suddendeath

これは選択したテキストオブジェクトを突然死なテキストに変換するオペレーターです。
参照: http://yomi322.hateblo.jp/entry/2013/02/04/000316

NeoBundle 'yomi322/vim-operator-suddendeath'

map {lhs}  <Plug>(operator-suddendeath)

終わり

以上、「Vim の operator プラグインをまとめた」でした。
この記事を書いてみて「textobjに比べてoperatorは少ないなー」って思いました。
まぁなので、皆さん、operatorプラグインをどんどん書いてVACを書きましょう!

golangのパッケージインポート系のvimコマンド集

Vim上でビジュアルモードで選択した範囲を、awkで処理して結果を貼付ける

$
0
0

Vimには、外部コマンドの実行結果でテキストを置換する機能がある。
これを使えば、コマンド上ではawkでサクッとやりたくなるようなテキスト処理もVim上でできる。

例えば、以下のようなテキストをawkで処理する場合を考える。

1  2  3  4  5
6  7  8  9  10
11 12 13 14 15

これらの行をビジュアルモードで選択し、その状態から:!awkを押下し処理を記述することで、選択行を任意のawkスクリプトに食わせて処理した結果に置換できる。

:'<,'>!awk '{print $2}'

数値の羅列の中から、2列目の平均値を算出するなどの場合でも楽に記述可能。

:'<,'>!awk '{ sum += $2; num++ } END { print sum/num }'

ビジュアルモードからでは無く、コマンド中で処理する行を指定してもOK

:1,3!awk '{print $2}'

VimでHaxeを書く時に入れておきたいプラグイン1つ and more

$
0
0

こんにちわ。
Haxeの開発環境と言えば、ネット上で紹介されるのはFlashDevelopやIDEAばかり。しかしこれらのIDEは、導入がめんどうだったり、独自のビルド用ファイルを使っていたりと気軽さや小回りに欠けるきらいがあります。

やはり、苛虐趣味の変態あるいは自分の頭のスペックはエディタだけで開発できるほどハイスペックと自慢したい人種であるところの僕としては、Haxeの開発といえどやはりVimで行いたいものです。

幸い、Haxeは公式のコンパイラが高性能かつ、Makefile的なモノにあたる*.hxmlの仕様が簡潔なのもあり、素のVimでもほぼストレスなく開発出来ます。
そして、その上で以下にあげるプラグインを導入すれば、IDEに負けない、人に優しいプヨグラミング環境の構築が実現でタイピング速度も倍点ですね?
 

vaxe

jdonaldson/vaxe

オムニ補完をはじめとした機能を全部乗せで提供する、オールインワンなHaxe用プラグインです。
半年ほど前は不安定だったりしたのですが、今ではかなり安定して動作しています。

色々なプラグインとの連携も考慮されており、公式の画像だとこんな感じになっちょります。
公式の

このプラギンの一番のメリットはやはり、Haxeコンパイラを利用した高速で高度なオムニ補完機能です。
公式でのアナウンスーはありませんが、Neocompleteから利用出来ます。

以下はVaxeの設定例です。
細かいところとかは、GithubのREADMEやhelpを参照したほうが安全です。

"set autogroup
augroup MyAutoCmd
  autocmd!
augroup END

" vaxeの動作にはautowriteを有効にする必要がある
autocmd MyAutoCmd FileType haxe
      \ setlautowrite
autocmd MyAutoCmd FileType hxml
      \ setlautowrite
autocmd MyAutoCmd FileType nmml.xml
      \ setlautowriteletg:vaxe_haxe_version =3function!s:init_vaxe_keymap()" .hxmlファイルを開いてくれるやつnnoremap<buffer>,vo :<C-u>call vaxe#OpenHxml()<CR>" タグファイル作ってくれるやつ(別途、.ctagsの定義をしませう)nnoremap<buffer>,vc :<C-u>call vaxe#Ctags()<CR>" 自動インポートなnnoremap<buffer>,vi :<C-u>call vaxe#ImportClass()<CR>endfunction

autocmd MyAutoCmd FileType haxe calls:init_vaxe_keymap()
autocmd MyAutoCmd FileType hxml calls:init_vaxe_keymap()
autocmd MyAutoCmd FileType nmml.xml calls:init_vaxe_keymap()" 以下はNeocomplete用if!exists('g:neocomplete#sources#omni#input_patterns')letg:neocomplete#sources#omni#input_patterns = {}
endifletg:neocomplete#sources#omni#input_patterns.haxe ='\v([\]''"\)]|\w|(^\s*))(\.|\()'

  

おすすめの連携プラグイン

vaxe的には、Tagbar, syntatic, powerline or airline の連携をおすすめ(という備えている)ようですが、僕はTagbar以外はどれも好きになれないので代替となるものを入れます。

  • Tagbar(そのまま)

  • エラー箇所を表示 vim-hier

  • カーソル化のエラー情報を出力 quickfixstatus

  • クールなステータスライン lightline.vim

お好みの方法でこの四つを導入します。

NeoBundle 'majutsushi/tagbar'
NeoBundle 'cohama/vim-hier'
NeoBundle 'dannyob/quickfixstatus'
NeoBundle 'itchyny/lightline.vim'

  

次に、vaxeは :make を定義してくれていますので、makeすれば自動でbuild.hxmlを探し出してコンパイルとエラー箇所の解析を行ってくれます。
以下のようなアレを定義して、hierやstatusの挙動やらをいい感じに制御したります。

" make後の結果をquickfixへ出力させる
autocmd QuickfixCmdPost makecopen
autocmd QuickfixCmdPost makecall<SID>auto_ccl()function!s:auto_ccl()if&ft!='qf'returnendif" リストが空ならそのまま閉じるif getqflist()== []
    :QuickfixStatusDisable
    :ccloseelse
    :QuickfixStatusEnable
  endif
  :HierUpdate
endfunction

  

最後に、ステータスラインです。見たところ、ビルド用のhxmlファイル名と、ビルドターゲットを表示してくれるもののようです。
なので、vaxeのソースをのぞいてそれっぽい関数を勝手に使います。

function! MyVaxe()if&ft=='haxe'return pathshorten(fnamemodify(vaxe#CurrentBuild(),':p:.')) . ' [' . vaxe#CurrentBuildPlatform() . ']'elsereturn''endifendfunction

こんな感じの関数を作って、'component_function'に突っ込んでやりましょう。

なお、lightlineのカスタマイズについてはlightline.vim を使って vim のステータスラインをカスタマイズの記事がとても参考になります。

  

以上のプラグインを入れてみたらイメージ図は以下のような感じになります。

Screen Shot 2013-09-19 at 12.00.42 AM.png

端末のVimの画像なので、GVim系を使えばもっときれいに表示出来る可能性が重点ですね?

Viewing all 5720 articles
Browse latest View live


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