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

VimでCoffeeScriptのSyntaxHighlightを当てる方法


検索・置換を便利にするvim-abolish

$
0
0

これは Vim Advent Calendar 2014 11日目 の記事です。


日頃Railsを書いている。その際vim-abolishが便利なんだけど、日本語記事で紹介されている場面をあまり見ないので紹介したい。

インストール

インストールはいつものとおりVundleやNeoBundleで。

NeoBundle 'tpope/vim-abolish'

3つ機能

ところでvim-abolishは大きく分けてAbbreviationSubstitutionCoercionの3つに分類されるが、Abbreviationは使っていないので、SubstitutionとCoercionだけを取り上げる。

Substitution

Vimで :substituteと言えば置換処理に使うコマンドだが、Substitutionはこの置換処理に加えて検索を便利にしてくれる機能だ。

賢い検索

個人的にvim-abolishいれてから普通の検索はあまり使わなくなった。便利機能を紹介する。

気が利く大文字・小文字マッチ

Vimの検索はデフォルトで大文字・小文字を区別する。/boxは "box" にはマッチするが "Box" にはマッチしない。ignorecaseオプションをつけると大文字・小文字の区別が無くなるので /boxは "box" と "Box" にマッチするが "bOX" にもマッチする。

:Subvertコマンドはこの挙動をいい感じにしてくれる。:Subvert/boxは "Box" "box" "BOX" にマッチする。:S/boxでもOK。

スネークケース、キャメルケースにも対応

大文字・小文字だけだと「 ignorecaseして /boxでいいじゃないか」と思うかも知れない。

:Subvertコマンドはスネークケース、キャメルケースなどの区別もしてくれる。例えば :S/hello_worldは "HelloWorld" "HELLO_WORLD" "hello_world" にマッチする。 /hello_worldでは "HelloWorld" にはマッチしない。

Railsの場合、モジュール名やクラス名は "ModuleName" 形式で、ファイル名は "module_name" で書かれる。 :Subvertならこの2つを一緒に検索できる。

組み合わせることができる

当然だが /mouseは "mouse" にはマッチするが "mice" にはマッチしない。

:S/m{ouse,ice}は "mouse" "Mouse" "MOUSE" "mice" "Mice" "MICE" にマッチする。

他の使い方としては :S/{foo,bar}_concernで "FooConcern" "FOO_CONCERN" "foo_concern" "BarConcern" "BAR_CONCERN" "bar_concern" にマッチする。

ファイルを指定する

今まではカレントバッファを対象にしていたが、検索対象のファイルを指定できる。

:S/{foo,bar}_concern/ app/models/**/*.rbとするとapp/modelsディレクトリ以下のrubyファイルの中から "FooConcern" "FOO_CONCERN" "foo_concern" "BarConcern" "BAR_CONCERN" "bar_concern" にマッチした箇所がQuickfixに入る。(ここでは _concernのあとに /が必要なことに注意)

関連記事: vimgrepとQuickfix知らないVimmerはちょっとこっち来い - Qiita

賢い置換

:S/{pattern}/{string}/[flags]で置換ができる。使い方は :substituteとほぼ同じだが、もちろん :substituteより痒いところに手が届いている。

入れ替え

:S/{vim,emacs}/{emacs,vim}/gcを実行すると "vim" と "emacs" を入れ替えることができる。

Coercion

これは通常モード時に、カーソルの下にある文字列のキャメルケース、スネークケースなどを入れ替える。プラグインをインストールすると勝手にいくつかのキーバインドが登録される。

コマンド動作
crs"SnakeCase" → "snake_case"
crm"mixed_case" → "MixedCase"
crc"camel_case" → "CamelCase"
cru"upper_case" → "UPPER_CASE"

おわりに

便利なので使ってみて欲しい。

vimでヤンクした文字列を別のファイルでペーストしようとすると「E353: Nothing in register *」というエラーが出る

$
0
0

.viminfoのパーミッションがおかしくなってて権限がなかっただけでした
死にたい

ちなみに同一ファイル内であれば.viminfoのヤンク&ペーストは可能。ヤンクしてファイルを閉じるタイミングで.viminfoに永続化されるんだが、そこで権限なくてエラーってことですね
死にたい

Vimを体系的に学ぶつもりのない人のためのVim講座―Exコマンド編

$
0
0

前回からだいぶ間が空いてしまいましたが、今日こそExコマンドについて、あんまりVimが得意でないそこのあなたのために書きます(得意な方は間違っていたらツッコミを…)

Exコマンドの基本

Exコマンドは、Vimを一度でも使ったことがある人なら必ずお世話になっています(その意味で、使用頻度はノーマルモードの次、ヘタしたらインサートモードより上ということもありえます、文字を消すだけならインサートモードに入る必要もないので)。そう、Vimを閉じるときに使う:qです。あれは:quitの省略形ですが、立派なExコマンドです。

Exコマンドを入力するには:をノーマルモードで押します。すると画面の一番下にカーソルが移動するので(コマンドラインといいます)、そこにコマンドを入力してEnterを押せばコマンドが実行されます。アラ簡単。

置換を試す

では、最も使われるコマンドの一つであろう、substituteコマンドを実行してみましょう。といっても、substituteでは長すぎるので普通はsが使われますので、そちらで行きましょう。foofooという内容のテキストを適当に作り、以下のコマンドを実行します。

:s/foo/bar

…おや、確かに置換は実行されましたが、barfooとなってしまいました。実はsubstituteは最初の一回のマッチだけ置換し、残りは置換しないのです。

この動作を変更するには、コマンドの最後に/gを追加します。ノーマルモードでuを押して置換を取り消し、以下のコマンドを実行します。

:s/foo/bar/g

どうでしょうか、うまくbarbarの結果が得られたでしょうか。

範囲指定

さらに試してみましょう。
以下の内容のテキストを用意します。

hoge
fuga
foo
bar

そしてカーソルをhogeの行に移動させ、以下のコマンドを実行します。

:s/f/z/g

さて結果は…おや、変わっていないですね。実はこれがExコマンドの弱点、今いる行にしか効果がないのです。もともとVim(というより前身のVi)がラインエディタなので、そういう制約があるのだと思われます。

