mabulog

このブログは、mabuの平凡な日常を淡々と描く物です。 過度な期待はしないでください。 あと、部屋は明るくして、 モニターから3メートルは離れて見やがってください。

VimでCPUとMemoryを節約するための2つのテクニック

開発サーバの性能が悪い、とにかく悪い。
そんな悩みで日夜手元の.vimrcを弄り、Vim付属のpluginを読んだり、無駄にリビルドしたり、
苦楽を共にVim活をしているエンジニアが世の中に10人中5人はいるそうです。
残りの5人は運良くMacとか性能の良いサーバを持っている幸運なエンジニアです。羨ましいですねー。(棒
羨んでも開発サーバの性能は上がらないため、普段の操作感を失わずに性能を上げる方法を見つけました。
そう"デザインをしょぼく"する事でこの問題は解決します。(有名ですが)

ステータスラインをしょぼくする

おしゃれなステータスラインはやはり素敵ですね。
すごく素敵ですが、しょぼくする事でサーバに優しくなります。なんてVimは優しいのでしょうか。
Vimの半分は優しさでできていると言っても、過言ではありませんね。
そこで私の取ったテクニックはこんな感じです。
今まで使用していた感じとかけ離れない程度に機能は残しつつ、あまり使用しない情報はご退席してもらいました。

しょぼテク

colorschemeをしょぼくする

256色のおしゃれなcolorschemeが日夜もてはやされていますが、私には256色も表現するCPUもMemoryもありません。
私に残されたものは16色のみです。そう16色のcolorschemeならなんとか私でも扱えそうです。
ここで大学時代愛用していたエディタの話をします。
高校時代muleというエディタを副担任に紹介され使っていたのですが、大学に入りmuleのインストールの仕方が分からず、
やさぐれていた私が出会ったエディタがあります、そうVimです。その当時はpluginなんて物がある事を知らないピュアな大学生でした。
そんな私の数少ないVimの設定で感動を与えてくれたのは"desert"というcolorschemeです。
"desert"は素晴らしいcolorschemeで今も愛用者は多数いるでしょう。
そこで私の取った手段はこんな感じです。

しょぼテク2

結論

頑張れば今までのデザイン感を損なわず、サーバに優しくなれます。
これでまたpluginをいっぱい入れられますね、やったぜ!!

screen を使ってみた

前回は『tmux をインストールした』でした。
今回はscreenの設定をします。screenよりもtmuxの方が性能がよく、今風ではありますが、環境によってはtmuxがなく、screenのみ利用できるケースもあるかと思い、念のため調べました。基本はtmuxと同様のキーマッピングで操作感を似せました。

インストール

Macには予めインストールされているため、CentOSのみインストールを行います。

(CentOS)
$ sudo yum install screen

設定

screen設定

操作方法

dotfiles/screen.markdown at master · KazuakiM/dotfiles · GitHub

感想

tmuxが後発という事もあり、screenを大分意識してくれていたおかげもあり、 screenの概要を押さえるのに1日かかりませんでした。

tmux をインストールした

今更ながらtmuxをインストールした備忘録です。

インストール

reattach-to-user-namespace はViモードでクリップボードへコピーする際に利用します。

(Mac)
$ brew info tmux reattach-to-user-namespace

(CentOS)
$ sudo yum install tmux

設定

colorの設定はsoramugiさんbashで256色表示するスクリプト用意しておくと便利 - Qiitaを利用し、jellybeans風味に仕上げてあります。

.tmux.conf サンプル

操作方法

dotfiles/tmux.markdown at master · KazuakiM/dotfiles · GitHub

参考リンク

vim-regexperを作った

追記あり

先日、2つのホットエントリーが話題になり、Vimでそういった機能はないものかと調べて、
無さそうだったため、簡易ではあるがVimでも正規表現の実装結果をサクッと確認できるようにした。

まだ調整中のため、helpなど作っていませんが、
もう少し汎用性を高めてhelp追加したいと思います。
現状、JavaScript正規表現のみ対応している感じです。

ソース

使い方

  • :RegexperExecute <第1引数>

    第1引数へはチェックする正規表現

設定例

動作

regexper.comをforkしてherokuにたてたサイトにリクエストするだけのシンプルなものです。
直リンクするのは良くないだろうから、妥当な落とし所?かなと。

これから

可能であればherokuへリクエス卜せずに済ませたいと思っています。 (g)Vim上で表示するのはJavaScriptとか画像の表示が苦手なVimでは難しそうなので後回しです。

(2014/11/25 12:00 追記)
ヘルプとローカルアプリへの対応完了。

TODO: 各OSでの動作検証 TODO: 複数言語対応

previmの設定を見なおした

Windowsでもprevimを使う機会が出来たので、
これを機にprevimの設定を見なおしました。

previm setting

感想

Windowsのファイルパスについては、previm側で対応しているようですが、
うまく動きませんでした。
そこはopen-browser.vimでいい感じになりました。

VimConf 2014 に参加した

f:id:kazuomabuo:20141109091952p:plain

mixiさんビルです!!
mixiさんはモンス卜で盛り上がっていますが、エンジニアとしては圧倒的にdeploygateに興味がありますね。
mixiさんステッカー&deploygateのステッカー、キーホルダー(σ・∀・)σゲッツ!!

f:id:kazuomabuo:20141109092005j:plain

そして、初VimConf参加!!
sekicocoに登録して、いざ、オープニングから発表開始。
発表資料はこちらにまとめリンクがあります。

Identity of the Vim

@KoRoN (MURAOKA Taro) さん

1つの言語でのみ開発をするのなら、その言語に特化したエディタ/IDEを使えば良く、
Vimマルチプラットフォームでいろいろな言語に触る場合に真価を発揮するというところに、
すごく共感でき、同じような理由で去年からVimを使い始めました。
実際にはかなりIDE感溢れてて自分でメンテナンスできるという事実を知った事が変えた大きな理由ですが...。Web系にいる以上はJavaScriptHTML5RubyCoffeeScriptあたりはいつ書いてもおかしくない状況下だと思うんだよなぁ。

PM2

@ ujihisa さん

PM2のプロセス管理を良さ気にしてくるplugin、Vimスクリプトバリバリ書く方には便利なのかな〜といった印象を受けました。そこまで深く触れていないから若干ついていけなかった感。
ただ、普段使っているvim-quickrunには現行のPM(ProcessManager)が使われていたりと、身近に使われている印象。
あとはCiv5。ハマると抜け出せないCiv5。

f

@ Linda_pp さん

通常のVimマッピングで、f を全然使ってなかったけど、慣れると便利そうでした。
omapは第122回 vimrc読書会で話に出てきて導入しようと勉強最中なので、これは引き続きやります。
vim-shot-fclever-f.vimが良さ気で導入してみたいと思いました。
vim-shot-fはfを押した後に遷移できる所をハイライト表示して、ざっくりと移動する感じ。
clever-f.vimはmapの設定を簡潔にしてf連打することで目的の場所に数ストロークで近づく感じです。この設定がある事で、","と";"を普段使っている人は救われる感じで、私も救われる一人だという事は言うまでもありません。

Hey, Java! Vim is coming.

@ kamichidu さん

...Now Loading

VimJAVAを書く人という事で私の中で話題のkamichiduさんです。
JAVAのSourceそのものがでかく、その上でEclipseでメモリを喰らって辛いという話でした。
VimJAVAを書く時に便利なpluginを教えて頂いたので、是非書く際には活用したいです。

auto closing parenthesis

@ cohama さん

終了括弧についての発表でした。Rubyを一時期使うかもと私の中で話題になった際に、vim-endwiseをいれたくらいで、
若干、痒い所に手が届いていないような気がしないでもないのですが、ultisnipsneocomplete.vimでそこまで気になっていなかったのかもしれない感じを受けました。
発表を聞いてvim-smartinputを入れてみたい感が湧いてきました。
また、lexima.vimは完全に勘違いしてました。vim-smartinputのインスパイアpluginで.(ドット)リピートが可能との事です。
私自身が、.(ドット)リピートを使った事がないので、まずはソコから感漂ってます。
leximaは前から知っていたのですが、Vim pluginだという事を知りませんでした。

私が誤認していた事は認めますが、まずはこちらを御覧ください

ご覧頂けただろうか、Lingrのvim-jp部屋では日常会話にさっそうと現れるleximaは皆の心を鷲掴みです。

怖くないマクロ入門

@ deris さん

今まで使った事がない機能で、とっても勉強になりました。
すぐに使う事は出来なそうですが、このプレゼンはいつか見返すだろう事は確信しました。
懇親会ではマクロでif文を使いたいとcdepillabout さんderis さんに質問していました。
検索等を駆使して行う事で、同様の事が出来そうと教えて頂いたので、ここに備忘録として残します。

Test for Vim script

@ thinca さん

Vimによるスライド発表でした。
Vim scriptにもTDDだって事でやはりテストコード大事、絶対て事ですね。
vim-themisvim-jp内でかなり盛り上がってる感じでいい感じです。

Let's talk about neovim

@ Shougo さん

暗黒美夢王 さんでした。
NeoVimは気になりつつも、私はディストリビューションにのるまでは静観する感じになりそうです。

私は何回か勉強会、カンファレンスに参加した事があるのですが、
Vimの勉強会ではShougo さんがライブをする事が硬い掟で定められています。
今回も熱く熱唱して頂きました。
ただ、宗教上の都合でUSTができなかったため、目下、対応策を検討中となります。

かなりすごい発表(かなり)

@ supermomonga さん

かなりすごかったです(かなり)
間の取り方など多くのテクニックと画像チョイスの冴え渡る発表でした(すごく)
幼女であるためにはあらゆる技術が必要なんだなと思い、羨望の眼差しで見ていました(かなり)

XVim with MacVim and smartgrep

@ pebble8888 さん

XVim は XCode上で 仮想Vimを動作させるものらしいです。
良さ気な感じだったけど、私がXcodeを使う機会が無さそうで残念な感じではあります。
Xcode使う機会があった際には検討したいと思います。

/-improved

@ haya14busa さん

/ をMotionとして、捉えると途端に難しくなるイメージだけど、使いこなすと便利。
以前、簡単な動作動作確認で入れてみましたがincsearch.vimが良さ気です。
f マッピング覚えた後に導入を検討したいです。
その前にWindowsでの開発環境何とかしないと、やる事多いな。

vim script初心者に使ってもらいたい、転ばぬ先の杖「Vint」

@ Kuniwak さん

Vintと他のLintの違い、Vintの特徴についての発表でした。
Vim script作る場合にあると便利な感じです。
Vintを使いながらVim script開発を行い、vim-themisでテストする感じが良い感じかな〜。

Jenkins + vimenv で 最新のVimを使おう!

@ raa0121(らぁ) さん

raa0121(らぁ) さん宅では9分毎にVimのバージョンをチェックして、更新があった場合には、autobuildしているとの事。
不具合パッチを探す時にvimenvがあると調査が捗る感じですね〜。

感想

知らない知識、知っているけど触った事がない知識が多くて大変勉強になりました。
いろいろと教えて頂いたので楽しかったで終わらせず、身につけれるようにこの記事を〆めたいと思います。

Installed VirtualBox + CentOS7.0

背景 Background

最近はMacで直接開発等を行っていたのですが、
CentOSで調査したい事があったため、CentOSをインストールしようとした所、
CentOS7が出ていたため、前回の『Installed VirtualBox + CentOS6.4』の違いを記録します。

手順 Operation

VirtualBox設定

新規

  • システム
  • メモリ

    2048MB

  • 起動順序
    1. CD/DVD-ROM
    2. ハードディスク
  • オーディオ

    無効化

  • ネットワーク

    ポートフォワーディング

    名前 プロトコル ホストIP ホストポート ゲストIP ゲストポート
    SSHD TCP (空) 2222 (空) 22
    HTTPD TCP (空) 2223 (空) 80

OSインストール後

  • システム
    • 起動順序
      1. ハードディスク

パスワードなしのsudo権限付与

# visudo
(アカウント名) ALL=(ALL)ALL

SELinuxの無効化

# getenforce
Enforcing
# vi /etc/sysconfig/selinux
SELINUX=disabled

インストール済パッケージ更新

# yum -y update

SSH自動起動設定

# chkconfig sshd on
# service sshd start

ローカルPCからSSH接続確認

(localPC)
$ ssh -l (アカウント名) -p 2222 localhost

再起動

(ウィンドウ無し)VM起動

(localPC)
$ VBoxManage startvm (host名) --type=headless

ローカルPCからSSH接続

(localPC)
$ ssh -l (アカウント名) -p 2222 localhost

SELinux確認

$ sudo getenforce
Disabled

作業領域設定

$ sudo chown -R (アカウント名):(アカウント名) /usr/local
$ mkdir -p $HOME/work

yumレポジトリ追加

epel

$ sudo rpm --import http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-7
$ sudo rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/7/x86_64/e/epel-release-7-2.noarch.rpm

ius

$ sudo rpm --import http://dl.iuscommunity.org/pub/ius/IUS-COMMUNITY-GPG-KEY
$ sudo rpm -ivh http://dl.iuscommunity.org/pub/ius/stable/CentOS/7/x86_64/ius-release-1.0-13.ius.centos7.noarch.rpm

remi

$ sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
$ sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

rpmforge

$ sudo rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
$ sudo rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

MySQL

$ sudo rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm

リポジトリの設定状況確認

$ cd /etc/yum.repos.d

  各リポジトリの設定をチェック

公開鍵生成

GitHubに登録する。

$ cd
$ ssh-keygen
$ cat .ssh/id_rsa.pub

必要なパッケージインストール

$ sudo yum install \
    colordiff ctags \
    gcc \
    httpd \
    libcurl-devel lynx \
    make man-pages-ja mercurial \
    ncurses-devel \
    openssl openssl-devel \
    perl-core perl-devel php php-devel python-devel \
    ruby ruby-devel \
    tree \
    wget

dotfiles設定

GitHubに登録している設定ファイルを設置する

$ cd
$ git clone https://github.com/KazuakiM/dotfiles work/dotfiles
$ diff $HOME/work/dotfiles/.bash_logout  .bash_logout
$ diff $HOME/work/dotfiles/.bash_profile .bash_profile
$ diff $HOME/work/dotfiles/.ctags        .ctags
$ diff $HOME/work/dotfiles/.gitconfig    .gitconfig
$ diff $HOME/work/dotfiles/.vimrc        .vimrc

問題ない事を確認した上で適用する。

$ ln -sf $HOME/work/dotfiles/.bash_logout  .bash_logout
$ ln -sf $HOME/work/dotfiles/.bash_profile .bash_profile
$ cp $HOME/work/dotfiles/.bash_profile.local .
$ ln -sf $HOME/work/dotfiles/.ctags        .ctags
$ ln -sf $HOME/work/dotfiles/.gitconfig    .gitconfig
$ cp $HOME/work/dotfiles/.gitconfig.local .
$ ln -sf $HOME/work/dotfiles/.mplayer      .mplayer
$ ln -sf $HOME/work/dotfiles/.vim          .vim
$ ln -sf $HOME/work/dotfiles/.vimrc        .vimrc
$ cp $HOME/work/dotfiles/.vimrc.local .
$ ln -sf $HOME/work/dotfiles/.w3m          .w3m
$ exec $SHELL -l

アプリインストール

  1. git
  2. LuaJIT
  3. Vim
  4. NeoBundle for Vim