Emacs

私のメインエディタがEmacsなので適当に記録します.

babelのサンプル

キーバインド

BEGIN_SRC を楽に入力したい: ~/junk/rubikitch.org 92 org-babel 2 ■■ 今週の Emacs 「org-babel でファイルを作成」

「< s TAB」で org-mode 標準のスニペットが発動する. 他にも ~/.emacs.d/conf/20org-babel.el を見ると rb, hs, py なども設定している.

babel 実行

| C-c C-c | コード内部でコード実行 | | C-c C-v C-b | バッファ中のブロック全体を実行 | | C-c C-v C-t | tangle | | C-c C-v C-m | tangle してからプログラム実行 | | C-c C-v C-z | python のバッファにうつる | | M-m | タブが効く別バッファにうつる |

python

公式

+BEGIN_SRC python :results pp :session

def foo(x): return x + 9

[foo(x) + 7 for x in range(7)]

+END_SRC

+RESULTS:

[16, 17, 18, 19, 20, 21, 22]

session mode

+BEGIN_SRC ipython :session

def foo(x): if x>0: return x+1 else: return x-1

foo(1)

+END_SRC

+RESULTS:

2

non-session mode

return を使う必要がある.

+BEGIN_SRC python

def foo(x): if x>0: return x+1

else: return x-1

return foo(5)

+END_SRC

+RESULTS:

6

サンプル

+BEGIN_SRC ipython :session :results output

print("Hello, world!")

+END_SRC

+RESULTS:

Hello, world!

ipython

+BEGIN_SRC ipython :session

%matplotlib inline import matplotlib.pyplot as plt import numpy as np

+END_SRC

+RESULTS:

+BEGIN_SRC ipython :session mysession :exports both

def foo(x): return x + 9

[foo(x) + 7 for x in range(7)]

+END_SRC

+RESULTS:

| 16 | 17 | 18 | 19 | 20 | 21 | 22 |

+BEGIN_SRC ipython :session :file ~/tmp/image1.png :exports both

plt.hist(np.random.randn(20000), bins=200)

+END_SRC

+RESULTS:

[[file:~/tmp/image1.png]]

+BEGIN_SRC ipython :session :results output

import base64 img_file = "tmp/image.tmp.png"

plt.hist(np.random.randn(20000), bins=200) plt.savefig(img_file) b64 = base64.encodestring(open(img_file, 'rb').read()).decode('utf-8') img_str = "" % (b64) print(img_str)

+END_SRC

+RESULTS:

+begin_example

+end_example

オプションについて

common lispのHyperSpecを見やすくする

csv-mode: 行列入れ替えなどのショートカット

dired-filterヘルプ

/ C-h でヘルブが見られる.

コマンド 意味
/ d ディレクトリのみ
/ f ファイルのみ
/ m メジャーモード
/ . 拡張子
/ n ファイル名
/ r 正規表現
---------- -------------------------
/ ! 否定
/ | or 検索 (/ o ではない!)
/ p 直前のフィルタを消す
/ / すべてのフィルタを消す
---------- -------------------------
% m 一括マーク
M d ディレクトリのみ
M f ファイルのみ
M m メジャーモード
M . 拡張子
M n ファイル名
M r 正規表現

edit-picture-mode

コマンド 動作
C-c C-c 元のモードに戻る
矩形選択してから C-c C-r 四角を書く

eww

Windows だと重い.

よく使うキーバインドの抜粋

Key Function
& Browse the current URL with an external browser.
F Toggle font between variable-width and fixed-width.
G Go to a URL
R Readable mode
w `eww-copy-page-url'
b Add the current page to the bookmarks.
B Display the bookmark list.

Default eww key bindings

|-----------|---------------------------------------------------------------------| | Key | Function | |-----------|---------------------------------------------------------------------| | & | Browse the current URL with an external browser. | | - | Begin a negative numeric argument for the next command. | | 0 .. 9 | Part of the numeric argument for the next command. | | C | Display a buffer listing the current URL cookies, if there are any. | | H | List the eww-histories. | | F | Toggle font between variable-width and fixed-width. | | G | Go to a URL | | R | Readable mode | | S | List eww buffers | | d | Download URL under point to eww-download-directory'. | | g | Reload the current page. | | q | Quit WINDOW and bury its buffer. | | v |eww-view-source' | | w | eww-copy-page-url' | |-----------|---------------------------------------------------------------------| | b | Add the current page to the bookmarks. | | B | Display the bookmark list. | | M-n | Visit the next bookmark | | M-p | Visit the previous bookmark | |-----------|---------------------------------------------------------------------| | t | Go to the page markedtop'. | | u | Go to the page marked up'. | |-----------|---------------------------------------------------------------------| | n | Go to the page markednext'. | | p | Go to the page marked `previous'. | |-----------|---------------------------------------------------------------------| | l | Go to the previously displayed page. | | r | Go to the next displayed page. | |-----------|---------------------------------------------------------------------| | TAB | Move point to next link on the page. | | S-TAB | Move point to previous link on the page. | |-----------|---------------------------------------------------------------------| | SPC | Scroll up | | DEL/Bkspc | Scroll down | | S-SPC | Scroll down |