しかし、21世紀でも現役バリバリのエディタであるVim、そこは(少々不格好ですが)しっかりと対応しています。先ほどの置換コマンドをファイル全体に適用させてみましょう。

Exコマンドの書式は

:[range]Command

という書式です。そしてファイル全体を表すには%を使います。よって、ファイル全体に対して置換する際のコマンドは

:%s/f/z/g

となります。

ね、簡単でしょう?

続・範囲指定

範囲の指定方法は%以外にもたくさんあります。むしろ、%の指定は方法としては特殊な部類に入ります(が、多用されるので自然とおぼえます)。最も汎用的な説明としては、行指定子,行指定子となります。行指定子には数字の他に正規表現を使うこともできます。さらにオフセットも使えるために異常なほど高度な範囲指定も行えます。例えば、「5行目から下、最初にfoobarという文字列が出現する行の2行上まで」であれば

:5,/foobar/-3

のように書けます(-3となっているのは、該当行を-1とカウントしているためです)。
…とまあ仰々しく説明しましたが、ぶっちゃけ、使用頻度としては%がダントツ一番なため、それだけ覚えましょう。

ビジュアルモードと組み合わせる

…おっと、一つ忘れていました。範囲指定をするのに書式を使って指定するのは慣れれば速くてクールだし、何よりハッカーっぽいのですが、実際問題として、範囲というのは人間の目に見えるものなので、それをインタラクティブに表わしてくれる、ようするにマウスで範囲選択するみたいに指定できると便利ですよね。まあ、Vimmerとしては範囲選択にマウスを使った時点で敗北感を噛みしめるわけですが、範囲選択とハイライトをインタラクティブに行えるモードがVimには用意されています。それがビジュアルモードです。

このモードはその説明だけで本の1章に値するほどのものですが、ここではあくまでExコマンドの説明に必要な分にとどめておきます。

ノーマルモードでvを押すとビジュアルモードに移行しますので、wとかを押して適当にカーソルを移動させましょう。すると、移動した部分がハイライトされていると思います。ある程度ハイライトされた部分が大きくなったら、:を押しましょう。すると…

おや、コマンドラインに:'<,'>と表示されていますね。これは、今ビジュアルモードで選択した部分がすでに範囲指定されている状態であることを意味しています。続けて置換コマンドを実行すると、範囲内のみが置換の対象となることがわかるかと思います。

これは実際非常に便利です。というのは、実際のプログラミングにおいては、置換したい部分が事前にハッキリしていることは稀であり、かつ微妙に散らばっている場合が多いからです。そんな場合は、事前に範囲を綿密に考えてからやるより、ビジュアルモードのままファイル内を移動し、ここだと思ったタイミングで置換するほうが効率的な場合も多いと思います。

外部コマンドを使ってみる

(以下は微妙にオマケっぽいです)

ところで、コマンドラインと言えば当然、シェルが思い浮かびます(ですよね?)。シェルのコマンドはVimで使えるのでしょうか。例えば、

:pwd

おお、動いた。なんだ、できるんじゃん。じゃあ、

:ls

!?

なんかよくわかんないのが出力された!

実はこのコマンド、listはlistでも、バッファーのリストを表示するコマンドなんですね(バッファーというのはこの場合は開いているファイルのことです)。いやでも、俺はカレントディレクトリのファイル一覧が見たいんだ!という人のためにVimが用意してくれている方法はこちら。

:!ls

出力が画面下方に表示されたと思います。今度はちゃんと期待通りでしたね。ちなみにオプションも渡せますので、

:!ls -la

とすることもできます。画面が出力に埋め尽くされると思いますが…

よく使うコマンドリスト

せっかくなのでよく使うコマンドを挙げておきます。

コマンド()内は省略可説明
q(uit)言わずと知れた終了コマンド
w(rite)これも必須、保存コマンド
s(ubstitute)置換コマンド、範囲指定と合わせて
h(elp)ヘルプを見ます、ヘルプ重要
ver(sion)バージョン情報、どの機能が有効化されているか確かめるのに便利
reg(isters)レジスタの一覧を表示します。コピペ時に便利

この記事を最後まで呼んでくださった上級者の方は、自分でよく使うコマンドを教えてくださいー。

[Vim] The colorscheme not working in iTerm2

$
0
0

Sometimes you set the colorscheme is not working.

One possible way is going to the Preferences -> Profiles -> Terminal.

Set the Report Terminal Type to xterm-256color

Just like this:

Screen Shot 2014-12-13 at 17.11.21.png

Vimで改行コード^Mを置換しました

$
0
0

テキストファイルをVimで開いたら、^Mという改行コードが毎行入っていたので削除したくなりました。

^MをVimで置換する

^Mを置換
:% s/^M//g

^Mという改行コードにポイントがありました。Qiitaのようなウェブサイトで表示すると『^』+『M』のような文字に見えるのですけど、実際の^Mは1文字なのがポイントでした。

Vimのコマンドモードで、『Ctrl+V』を押してから、『Ctrl+M』を押すと、改行コードの^Mを入力することができました(☝ ՞ਊ ՞)

VimでEmacsのFind Alternate fileを実現

$
0
0

これは何か?

開くファイルを間違えた時に、正しいファイルで開き直すための機能が、どうやら Vim には無いようです。

Emacs から Vimに乗り換えて一週間、Vim script を勉強しつつ書いてみました。

ソース

command! -nargs=1 -complete=file FindAlternateFile call <sid>Hykw_findAlternateFile(<q-args>)

function! Hykw_findAlternateFile(file)
  let current_bufferNumber = bufnr('%')
  execute "edit " . a:file
  execute "bdelete " . current_bufferNumber
endfunction

使い方

.vim の適当な所にソースを貼り付ければOKです。あとはファイルを間違えて開いた時に

:FindAlternateFile 開き直すファイル名

で呼び出します。ちなみにTabでディレクトリ/ファイル名の補完も効きます。

vim-jsonのダブルクォート非表示機能を無効化する

$
0
0

