emacsの使い方

起動時にはホームディレクトリ直下にある.emacsファイルが読み込まれる。
scratchバッファ(左下にscratchと表示されるバッファ)上で、コマンドを入力しCtrl-Jを押すと結果が表示される。
都度、Ctrl-Jを押すのが面倒な場合は、 M-x ielm と入力すると、シェルっぽいのが開く。

全般操作

キー入力 コマンド名 動作
C-g keyboard-quit コマンドの中断、アンドゥの方向を変える
C-x C-c save-buffers-kill-terminal emacsの終了
eval-current-buffer 設定ファイル(.emacs)の再読み込み

ファイル操作

キー入力 コマンド名 動作
C-x C-f find-file ファイルを開く
C-x i insert-file 別のファイルを挿入する
C-x C-v find-alternate-file 別のファイルを開く
C-x C-k バッファ名 kill-buffer バッファを閉じる
C-x C-b list-buffers バッファの一覧を表示
C-x C-s save-buffer バッファの保存
C-x C-w write-file 別名でファイルを保存

バッファメニューによるバッファ操作

キー入力 コマンド名 動作
C-x C-b list-buffers バッファの一覧を表示
d/k Buffer-menu-delete バッファに削除マークを付ける
s Buffer-menu-save バッファに保存マークを付ける
x Buffer-menu-execute マーク付けされたバッファを削除/保存する

編集

キー入力 コマンド名 動作
C-@ or C-SPC set-mark-command リージョン(選択範囲)の開始位置(マーク)を設定
C-w kill-region リージョン(選択範囲)をキル(カット)する
M-w kill-ring-save リージョン(選択範囲)をコピーする
C-y yank 最後にキルした内容をヤンク(ペースト)する
C-_ or C-x u undo 直前の変更を取り消し
C-s isearch-forward 下方向へ文字列を検索
C-r isearch-backward 上方向へ文字列を検索
C-u 文字数 C-x TAB 選択したリージョンに対して指定した文字数分インデントする。マイナスの文字数(-4とか)を指定すると逆方向にインデントする

ウィンドウ(OSの1つのウィンドウ内での枠)操作

キー入力 コマンド名 動作
C-x 3 split-window-horizontally ウィンドウを左右に分割
C-x 2 split-window-vertically ウィンドウを上下に分割
C-x 1 delete-other-window ウィンドウ分割を解除
C-x 0 delete-window 選択されたウィンドウの削除
C-x o other-window 次のウィンドウにカーソルを移動

フレーム(OSのウィンドウに相当)操作

キー入力 コマンド名 動作
C-x 5 2 make-frame 新しいフレームの作成
C-x 5 1 delete-other-frames 他の全てのフレームを削除
C-x 5 0 delete-frame 現在のフレームを削除
C-x 5 o other-frame 別のフレームに移動

キーバインド

キー入力 コマンド名 動作
C-h k describe-key 入力されたキーバインドの説明を表示
C-h a apropos-command 入力された文字列が含まれているコマンド一覧を表示
C-h b describe-bindings 現在のキーバインド一覧を表示

カーソル移動

キー入力 コマンド名 動作
C-p previous-line カーソルを1行上に移動
C-n next-line カーソルを1行下に移動
C-f forward-char カーソルを1文字右に移動
C-b backward-char カーソルを1文字左に移動
C-a beginning-of-line 行の先頭へと移動
C-e end-of-line 行の末尾へと移動
C-v scroll-up 下方向へと縦スクロール
M-v scroll-down 上方向へと縦スクロール
M-< beginning-of-buffer バッファの先頭へと移動
M-> end-of-buffer バッファの末尾へと移動

文字コードを変換して再読み込み

キー入力 コマンド名 動作
C-x RET c universal-coding-system-argument 文字コードを変更する(例:utf-8-unix)

NSIntegerを32bit/64bit両環境で表示させるには

iPhoneは5Sから64bitになりましたが、64bit環境だとNSIntegerの値が異なります。

32bit 64bit
long 4 8
size_t 4 8
NSInteger 4 8
CGFloat 4 8

このため、

NSInteger count=1;

NSLog(@”NSInteger count = %d”, count);

といったプログラムを組むと、64bit環境で実行しようとすると

ViewController.m:122:86: Values of type ‘NSInteger’ should not be used as format arguments; add an explicit cast to ‘long’ instead

のようなエラーが出力され、%ldに訂正するようにXcodeに勧められます。
しかし、

NSInteger count=1;
NSLog(@”NSInteger count = %ld”, count);

のように訂正すると、今度は32bit環境で実行した場合にエラーになります。

対策として、32bit/64bit両対応にするには、

NSInteger count=1;
NSLog(@”NSInteger count = %zd”, count);

と「z」を付けると両対応できるようです。

RPMパッケージを定期的に更新するには

サーバは、セキュリティーアップデートが出る度に定期的に更新しないと大変なことになりますが、手動でいちいち

# yum update

とするのは面倒だったりします。

CentOSにはyum-cronなるものが用意されており、これを動かしておくと定期的にupdateしてくれます。
まず、パッケージを導入します。

$ sudo yum install yum-cron

起動します。

$ sudo /etc/init.d/yum-cron start

次にサーバ起動時に自動起動されるかを確認しておきます。