gdb

ブレークポイント関連

したいこと キーバインド
セットする c-x space
現在のソース行に一時的なブレークポイントを設定 C-x C-a C-t
一時的に diable/enable ブレークポイントバッファの該当箇所で space でトグル
削除 該当行で C-x C-a C-d
削除 ブレークポイントバッファの該当箇所で D(大文字)
セット・削除 該当赤丸をマウスでクリック
disable・enable 該当行赤丸をマウスで Ctrl + クリック
変数の変化を見るために常に表示 C-x C-a C-w

実行

したいこと キーバインド
Step 一行進む。関数なら入って止まる C-x C-a C-s
Next 一行進む。 C-x C-a C-n
機械語 1 つ実行 Instruction? C-x C-a C-i
ブレークポイントに出会うまで実行 C-x C-a C-r
現在のカーソル行まで実行 C-x C-a C-u
現在のスタックフレームを出るまで C-x C-a C-f
いきなり現在のカーソル行に実行位置 jump C-x C-a C-j
現在の位置を表す▲をドラッグ そこまで実行

スタックフレーム

したいこと キーバインド
1つ外側のスタックフレームを選択する C-x C-a <
1つ内側のスタックフレームを選択する C-x C-a >

バッファ操作関連

したいこと キーバインド
参照した最後(Last)のバッファを開く C-x C-a C-l
各種バッファを閉じる q
ブレークポイントバッファで RET 該当のブレークポイントのソース開く
レジスタの値を見る gdb-display-registers-buffer
レジスタの値を書き換える レジスタバッファで RET
アセンブラバッファを開く gdb-display-assembler-buffer
メモリバッファを開く gdb-display-memory-buffer

変数

したいこと キーバインド
変数の値を書き換える ローカル変数バッファで RET
struct/union/array の値を見る ローカル変数バッファで RET
変数の値を評価する C-x C-a C-p

LSP

ruby

インストール

gem install sorbet solargraph

lspが起動しないとき

bundler: failed to load command: solargraph (/Users/user/.rbenv/versions/3.0.0/bin/solargraph)
/Users/user/.rbenv/versions/3.0.0/lib/ruby/3.0.0/bundler/rubygems_integration.rb:362:in `block in replace_bin_path': can't find executable solargraph for gem solargraph. solargraph is not currently included in the bundle, perhaps you meant to add it to your Gemfile? (Gem::Exception)

MacでDownloadsが開けない

migemo インストール Linux

apt-getでも入る.

cd ~/work
git clone https://github.com/koron/cmigemo
cd cmigemo
./configure --prefix=$HOME/local
make gcc
make gcc-dict
make gcc-install

MySQL接続

コマンド 説明
C-c C-b バッファ全体を送る
C-c C-c 段落を送る
C-c C-r 選択領域を送る

org

orgフォーマットのファイルについてまとめます.

begin_srcなどのキーバインド

org syntax

セクションわけを雑にプログラムで処理したい

セクションは*で設定するわけで, 処理したいセクションがあるなら次のような処理でファイルを読み込んだ文字列を分割すればよい.

with open(fname, "r", encoding="utf-8") as f :
    cont = f.read().split("** ")

テーブルの転置: org-table-transpose-table-at-point

表計算

最近ほとんど使っていない.

セル番号を表示・非表示を切り換えるには表の中でC-c }を押す. るびきちメルマガ参照.

python利用

sudoで開く

外部コマンド実行 async-shell-command

+BEGIN_SRC emacs-lisp :results xmp silent

(defun my-say-hello () (interactive) (async-shell-command "echo %TEST%"))

+END_SRC

これで別バッファが開いてコマンド実行結果を出力してくれる. subshell-proc.elも良さそう.

キーバインドの確認

多言語入力

set-input-method からいろいろな言語・文字入力が選べます.

ディレクトリレベルで一括置換

バッファの一括インデント

バッファの一括削除

フォントの大きさ指定

GUI 版ならメニュー表示して Options > Set Default Font から指定するのが速い. 変更後は Options > Save Options しておくこと.

;; メニュー表示
(menu-bar-mode 1)
;; メニュー非表示
(menu-bar-mode 0)

複数ファイルの一括置換 dired-do-query-replace-regexp

文芸的プログラミングの include 手法

るびきちメルマガ第 152 回参照.

最近ほぼ使っていない. いまなら Jupyter の方がいいだろう. ein がどの程度の出来になっているだろうか? VSCodeで割り切る手もある.

メニュー表示・非表示

;表示
(menu-bar-mode 1)
;非表示
(menu-bar-mode 0)