vim-jsonは、JSONのシンタックスハイライトやインデントをいい感じにしてくれるVimプラグインです。

https://github.com/elzr/vim-json

vim-jsonでデフォルトで有効になっている機能の一つに、JSONのKey/Valueを囲んでいる「ダブルクォート」を隠して表示してくれる、というものがあります。

下のキャプチャのように、現在のカーソル行のダブルクォートのみが表示され、それ以外の行にはダブルクォートは表示されません。

vim-json

個人的にはこの機能は不要、というかJSONの編集時にはかえって邪魔になってしまうので、無効化したいと思っていました。

無効化するには、.vimrcに以下の設定を記述すればよいです。

let g:vim_json_syntax_conceal = 0

これで、下のキャプチャのようにダブルクォートが常に表示されるようになります。編集しやすくなりました。

vim-json


【Vim】Vimでソースコードを一行に圧縮する【1円にもならない無駄な技術】

$
0
0

はじめに

Vimでソースコードを一行に圧縮する方法を紹介します。
なんの役に立つかはみなさんで考えてみてください。

ひとつ思いつくのは、嫌いな先生に提出するレポートにソースコードを添付する時くらいですかね。

一行に圧縮するコマンド

ノーマルモードで、

:ggVGJ

解説

ggでコードの1行目に移動して、

Vでヴィジュアルモードにして、

Gでコードの最終行まで移動して、

Jで改行コードを削除。

一言

これの逆バージョンもあればいいのにね。

[Vim] Vim Basic Command Memo

$
0
0
NameCommand
Open previous opened fileCtrl-O
RedoCtrl-R

Vagrant環境設定(Mac)

$
0
0

開発環境を構築するツール。
とりあえず、コマンドだけでなんとかする。
自分用カキコ。

参考 : vagrantドキュメント

必要ツール

  • HomeBrew>> ぱっけーじ管理じゃーまねー。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install caskroom/cask/brew-cask #brew cask インストール
brew cask install virtualbox vagrant #virtualbox, vagrant インストール
vagrant plugin install vagrant-hostsupdater #仮想環境起動時に自動でホスト名をIPアドレスに追加。

vagrant基礎コマンド

vagrant up       #仮想環境立ち上げ
vagrant status   #現在のvagrantの状態
vagrant suspend#スリープ
vagrant resume   #スリープ復帰
vagrant halt     #停止
vagrant reload   #再起動
vagrant destroy  #仮想マシン削除
vagrant ssh      #仮想マシン接続

初期設定

  • boxの種類
  • ↑で選んで[ boxURL ]部分にURL貼ってEnter。
  • [ box名(登録名) ]は任意で名前をつける。あとで分かるように。
  • box インストールは時間掛かる。
vagrant add box [ box名(登録名)][ boxURL ]#例 vagrant box add CentOS_6.4_x86_64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20131103.box

vagrantさくっと環境構築一連の手順

mkdir VagrantTest             #場所はお好きなところで、名前もお好きなものでcd VagrantTest                #フォルダ作成
vagrant box list              #初期設定でインストールしたboxを確認
vagrant init [ box名(登録名)]#初期化
vagrant up                    #仮想環境立ち上げ
vagrant ssh                   #仮想マシン接続
# vagrant ssh仮想環境にログイン後echo"alias ll='ls -la'">> .bashrc     #alias追加source .bashrc                          #.bashrc再読み込み
sudo yum -y update                      #yumあっぷでーと
sudo yum -y install php                 #php,httpdインストール
httpd -v                                #httpd バージョン確認
sudo service httpd start                #web鯖起動
sudo chkconfig httpd on                 #httpd有効
sudo service iptables stop              #ファイアーウォール停止
sudo chkconfig iptables off             #iptables 鯖再起動後もoffにしておくexit#vagrant環境内から出る# httpd 停止させたい場合
sudo service httpd stop

# httpd 現在のステータス確認
sudo service httpd status
# vagrant環境内からexitするとVagrantfileがあるので編集
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.network "forwarded_port", guest: 80, host: 4567
#Vagrantfile更新後、一度リロード
vagrant reload

