読者です 読者をやめる 読者になる 読者になる

fnwiyaBlog

EmacsとかLispとか可視化とか

helmの「.」と「..」を表示させない

helm使用時に絞り込む前の状態ではディレクトリの一覧に「.」(現在のディレクトリ)と「..」(ひとつ上のディレクトリ)が表示されています。 しかし現在のディレクトリのほうは使い道が無いですし、 上のディレクトリには「←」でいけます。 ディレクトリを深く…

evil-modeでもkey-comboを使う

特定のキーの連続入力により挙動を変化させることのできるkey-comboですが、 evilの際はevil-***-state-mapに定義しないと/等のキーを設定していた場合に normal-state時検索が行えなくなります。(おそらく設定した値を挿入する動きになっているため) (use-p…

emacsでオリジナルのカラーテーマを作るときはbase16をもとにすると楽

見た目にこだわる上でオレオレカラーテーマが作りたくなると思いますが、 一からつくるとさすがにしんどいのでまずは本のテーマのカラーパレットを変更するぐらいにとどめておくといいと思います。 その時におすすめなのはbase16というものです。 mkaito/bas…

evilのキーバインド設定をEmacsのデフォルトと共存させる

Evilにしてから数日が立ちますがyyとかddとか素晴らしいですね。 心なしか気持ちまで軽くなった気がします。 しかし、なれの問題かもしれませんがEmacsのキーバインドを使いたい時もあるので 以下の設定でキーバインドをOverwriteしています。 ;;;;;;;;;;;;;…

evilに雑に入門してみる

こちらを参考にevilを導入してみました。 tarao.hatenablog.com 最初はspacemacsもありかなと思ったのですが、 今までの設定とのバランスが難しかったのでいったんevilでやってみます。 (use-package evil :config ;; before (evil-mode 1) (setq evil-cross…

emacsでポモドーロテクニック(org-pomodoro)

ポモドーロテクニックとはざっくりいえば時間を区切って短時間集中->休憩->集中を繰り返すことで、 作業効率をあげようというものです。 www.lifehacker.jp そのタイマー機能をemacs内で実現するのがorg-pomodoro.elです。 github.com 使い方 init.elで(requ…

emacsで時間を図る(stopwatch.el)

集中力が持たない人は時間を図ってみるといいらしいです。 そんなことも簡単、emacsならね。 Stopwatch (November 16, 2011)

emacsでコードを折りたたむ(hs-minor-mode)

階層が深くなってよみずらい、、、。 そんな時はコードを折りたたんで表示するようにすると良いと思います。 (add-hook 'c++-mode-hook '(lambda () (hs-minor-mode 1))) (add-hook 'c-mode-hook '(lambda () (hs-minor-mode 1))) (add-hook 'scheme-mode-ho…

emacsで意図しない画面分割を防ぐ(save-window-excursion)

save-window-excursionを使うとemacsが意図せず 画面分割されてしまうことを防げます。 例えば起動時にバックグラウンドでコマンドを走らせたい場合など。 こうした用途ではpop-winもありますが、 pop-winでは結局popを閉じる一手間がいるので特に確認の必要…

multi-termで日本語/全角文字を入力する

multi-termはそのままでは日本語打っても読み込んでくれませんが 以下の設定を書けば大丈夫です。 (setenv "LANG" "ja_JP.UTF-8") (set-language-environment "Japanese")

auto-package-updateでemacsのパッケージのアップデートを自動化する

パッケージのインストールは package.elでパッケージを一括管理&いらないパッケージ削除 - fnwiyaBlog 等で自動化している方が多いかと思いますがアップデートはどうでしょう? M-x list-package->U->xでアップデートできるのですが、 少々手間です。 その…

emacsのautoinsertで楽する

いつも書く決まったテンプレート。 そんなものを書くことは人間のすべきことじゃありません。 以下を設定して (require 'autoinsert) (setq auto-insert-query nil) (setq auto-insert-directory "~/.emacs.d/insert-tmp/") (setq auto-insert-alist (append…

emacsで2画面同時にスクロールしたい(scroll-all-mode)

2つのファイルの差分をみたい時に画面分割した上で2画面同時にスクロールできると便利です。 そんなときはM-x scroll-all-modeでscroll-all-modeを起動してC-nなりで移動すれば隣の画面も一緒についてきてくれます。 解除も同じくM-x scroll-all-modeです。

emacsの設定を複数台で共有するときにバイトコンパイルで気をつけること。

複数台でemacsの環境を共有するときはgit等で設定ファイルを持って行くと思いますが、 *.elcごとgitに挙げない場合はpullした場合でもemacs起動時以前のelcが読み込まれるので新しい設定が反映されません。 これの解決策は色々悩んだのですが起動時にバイト…

emacsの起動を早くしたかったらとりあえずやっとくこと

GCの設定 (setq gc-cons-threshold (* 128 1024 1024)) バイトコンパイル M-x byte-compile-file ->"~/.emacs.d/init.el" 遅延ロード use-packageを使うならここが詳しいです。 Emacs - use-packageで可読性の高いinit.elを書く - Qiita 使ってない設定を消…

最高に便利な関数たちがのっている.emacs.d

感動した。 github.com 個人的にfile-defuns.elのrename-current-buffer-fileとかdelete-current-buffer-fileはずっと欲しいなと思いつつ作るのめんどうがっていたのでありがたい。勉強させてもらいますm( )m

find-fileでディレクトリが無ければ作る関数

新しくディレクトリを作りつつ新規ファイルを開きたい時に、 M-x make-directory ↓ find-file は面倒なので。 (ターミナルでmkdirはもっと面倒) ;;; find-fileでディレクトリが無ければ作る (defun make-directory-unless-directory-exists() (let ( (d (fil…

emacsを立ち上げたら自動で.emacs.dをpullしてきて、emacsを閉じるときに自動でpushする。

複数台でemacsの設定を共有しているときに便利です。 以下の設定をinit.elの最初(すくなくともinit-loaderによる読み込みより前)に記述してください。 ※ファイル分割を行っていることが前提です。 (shell-command "git -C $HOME/.emacs.d pull") (add-hook…

emacs起動時にランダムに名言をミニバッファに表示するmeigen-botリリースしました。

emacsを立ち上げさっそくタスクにとりかかるのもいいですが、 偶然の言葉との出会いも素敵です(ほぼ日手帳的な良さ) それを叶えてくれるパッケージ作成しました。 fnwiya/meigen-bot · GitHub 設定 (add-to-list 'load-path path-to-meigen-bot) (require …

読み込まれないバイトコンパイル済みファイルを保存時に削除する

init-loaderでは数字から始まるファイルのみ読み込まれます。 その特性を利用して、一時的に使用しない設定ファイルのファイル名を「00-ファイル名」と頭にアンダースコアをつけた形に変更するのはよく使うテクニックだと思います。 しかし弊害としてこの状…

emacs lispに書かれている;;;###autoload(autoload cookie)の意味

emacsのパッケージに書かれている;;;###autoloadがずっと謎でした。 簡単にいうautoload cookieというやつで、 これをつけておくとパッケージにしたときにautloadファイルが生成されて、 ファイルの読み込みをautoloadしてくれるようになるみたいです。 たし…

emacsからはてなブログを投稿するhatena-blog-mode.elをリリースしました

はてなダイアリー用には色々なelispがあったのですがはてなブログ用はなかったので作ってみました。 fnwiya/hatena-blog-mode · GitHub 設定 (require 'hatena-blog-mode.el) (setq hatena-id "XXXXXXXX") (setq hatena-blog-api-key "XXXXXXXX") (setq hate…

emacsのwindowをリサイズする

完全にいただきものです。 hydraとか使ってたけどこっちのほうがシンプルな気がする。 分割したウィンドウの大きさをインタラクティヴに変更する - mooz deceives you Re: 分割したウィンドウの大きさをインタラクティヴに変更する - とりあえず暇だったし何…

emacs起動時にバックグラウンド(非同期)でシェルコマンドを走らせる

emacsは毎日起動しますよね? だったらライブラリのアップデートなどをその起動時に自動で行うようにしたら便利なのでは?ということで設定しました。 ポイントはasync-shell-commandを使うことでバックグラウンドで起動し、 特に意識することなく普通に他の…

emacsの起動高速化tips(init時に必要ない標準機能系の設定は全部emacs-startup-hookにする)

外部パッケージはuse-packageなどで遅延ロードができるのですが、 標準機能はそうもいきません。 そこでまとめてemacs-startup-hookに引っかけるようにすると、 emacsを立ち上げる際にはloadされず、 init後に読み込まれるので起動を高速化できます。 (add-h…

key-combo.elでメジャーモードごとに設定をかき分ける/{やセミコロンでの自動改行をトグルで切り替える。

github.com smartchrからの乗り換え。 個人的に便利だなとおもったのは ("{" . ("{`!!'}" "{" "{\n`!!'\n}")) (";" . (";\n" ";")) などの改行を入れる系です。 こういった機能はjs2-modeなどの大きなパッケージに入っていることもありますが、 改行したいと…

emacsのタイトルバーに時計

時間は共通なんだからバッファごとのモードラインに表示する必要ない。 run-with-timerで5秒毎に更新して上げてます。 ついでにファイルを開いているときはフルパス、その他のときはバッファ名を表示するようにしてます。 ;; タイトルバー (when (window-sys…

emacsでperl(cperl-mode)

すすんで書くことはあまりないですが読むことがあったので設定。 (use-package cperl-mode :mode (("\.pl$" . cperl-mode)) :interpreter (("perl" . cperl-mode) ("perl5" . cperl-mode) ("miniperl" . cperl-mode)) :config (setq cperl-indent-level 4 cp…

emacsを起動時に画面左半分にする

全画面はコマンドあったのですが半画面は現状ハードコードするしかないのかな? 複数環境で画面サイズが違うのでかき分けてます。 ;; check-frame-size ;; at *scratch* ;; (frame-height) => C-j ;; (frame-width) => C-j (when (memq window-system '(mac …

.emacs.dの.gitignore設定はホワイトリストがおすすめ

いわゆるdotfilesはgitで管理されてる方が多いと思いますが、 その際余計な情報を紛れ込ませないように.gitignoreの設定ができます。 とくにemacsはしらない間にいろいろなファイルが自動生成されるので、 ignoreの設定はホワイトリストがおすすめです。 最…

hydraで画面分割のサイズ調整を簡単に

C-x 2等で画面分割をすると基本綺麗に等分されるのですが、 メインと出力先みたいな形で画面分割の割合を変えたいことがあります。 ただいちいち[M-x ~~~×調整したい分]とやるのは面倒なのでhydraを導入しました。 今のところほぼサンプルのものそのまんまで…

emacsでRを書く(ESS)

分析系は全部pythonでやろうかとも思ったのですがRのほうが情報が充実してることもあるので。 ESS - Emacs Speaks Statistics (use-package ess :mode (("\\.[rR]$" . R-mode)) :config ;; 起動時にワーキングディレクトリを尋ねられないようにする (setq es…

quickrunで結果を確認しつつ開発する

これでいちいちターミナルに移ってpython yourscript.pyとかしなくてもよくなります。 (use-package quickrun :bind (("<f5>" . quickrun)) :config (push '("*quickrun*" :height 20) popwin:special-display-config) )</f5>

emacsの設定で、該当する設定ファイルがあった場合のみ読み込む

emacsを複数環境で同期しているのですが、 公開できない情報をdropboxで管理していて、 片方の環境ではその設定は使っていません。 そんなときでも同じinit.elで動かせるように、 特定のディレクトリが存在したら設定を読み込む設定をしています。 (use-pack…

emacs内のシェルでプロンプトにm4で出るのを消す

久々に設定やり直したら出てきたのでメモ mkdir -p ~/.terminfo/65/ cp /usr/share/terminfo/65/eterm ~/.terminfo/65/eterm-color

参考にしているdotfilesまとめ

最近dotfilesを再構成しようと取り組んでいるのですが その過程で参考にさせていただいた方々のご紹介です。 今はまだまだですが インストールスクリプト( installation script )を用意する HTTP 経由で利用できるように工夫する deploy と initialize は…

dotfilesに.emacs.dを統合

今までなんとなく別管理してましたが統合しました。 github.com ホントはマージとかしたらいいんでしょうけど色々一新したい気分だったので.emacs.dの.gitは吹き飛ばしました。 おかげでコミット履歴がなくなってgithubの草がさみしくなりましたがこれからま…

emacsライクなキーバインドのtmux

emacs内でmulti-termを走らせるのもいいですが、 たまにシェルにこもるときに快適でありたいのでtmuxを導入し、emacsの操作感に近づけてみました。 まだ凝りきれていない部分もありますが、 pecoと合わせればhelmやidoも再現できる気がするので弄んでみます…

emacs&slime&sbcl(CommonLisp-mode)

emacsでcommon lispを書くときの設定です。 処理系は情報量も多いsbclにしました。 以下の設定の上、M-x slimeで起動します。 最初焦りましたがとりあえず(quit)で終了できることがわかって一安心です笑 (setq inferior-lisp-program "/usr/local/bin/sbcl")…

変数名・関数名で悩んだ時のお助け(codic.el)

英語はあまり得意でないので変数名や関数名で悩むことがあります。 そんな時はcodic codic.jp 本家サイトはこちらですがemacsから開けます。 melpaにあるのでインストールして以下の設定でM-x codicを打って、 日本語を入力すれば該当する英単語を教えてくれ…

{を補完して欲しいときと片方だけでいい時うまく使い分ける(smartchr)

smartparensなどを使っていると{だけ入力するのが意外と大変です。 - {を押す - C-dで}消す みたいな2コマンド必要になります。 かといって普段は{}と補完されたほうが便利なのでうまいことできないかと考えていたのですがsmartchrを使うとうまくいきました…

emacsでhtmlのリアルタイムプレビュー(Impatient Mode)

やっと見つけたリアルタイムプレビューのパッケージです。 他にもいくつかありましたが、外部環境に依存しないのが素晴らしいです。 github.com 使い方はREADMEのとおりですが まず M-x httpd-start 次にプレビューしたいバッファで M-x httpd-start その後…

今開いているバッファ以外をまとめてkillするコマンド

特にタブを使用している人向けですが 大量にバッファを開くとタブが増えてバッファ間の移動が不便になります。 かといって一つ一つバッファをC-kしていくのも面倒なのでまとめてkillするコマンドを設定しています。 (defun my/filter (condp lst) (delq nil …

helmからidoに移行しました

emacsを使うのであれば必須レベルのパッケージhelmですが、 なんか重い気がしたのとtwitter上で作者どうなん的な話がでていたのを受けて 標準搭載のidoに移行しました。 自分の現状の使用方法(M-xとfind-fileとrecentfができればだいたい大丈夫)であればなん…

ファイルの先頭・最後への移動を簡単に(sequential-command-config)

ファイルの最後に移動したい時どうしてますか? デフォルトだとたしかC->みたいな押しにくいコマンドが割り当てられていると思いますが、 もっと便利にしましょう。 (use-package sequential-command-config :bind (("C-a" . seq-home) ("C-e" . seq-end)) :…

emacsでjquery書くならtern-mode

いやぁjquery便利ですね。 基本はvanila.js好きですが、 DOM操作は変な意地を貼らずにjquery使ったほうが早いです。 document.getElementByIdって、、、^^; 以下を参考に設定しました。 EmacsにternをインストールしてjQueryを補完する -- blog.10rane.com (…

emacsからFacebookのチャット

普段ウェブサイトブロッカーという拡張機能で指定時間にFacebookへのアクセスを禁止してるんですが、 チャットだけは必要なことがあったのでemacsから起動できるように設定しました。 ;; Define location of gnutls-cli on OS X, instaled via brew (setq st…

emacsでxmlを編集するときの設定

xmlを書いていると開始タグと閉じタグがごちゃごちゃしてきて対応関係がわからなくなったりしますが こちらの設定を行えば

emacでsqlを書くときに自動でキーワードを大文字化する

SQLを書くときにもうSHIFT押しっぱなしにする必要はありません。 (use-package sql :mode (("\.sql$" . sql-mode)) ) (use-package sqlup-mode :commands (sqlup-mode) :init (add-hook 'sql-mode-hook 'sqlup-mode) (add-hook 'sql-interactive-mode-hook '…

emacsでルート権限が必要なファイルを開く

emacs上でファイルを開くときにルート権限が必要だとReadOnlyになったりしてつらいです。 そこでroot権限が必要なときは自動で切り替えてくれる設定を導入しました。 (defun th-rename-tramp-buffer () (when (file-remote-p (buffer-file-name)) (rename-bu…