$ sudo /sbin/chkconfig –list yum-cron
yum-cron 0:off 1:off 2:off 3:off 4:off 5:off 6:off

ここで3(runlevelコマンドで確認できる数字)がoffになっていたりするとサーバ起動時に起動しませんので、自動起動するように設定しておきます。

sudo /sbin/chkconfig yum-cron on

再度起動状態を確認します。

$ sudo /sbin/chkconfig –list yum-cron
yum-cron 0:off 1:off 2:on 3:on 4:on 5:on 6:off

3がonになっていれば終了です。

[Mac] Macでスリープせずにディスプレイの電源を切るには

Macで夜中に作業をさせたまま寝たい時などに画面が明るくて邪魔になる時があると思います。

Macでスリープにせずにディスプレイを消灯させたい(真っ暗にする)には、

control + shift + eject

のキーボードショートカットで対応可能です。

その他、主要なショートカットはこちらに載ってます。

LVMで論理ボリュームのサイズを変更する

LVMではスナップショット機能を有効にすることができますが、既に物理ボリュームを限界まで使ってパーティションを作っているとスナップショット用に領域を作れません。
新たにディスクを買い足すなどしてボリュームを追加する方法もありますが、論理ボリュームに空きがあればサイズを変更してスナップショット用の領域を空けることが出来ます。

まず、パーティションをumountしておきます。

rootパーティションなどはアンマウントできないため、インストールCDなどから起動します。

一旦、ファイルシステムに対してfsckをかけます。

# e2fsck -f /dev/VolGroup00/LogVol00

resize2fsでファイルシステムのサイズを変更します(この例では20Gに変更)

# resize2fs /dev/VolGroup00/LogVol00 20G

lvreduceで論理ボリュームのサイズを変更します。

# lvreduce -L 20G /dev/VolGroup00/LogVol00

lvdisplayコマンドでサイズを確認するとサイズが変わっていると思われます。

# lvdisplay /dev/VolGroup00/LogVol00

— Logical volume —
LV Path /dev/VolGroup00/LogVol00
LV Name LogVol00
VG Name VolGroup00

略

LV Size 20.00 GiB

ソースRPM(SRPM)のダウンロード方法

yumdownloaderというコマンドを使うと、ソースrpmをダウンロードできます。
そのため、以下のコマンドでパッケージをダウンロードします。

$ sudo yum install yum-utils

使い方

ソースrpmをダウンロードするには以下のコマンドを実行する

$ sudo yumdownloader –source パッケージ名

[Mac] Macで休止状態を有効にする

注意:この記事は最新のEl Capitanでは確認していません。

Macではデフォルトでスリープ(電源が入っている)状態が有効になっており、windowsのようにメモリーの状態をHDDに記録して電源を切るようなディープスリープ(休止状態)が有効になっていません。

$ sudo pmset -g

を実行し

hibernatemode 3

となっていれば通常状態です。
ディープスリープ(休止状態)を有効にするには、

$ sudo pmset -a hibernatemode 1

としてやると休止状態が有効になります。

sudoの設定

root権限で何かコマンドを実行する必要がある場合、一般ユーザーはsuコマンドを使ってrootユーザーになる必要があります。

しかし、sudoを使うと一時的にrootユーザーの権限でコマンド実行することができます。

sudoコマンドを実行するには、あらかじめrootユーザーになって以下のコマンドを実行します。

# visudo

ここに、次の行を追加するとhogehogeユーザーはsudoコマンドを使って、すべてのコマンドを実行できるようになります。

hogehoge ALL=(ALL) ALL

hogehogeの部分に%をつけるとグループ名を指定することになり、

%wheel ALL=(ALL) ALL

とすると、この場合はwheelグループに所属するユーザーに対してsudoの実行権限を与えることになります。

Spotlightの検索インデックス再構築

MacではSpotlightという全文検索システムが搭載されていますが、これのインデックスが壊れた場合や
すぐに再構築したい場合は次のコマンドを実行します。

$ sudo mdutil -E /

この場合ルートディレクトリ(/)から下にあるファイルに対してインデックスを再構築します。

[Mac] Macにsshpassをインストールする

Macにsshpassをインストールしようと思いHomebrewを使ってみたところ、

$ brew install sshpass

Error: No available formula for sshpass

We won’t add sshpass because it makes it too easy for novice SSH users to

ruin SSH’s security.

セキュリティーに問題があるので、やめとけと言われます。

とはいえ、sshpassを必要するソフトウェアはあるので、誰かが公開してくれたFormulaを利用させてもらいます。

$ brew install http://git.io/sshpass.rb

以上です。
ちなみにファイルに中身は、

require ‘formula’
class Sshpass < Formula
  url ‘http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz’
  homepage ‘http://sourceforge.net/projects/sshpass’
  sha256 ‘c3f78752a68a0c3f62efb3332cceea0c8a1f04f7cf6b46e00ec0c3000bc8483e’
  def install
    system “./configure”, “–disable-debug”, “–disable-dependency-tracking”,
    “–prefix=#{prefix}”
    system “make install”
  end

  def test
    system “sshpass”
  end
end

と単純なので、自分DL & ./configure & make installしてもOKですが、brewを使った方が管理しやすいので利用しました。