上記のコメントアウト部分を(#)を外す
192.168.33.10 をWebブラウザで接続するとApache 2 Test Pageが表示される。

また、/etc/hostsに

#例えば
192.168.33.10   local-test-page.jp.vm

記載後に

#DNSのキャッシュが残っている場合はこれで対応
sudo /usr/sbin/apachectl restart

#DNSのキャッシュを消す場合
sudo killall -HUP mDNSResponder

ブラウザでサイトを再読み込みすると、設定した【local-test-page.jp.vm】で閲覧できるようになる。

参考: macでhosts設定の手順メモ

シンボリックリンク設定

今後ローカルでファイルを編集し、vagrant環境と連動させるためにシンボリックリンクを設定。

vagrant ssh
cd /vagrant
sudo rm -rf /var/www/html
sudo ln -fs /vagrant /var/www/html

vagrantにvimをインストール

vagrant ssh
sudo yum install ncurses ncurses-devel mercurial   (諸々インストール)cd /usr/local/src
sudo hg clone https://vim.googlecode.com/hg/ vim
cd vim
sudo make && sudo make install
vim —version
echo"alias v='vim'">> .bashrc

vagrantにMySQLインストール

vagrant ssh
sudo yum -y install mysql mysql-server mysql-devel
/etc/my.cnf
[mysqld]character-set-server=utf8default-storage-engine=InnoDBinnodb_file_per_table[mysql]default-character-set=utf8[mysqldump]default-character-set=utf8

┗ sudo vi mysql:/etc/my.cnf で行わないと編集できなかった。

sudo service mysqld start   (mysql起動)
/usr/bin/mysql_secure_installation   (このまま叩くと起動。実行後、rootパスワード設定、その他全てyes)
sudo chkconfig mysqld on
mysql -u root -p
ログイン成功

vimとterm.c

$
0
0

この記事はVim Advent Calendar 2014の15日目の記事です。 14日目は haya14busa さんのincsearch.vimでVimの検索体験をリッチにするだったので、incsearch.vim入れてみたところかなり快適でした。しばらく使ってみます。

さてこの前あるvimmerとtwitterで話した時に、term.cという、端末との雑多なやりとりをする部分をneovimが捨てるという話を耳にしまして、私はneovimのことは全然知らないんですが、知らないなりにそれは非常にもったいないなあ、とか勝手に言ってたんですが、その場ではいまいちそのもったいなさが伝わってなかった気がしたので、この場を借りてterm.cの魅力の一端をご紹介させてください。
trachetを利用して、term.cならではの起動っぷりを観察してみます。
trachetというのは何かというと、端末とアプリケーションの間でどんなデータのやりとりが行われているかを可視化するツールです。

コードは一切出さないので、これを機会にterm.cに興味を持ってもらえれば幸いです。

環境はXTerm #pl313で、$TERMはxtermです。
端末に vim<Enter> と打ち込んで、vimが起動するまでのほんの一瞬の間のやりとりを見ていきましょう。

フェーズ 1: あいまいな文字幅の判定

phase1.png

いきなり変なスクリーンショット出しますが、これは何かというと、まさにvimを起動した瞬間の、vimと端末のやりとりをあらわしている、とお考え下さい。「>>>」で始まる行はvimから端末へ、「<<<」で始まる行は端末からvimへデータが流れています。1行1行の意味をくわしく理解する必要も特に無いので、なんとなく見ていて頂ければいいです。

起動後、まずは代替スクリーンへ入り(t_ti)、テンキーやカーソルキーの動作設定を初期化しています(t_ks)。

代替スクリーンというのを簡単に説明すると、現在のスクリーンを退避させることができる機能です。
vimをサスペンドしたり終了した際に、画面がvim起動前の状態に戻っていたりしたら、この機能が使われています。
端末のアプリケーションではお約束の初期化処理ですが、ここを過ぎるとvim独特の動きがはじまります。
まずはambiwidthオプションの初期化です。

  • カーソルを[2, 1](2行目の1文字目)へ移動
  • 幅の解釈があいまいな文字「▽」を出力
  • 現在カーソル位置の報告を要求(デバイス状態要求、DSR 6)
  • 端末より、カーソル位置応答[2, 2]を得る
  • 応答より、「▽」の論理的な幅は1文字と判断、ambiwidthオプションを"single"とする

といったインタラクションが読み取れますね。

フェーズ 2: 端末IDとバージョンの取得

phase2.png

カーソルの表示・点滅状態設定、スクリーン消去に続いて、DA2要求(第2端末特性要求、t_RV)が出ています。
XTermは応答として、VT420相当の端末IDと、バージョン313を返しました。

近年のXTermはVT420相当の端末IDを報告しますが、実際にclass 4相当の大量の機能を持っています。
vimは非常によくやっている方で、このうちの2割くらいは引き出せているのではないでしょうか。

ともあれここは非常に高度な読み合いをやってるところです。
このわずかなDA2応答から、vimは以下の情報を汲み取っています。

  • 端末が7ビット符号系を使用しており、以降は8bit目を落とした制御シーケンスを出力すべきである
  • XTermのパッチレベルは277以上であるので、SGR拡張マウスレポーティングを有効にしてもよい(ttymouseオプションを"sgr"とする)
  • XTermのパッチレベルは141以上であるので、次項で説明するtcap-queryを使用できる可能性がある。

DA2の読み方などについて知りたい方はこちらをご覧下さい(情報がちょっと古いですが)
SGR拡張マウスレポーティングについてはこちらに別途記事を書いています。

フェーズ 3: 応答ベースのtermcap要求

phase3.png

起動フェーズ終盤です。
まずXのウィンドウタイトル(t_ts/t_fs)とアイコンラベル(t_IS/t_IE)を設定していますね。
タブ型端末の場合は、アイコンラベルのかわりにタブタイトルが設定されることがあります。

その後、tcap-queryを断続的に送出しています。
tcap-queryはあまり聞き慣れない言葉だったと思いますが、ようするに端末に直接termcapを問い合わせることです。
これは2000年前後、XTermに256色拡張が入った直後の混乱をどうにかするために、vim側からの要望によってXtermに入ったもののようで、xterm/vim双方のChangeLogからその経緯をなんとなく窺い知ることができました。

またこの機能は、最近になってRLogin/TeraTerm(色数のみ)/iTerm2など一部の端末でなぜか流行し始め、掘り起こし対応が進んでいる分野でもあります。TeraTermなんかでは、tcap-queryを使われやすくするためにDA2のバージョン番号を上げてきたりしています。

現在のところ、vimは35個のtcap-queryを送出し、その応答を得て以下のような端末に関するオプション値を調整します。

  • 端末がサポートする色数
  • カーソルキー/Shift付きカーソルキーシーケンス
  • ファンクションキーシーケンス
  • Home/End/Shift+Home/Shift+Endキーシーケンス
  • Help/Undo/Backspace/Insert/Deleteキーシーケンス
  • 全画面/次画面キーシーケンス

ただし、この35個のクエリは一度に送出されず、10個づつ様子を見ながら送られます。
1度に送出してしまうとパケット分割が起き、その間にまれにユーザのキー入力が挟まって誤動作を引き起こしてしまうからです。


みなさんがvimを起動する度に、だいたいこんな感じのやりとりがおこなわれています。
起動してからのこともまだ色々書きたいんですけど日付が変わりそうですし、他のことも書くととりとめなくなってしまうのでここで終わります。
でもterm.cのマウスサポートの多彩さについて書いてなかったです。これは圧巻で、追随するアプリケーションは他にちょっと見当らないので、いつかまとめて書きたいです。


あとこの際だから言っておきたいんですけど、端末のvimでttyfastをsetすると速くなる、みたいな謎の噂があるけど、term.cを見る限りは全然ちがうように見えるんですよね。ttyfastは

  • 上下スクロールマージン機能をもたない端末において、行削除と行挿入を同時に行うことによる上下スクロールもどきな動きを行う。(ヘルプには「スクロールが滑らかになる」とか書かれてたりしますが、たぶん逆にガタつくと思います)
    追記:すみません、「スクロールもどきな動きを行う」、じゃなくて逆の「スクロールもどきな動きを行わないようにする」でした。
    調べたのが1年以上前で記憶が混濁してました。このへんを見て思い出しました。
    結局のところ上下スクロールマージンの無い端末なんて今時無い(VT100でさえ上下スクロールマージンは切れる)でしょうし、こっちの意義はもう無いと思います。

  • 行をまたぐマウスコピー時に、間に余計な改行が挟まらないよう、特殊なテクニックで細工する。

という全然関係無い2つの機能をなぜか一緒に提供する謎のオプションだと思います。
とりとめのない話ですみませんでした。

Dartをいろんなエディタ(IDE)で書く

$
0
0

これはDart Advent Calendar16日目の記事となります。

はじめに

Dartをこれから書こうかな、と考えている人が、最初に選ぶのがエディタ OR IDEだと思います。Dartには公式で配布されているDartEditorというものがありますが、このDartEditorはちょっと使いづらかったり、重かったりと使いたくないと思う方も多いかもしれません。
また、

  • 普段使い慣れたエディターで書きたい!
  • ○○以外ではコードを書きたくない!

という方もいるでしょう。ということでDartが書きやすいであろう各種エディタのプラグインを紹介します。

WebStorm

WebStormには快適にDartで開発できる環境が整っています。WebStormに関してにはらこ氏が書いてくださった「WebStormでDart開発」がこれ以上ないぐらいにわかりやすいので、そちらを見ていただけるとより理解が深まるとおもいます。(なんか投げてるみたいですみません...)

Vim

Dartには、公式で公開されているvim用のプラグインがあります。
dart-lang/dart-vim-plugin - GitHub

インストール

もしNeoBundleを導入しているのであれば、.vimrcにこれを追記するだけです。

NeoBundle 'dart-lang/dart-vim-plugin'

これを保存した後、NeoBundleInstallを実行すればインストールできます。

イメージ

044.png

また、quickrunを設定してdartのファイルが簡単に実行できるようにしたりするのもよいでしょう。

他にもvim-dartanalyzerというものもあります。リアルタイムでの解析が可能なので、かなり開発が捗ります。

Sublime Text

人気のエディター、Sublime TextにもDart公式のプラグインがあります。

guillermooo/dart-sublime-bundle - GitHub

インストール

1: Sublime TextにPackage Controlをインストール

Sublime TextにPackageをインストールするには、Package Controlをインストールする必要があります。

Sublime Text 3のPackage Controlがインストールしやすくなっていた - ばくのエンジニア日誌

こちらのページを参考にしてください。

2: dart-sublime-bundleをインストール

Package ControlをSublime Textにインストールした後、Ctrl+Shift+pを押してCommand Paletteを開きます。

ここでinstallと打ち込むと、予測でPackage Control:Install Packageが出てきますので選択します。

その後出てきたダイアログに先ほどと同じようにdartと打ち込み、Dartパッケージが選択されているのを確認して選択します。

インストールが完了するとこのような画面が開きます。

053.png

3: 設定
dart-sublime-bundleを使用するには、Dartの実行ファイルの場所を設定する必要があります。

  1. 上のメニューから Preferences → Package Settings → Dart → Settings – Userを選びます.
  2. 設定ファイルを記述します
{
  "dart_sdk_path":"/path/to/dart-sdk"
}

ここで、記述するのはbinディレクトリへのパスではなくdart-sdkへのパスであるということに注意してください。

このプラグインを使用すれば、dartanalyzerやコードのフォーマットを使用したりと様々なことが出来ます。

もっと詳しく知りたい!という方は本家GitHubのwikiがよくまとまっていると思います。

054.png

また、Sublime Textには自動ビルド機能があるので、そこに割り当てることでpub getの自動化なども行うことができます.

Emacs

Emacsも言わずと知れた有名なエディターの一つですね。Emacsも公式が提供しているモードがあります。
nex3/dart-mode

インストール

  1. dart-mode.elをload-pathの通っているディレクトリに追加します。
  2. dart-modeを反映するためにinit.elに次のように追記します。
(add-to-list'auto-mode-alist'("\\.dart\\'".dart-mode))(autoload'dart-mode"dart-mode""Major mode for editing Dart files"t)

イメージ

055.png

Atom

GitHub社製の新エディタ、AtomにもDart用Packageがあります。

radicaled/dart-tools
Daegalus/atom-language-dart

dart-toolsはpub getコマンドや、コードのフォーマットなどを行ってくれます。language-dartはシンタックスハイライト用のパッケージです。
056.png

最後に

並べただけ、という感じの記事になってしまいました。申し訳ございません。
新しい言語を学ぶときに、自分の使いたいエディターで書ける、というのは結構大きいのではないかと思いこの記事を書かせていただきました。
このエディタがない!という意見はコメントにおいて書いていただけると幸いです。出来る限り探してみたいと思います。
また、自分でプラグインを作るのもいいと思います。言語の理解にもつながるところがあると思います。

以上sh4869でした。明日はlaco0416さんです。

参考サイト

Dart用Emacsモード|プログラマー図雑記帳
Emacs講座 -第6回- load-path / マスタカの ChangeLog メモ

ubuntuで簡易的にvimにluaを入れる

$
0
0

1. はじめに

ソースのダウンロード,make, configureなどは全て不要です.
コマンド一発で解決しました.

vimでneocompleteを使いたいけど,luaを入れないと使えない・・・.
けどvimをコンパイルして入れ直すのは色々と面倒くさい・・・.
と思っていたら簡易的に入れる方法があったので書いておきます.

元々はclipboardを有効にする方法を探していて,
Ubuntu 12.04 で Vim が clipboard をサポートしていなかった・・・orz ってなった時に実行すべきコマンド

こちらを実行してみたら,副産物でluaも入っていたという形なので,
clipboardを有効にしたい方にもお勧めです.
他にも色々入っているようなので,対応表を最後に載せておきます.

2. vim-gnome

最初はこんな状態.

vim --version | grep lua
+dialog_con      -lua             +rightleft       +windows

打つコマンドは一つだけ.
GUI版のgVimをインストールすれば,コマンドライン版も更新されるようです.

sudo aptitude install vim-gnome

確認.

vim --version | grep lua
+dialog_con_gui  +lua             +rightleft       +windows

無事入りました.
これでneocompleteが使えます.

3. 入れる前と入れる後の違い

入れる前

+acl             +farsi           +mouse_netterm   +syntax
+arabic          +file_in_path    +mouse_sgr       +tag_binary
+autocmd         +find_in_path    -mouse_sysmouse  +tag_old_static
-balloon_eval    +float           +mouse_urxvt     -tag_any_white
-browse          +folding         +mouse_xterm     -tcl
++builtin_terms  -footer          +multi_byte      +terminfo
+byte_offset     +fork()          +multi_lang      +termresponse
+cindent         +gettext         -mzscheme        +textobjects
-clientserver    -hangul_input    +netbeans_intg   +title
-clipboard       +iconv           +path_extra      -toolbar
+cmdline_compl   +insert_expand   -perl            +user_commands
+cmdline_hist    +jumplist        +persistent_undo +vertsplit
+cmdline_info    +keymap          +postscript      +virtualedit
+comments        +langmap         +printer         +visual
+conceal         +libcall         +profile         +visualextra
+cryptv          +linebreak       +python          +viminfo
+cscope          +lispindent      -python3         +vreplace
+cursorbind      +listcmds        +quickfix        +wildignore
+cursorshape     +localmap        +reltime         +wildmenu
+dialog_con      -lua             +rightleft       +windows
+diff            +menu            -ruby            +writebackup
+digraphs        +mksession       +scrollbind      -X11
-dnd             +modify_fname    +signs           -xfontset
-ebcdic          +mouse           +smartindent     -xim
+emacs_tags      -mouseshape      -sniff           -xsmp
+eval            +mouse_dec       +startuptime     -xterm_clipboard
+ex_extra        +mouse_gpm       +statusline      -xterm_save
+extra_search    -mouse_jsbterm   -sun_workshop    -xpm

入れた後

+acl             +farsi           +mouse_netterm   +syntax
+arabic          +file_in_path    +mouse_sgr       +tag_binary
+autocmd         +find_in_path    -mouse_sysmouse  +tag_old_static
+balloon_eval    +float           +mouse_urxvt     -tag_any_white
+browse          +folding         +mouse_xterm     +tcl
++builtin_terms  -footer          +multi_byte      +terminfo
+byte_offset     +fork()          +multi_lang      +termresponse
+cindent         +gettext         -mzscheme        +textobjects
+clientserver    -hangul_input    +netbeans_intg   +title
+clipboard       +iconv           +path_extra      +toolbar
+cmdline_compl   +insert_expand   +perl            +user_commands
+cmdline_hist    +jumplist        +persistent_undo +vertsplit
+cmdline_info    +keymap          +postscript      +virtualedit
+comments        +langmap         +printer         +visual
+conceal         +libcall         +profile         +visualextra
+cryptv          +linebreak       +python          +viminfo
+cscope          +lispindent      -python3         +vreplace
+cursorbind      +listcmds        +quickfix        +wildignore
+cursorshape     +localmap        +reltime         +wildmenu
+dialog_con_gui  +lua             +rightleft       +windows
+diff            +menu            +ruby            +writebackup
+digraphs        +mksession       +scrollbind      +X11
+dnd             +modify_fname    +signs           -xfontset
-ebcdic          +mouse           +smartindent     +xim
+emacs_tags      +mouseshape      -sniff           +xsmp_interact
+eval            +mouse_dec       +startuptime     +xterm_clipboard
+ex_extra        +mouse_gpm       +statusline      -xterm_save
+extra_search    -mouse_jsbterm   -sun_workshop    +xpm

clipboard, ruby, luaを代表にほぼ全てのものが入るようです.

vimrc アンチパターンを自動でチェックする

$
0
0

この記事は Vim Advent Calendar 2014 の 16 日目の記事です。
15日は kefir_ さんの「vim と term.c」でした。vim と 端末の間のやりとりの解説という超ディープな話題で、つくづく vimmer は変態(いい意味)が多いな、と痛感させられます。素晴らしい記事ですので、ぜひ一読をお勧めします。

さて、今回の記事では、VAC 1 日目の記事 「vimrc アンチパターン」を Vim script の lint ツール「vint」で判定できるようにした、という話を紹介します。

今年 11 月に開かれた VimConf 2014 にて「vint は機能追加が簡単さ〜」とか豪語しておりましたので、その実証がてら lint ルールの実装タイムアタックにチャレンジしてみました。

vimrc アンチパターンのルール

vimrc アンチパターンをまとめると、9 つのルールなります。
この 9 つのルールをどれくらいの時間で実装できるかを計測してみました。

  • コード中にマルチバイト文字があり、かつ scriptencoding が指定されていない場合警告
  • encoding が scriptencoding よりも後に指定されていた場合、警告
  • オプションの省略記法を検知して警告
  • autocmd が augroup の外で、さらに group が指定されてないとき警告
  • set nocompatible を警告
  • syntax on が Bundle系コマンドの前にある場合警告
  • スコーププレフィックス(g:とか a:とか)のない変数を警告
  • remap じゃない map は <Plug>と併用されていなければ警告
  • <C-i><Tab><C-m><Enter><C-[><ESC>の両方の組があらわれたら警告

vint の使い方

python で実装されているため、 pip を使います。

pip install vim-vint

インストールが終われば、vint ファイル名で実行できるようになります。
さっそく自分の vimrc を検査してみましょう。

screencast

アッアッ…作者なのに…!

私の vimrc は 700 行弱ですが、ほぼ一瞬で検査が終了しています。
定番 lint プラグインの syntastic のような lnit の実行完了を待たせる lint プラグインでも問題にならない速さです。

タイムアタックの結果

さて、タイムアタックの結果です。

9 つのルールのうち、5 つのルールを 5 時間で実装できました。

つまり、おおよそ新規の 1 ルールが 1 時間で実装(テスト込み)できるという計算になります。それぞれのルールにはテストも付属させてます。

このように、手軽に lint のルールを追加していけることが vint のよさなのです。
ただ、動作確認は結構雑だったので、もしかすると判定ミスがあるかもしれません。そういうときは issueをたてていただけると対応します。

謝辞

@rbtnnさん、とても勉強になる記事でした。ありがとうございました。
@thincaさん、@itchynyさん、バグ報告ありがとうございました。
まだ大部分を直せていませんが、今後も vint を使用していただけると助かります。
現在は問題の多かったスコープ解析部分を無効化しているため、vital も検査できるようになっています。


vim起動時に前回の状態を復元しちゃうぞ

$
0
0

IDEなんかで起動時に前回の状態(タブ)などを復元してくれる動きの再現
引数付きで起動するときは無視する

.vimrc
" Vim終了時に現在のセッションを保存するauVimLeave * mks!~/vimsession

"引数なし起動の時、前回のsessionを復元autocmdVimEnter * nested if @% ==''&& s:GetBufByte()==0| source ~/vimsession |endiffunction!s:GetBufByte()let byte = line2byte(line('$')+1)if byte ==-1return0elsereturn byte -1endifendfunction

使ってみて

コンソールでtigと組み合わせて使っていると楽
git commitの後に普通に開くと焦る

TODO

  • 特定の操作で終了した場合記録したくない(git commit時など)
  • 終了時にNERDTreeを開いているとそんなファイルねぇと怒られる

参考 url

http://linuxserver.jp/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/vim/%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BF%9D%E6%8C%81.php

http://saihoooooooo.hatenablog.com/entry/2013/05/24/130744

【Vim入門】ノーマルVimで使えると便利かもなコマンド10つ

$
0
0

この記事は Vim Advent Calendar 2014 の 17 日目の記事です。
16日は Kuniwak さんの「vimrc アンチパターンを自動でチェックする」でした。(私の vimrc も多くのアンチパターンがあったので、戒めていくとともに、vint でチェックしようと思います。。)

プラグインなしのvimをつかう

先日のVACでも紹介されていたincsearch含め、プラグインは便利で私も色々使っているのですが、あえて、今回はVim(7.2以上)であれば使える基本コマンドで、私自身がよく使っているコマンド(Exコマンド含む)を10つに絞って紹介したいと思います。
#最近、サーバー系の作業が増えて、プラグインなしのvim使うことも増えてきました。

人によってなじんだキーバインドの設定はあるかと思いますが、実際のところこれだけ覚えとけば(プレーンなvimでも)それなりに不自由しないのではないかと思います。

では早速紹介します。

0.前提条件

set numberは設定済とします。下記のようにvimrcに書いていても可。

.vimrc
" 行番号表示setnumber

1. ciw, ciW

テキストオブジェクトを削除して挿入モードになります。
対象の範囲は wなら word (:h word 参照)だし Wなら WORD (:h WORD) となります。
1

2. dib , diB

同じくテキストオブジェクト系です。
対象の範囲は bなら()で囲まれた範囲、Bなら{}で囲まれた範囲を削除します。
プログラムなどを書いていて、条件式などの中身を編集したりするときにはとても楽なのではないでしょうか。
dib,diB

3. y{行番号}G

現在行から指定した行番号までコピー。たとえば現在行から7行目までをカットする、y7Gという感じです。
これを知る前は、{数字}yyなどしてたのですが、行番号が表示されているならこちらの方が直感的に分かりますね。
relative numberを出すと言うてもありますが、ふだん通常の行番号の方が使いやすいのでそうしております。
3

4. [op]f{x} , [op]t{x}

[op]はオペレータです。
f{x}は文字 {x}までカーソルを移動したり、 t{x}は文字 {x}の直前の文字まで移動しますが、それに dyなどのオペレータを組み合わせることで、任意の文字の直前まで切り取ることができます。
4

5. gj,gk

一行が、折り返されてしまうほど長い文字数のとき、たとえば3行分くらいにわたっていたとき、通常なら j, kで移動すると、その実際の行単位で移動してしまいます。
このとき、 gj, gkをりようすれば表示行単位で移動できます。
5

6. g~iw, guiw, gUiw

g~iwはカーソル下の単語の大文字小文字を入れ替えます。
guiwはカーソル下の単語をすべて小文字にします。
gUiwはカーソル下の単語をすべて大文字にします。
g~~,guu,gUUとすれば上記のものをカーソル行全体に適応させます。
6

7. <Ctrl>-a , <Ctrl>-x

数字にカーソルをあわせて実行します。
<Ctrl>-aでインクリメント <Ctrl>-bでデクリメントします。

0x01 などの16進数にカーソルを合わせても16進数と認識して、インクリメント、デクリメントしてくれます。

01, 001 などのゼロパディングされたデータはデフォルトだと8進数と見なされて操作されてしまいます。これを10進数として扱うためには、 set nf=""を vimrc もしくは Ex コマンドで実行すれば 10進数と見なしてくれます。
7

8. :set paste

ウェブサイトなどのコードをクリップボード経由でコピーしたときなど、インデントがおかしくなってしまうときがあります。
このとき、 set pasteを指定すればコピーしたインデントそのままで貼付けルコとができます。
貼付け終わったら :set nopasteで元に戻しておいてください。
※既存のインデントがきかなくなるため
set 系のコマンドは :set paste!のように末尾に !をつけてトグルさせるのが楽かなと思います。
8

9. :sort u

ファイル全体をソートしてユニークにします。
私はちょっとログとかを調べたいときとか、その他の作業でテキストを整形にしたい時とかに使っています。

ソートするだけなら :sort、逆順にソートしたいなら :sort!を利用します。
9

10. :v/{文字列}/d , :g/{文字列}/d

:v/{文字列}/d
ファイル全体から 文字列含まれていない行を削除します。
10-1

:g/{文字列}/d
ファイル全体から 文字列含まれている行以外を削除します。
10-2

あとがき

以上です。「便利な」というより、わたしが普段よく使っているものを抜粋となってしまったのですが、お役に立てば幸いです。
また、以前書いた、Vimがちょっと便利な起動オプションについても合わせて読んでいただくと、もうすこしだけ便利になるかもしれません。

ほかにもなにか便利なコマンドがあれば是非教えていただければと思います!

PHP用のエディタ/IDE/プラグイン

vim練習帳。

$
0
0

この記事は Vim Advent Calendar 2014 の 18日目の記事です。
17日はsimejiさんの「【Vim入門】ノーマルVimで使えると便利かもなコマンド10つ」でした。結構書こうと思ってたことを書かれてしまった感ある・・・汗

さてさて、今年のVACも猛者Vimmerにまぎれて、プラギンもロクに入れない野良Vimmerであるところの私が1日もらってしまいました。
上級者にとっては当たり前すぎて物足りないかもしれませんが、丁度良いレベルに感じてくださる方もいるはずと信じて、
今回は「vim練習帳」と題して、私がOS管理上、vimをどのように使っているかを紹介しながら、vim力の底上げをはかっていただければと思います。

*対象読者
全vimmerです。
Linuxの内容が多く出てきますが、別のOSでも応用可能と思っています。
hjklとかは説明しないので、超初心者には辛いかも?

*はじめに
「ぷらぎん作りまくるぜぇええええ」
「ぷらぎん入れまくるぜええええ」
という方には少々物足りないかもしれません。プラグインの話は出てきません。
その代わり、OSインストール直後の素VIMで使える機能ばかりであり、いうなれば、vimの基礎力がつくものと考えています。

いきなり、客先や先輩のvimを使わないといけないかもしれません。
そんな時、普段からプラグイン中毒になっていると(自分のvimなら・・・こんな変更一発なのに・・・っ!)と悔しい思いをするかもしれません。

*能書きはいいので、まずは基本。

題材1:httpd.conf
まずはじめにご紹介するのはhttpd.confです。
手元のcygwinから抜いてきましたので、なにそれって方は、こちらからダウンロードして、vimで開いてください。

さて、httpd.confの最初の方はコメントだらけです。
有効な設定を確認するために、コメントの行はひとまずとばしてしまいたいですね。

jjjjjjjjjjjjjjjjj

でも、いいのですが、

[Ctrl+f][Ctrl+f][Ctrl+f][Ctrl+f][Ctrl+f][Ctrl+f]

でもいいのですが、
サクッと、「先頭が#でない」ところだけどんどん読んでしまいましょう。
ということで、私の提案はこちら。

/^[^#]nnnn

さて、これの意味ですが、先頭の/は検索を開始。
次の^は「行頭の文字が、「後に続く1文字」の時「合致」」という意味です。
では、あとに続いている1文字は何かというと・・・

[^#]・・・ですね。これは、#以外のすべての文字1文字、を指します。

これにより、コメントアウトされてない行がマッチするのですね。

^の意味が2種類あるのに注意してください。
/の直後にあると、行頭にマッチ、
[の直後にあると、その次の文字を除外した文字集合、です。



続いてはある設定値を変えてみましょう。

例として、
Listen 80

#Listen 80
Listen 1234
にしましょう。

カーソルは今、Lの上にあります。

私の提案は、
kylj[Shift]P
yyp
x
f8R
1234[esc]

ですかね。
1行目。一行上に移動し、1文字コピー(#をコピー)し、元の行に戻り先頭に貼り付け。
2行目。1行コピーして貼り付け。yyは[Shift]Yでもいいですが、個人的にはyyのほうが早いと思ってます。(Vimgolfでは1文字減らせるテクニック)
3行目。先頭の#を削除。
4行目。8までジャンプし、置換入力。
5行目。入力してescで終了。
通は[esc]の代わりに[Ctrl]+[です。

ポイントは、
・なるべく入力モードに入らず打つ。(今回で言うと、#)



さらにhttpd.confをnで読み進めていくと、
行頭はTabで、その後に#、という行が出てきます。
この行もコメント行なので検索にはマッチしてほしくありません。
検索文字列を少し直しましょう。

/^\s*[^# ]

変更点は2箇所。
・^のあとに\s*を入れました。
 \sはTabやスペースにマッチする文字、*は何文字でも、という意味です。
・#のあとに半角スペースを入れました。
 #の他に、半角スペースも除外しないと、「半角スペース2文字」がマッチしてしまいます。



ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
に変えてみましょう。
カーソルをvarに持っていくために、いろいろな方法があると思いますが、
もちろん、自分の素直に思いつく行き方があるかたは無理にそれを変えなくていいと思います。

自分は、
fs;
cw
var[esc]
ですね。
fのあと1文字でその1文字にマッチする行内の位置に移動します。
;はfの移動を繰り返します。
明らかに2個めだ、とすぐに分かるなら2fsで一回で飛べますが、そういうケースは稀で、
おすすめは、;で目的地につくまで繰り返す。行き過ぎたら、,で戻る(逆方向に検索)を繰り返して、目的地につくのがいいと思っています。
wをつかう、f"のあとずらす、など、色々な行き方を使ってみるのがいいと思います。
カーソル移動がうまくなると、そこまでの削除、そこまでのコピーも同じようにできるようになるので。



あとがき。

推敲時間が足りず乱文になってしまいましたが、
実際の設定ファイルを使って、vim操作を解説してみました。
時間があったら別の設定ファイルの例なども紹介したかったのですが、
思いの外長くなってしまったので、今回はこのくらいにします。

VimでMarkdown(.mdファイル)のハイライトを有効にする

$
0
0

iTerm使っています。デフォルトの設定はちょっと分からないのですが、僕のVimではマークダウン形式で保存したhoge.mdがマークダウン形式のハイライトされません。

プラグインいれたら良いのですが、いれない方法があったので、メモしておきます。

「.vimrc」に2行書いたらおわりです。

.vimrc
" markdownのハイライトを有効にするsetsyntax=markdown
auBufRead,BufNewFile *.md setfiletype=markdown

スクリーンショット 2014-12-18 9.23.14.png

今こんな感じです。。。真っ白よりは、ましかと思われます。

ありがとうございました!

Viewing all 5735 articles
Browse latest View live


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