コンテンツにスキップ

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

公式

  • 公式: http://orgmode.org/worg/org-contrib/babel/languages/ob-doc-python.html
1
2
3
4
def foo(x):
   return x + 9

[foo(x) + 7 for x in range(7)]
1
: [16, 17, 18, 19, 20, 21, 22]

session mode

1
2
3
4
5
6
7
def foo(x):
 if x>0:
   return x+1
 else:
   return x-1

foo(1)
1
: 2

non-session mode

return を使う必要がある.

1
2
3
4
5
6
7
8
def foo(x):
 if x>0:
   return x+1

 else:
   return x-1

return foo(5)
1
: 6

サンプル

1
print("Hello, world!")
1
: Hello, world!

ipython

  • 公式: https://github.com/gregsexton/ob-ipython
  • 公式以外のサンプル: https://github.com/dfeich/org-babel-examples/blob/master/python/ipython-babel.org
1
2
3
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
1
2
3
4
def foo(x):
   return x + 9

[foo(x) + 7 for x in range(7)]
1
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
1
plt.hist(np.random.randn(20000), bins=200)
1
[[file:~/tmp/image1.png]]
1
2
3
4
5
6
7
8
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 = "<img src='data:image/png;base64,%s'>" % (b64)
print(img_str)

オプションについて

common lispのHyperSpecを見やすくする

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

  • C-c C-k
    • フィールド指定法: "1 2", "1,3", "1-3" など. ハイフン入りのときだけ range 指定扱い。
    • 特定の列だけ消したいときはC-c C-k.
    • 逆に特定の列だけ取り出したいときはC-c C-kのあとC-c C-zで貼り付け.
  • C-c C-a: 見やすく整形
  • C-c C-u: 整形した状態から戻す
  • C-c C-t: は行列入れ替え
  • C-M-f, C-M-b: 列単位で前後に移動. 空白を含むデータがあるとき便利.
  • C-M-k: 次の列のデータだけkill.

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

  • 参考
  • M-x picture-mode
  • 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

インストール

1
gem install sorbet solargraph

lspが起動しないとき

  • とりあえずRailsプロジェクトで動けばいいのでその前提での対処を書く
  • Messagesruby-ls::stderrバッファなどを確認する
  • 特にruby-ls::stderrを見たとき次のようなメッセージがあった.
1
2
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)
  • Gemfilegem 'solagraph'を追加
    • プロジェクトがあり, その配下のGemfileに記述があってインストールされているかが重要な模様
  • bundle install
  • もう一度rbファイルを開く: エラーがなければOK

MacでDownloadsが開けない

  • 参考: Listing directory failed but 'access-file' worked
  • 画面左上のリンゴマークから「システム環境設定」を開く
  • 「セキュリティとプライバシー」を開く
  • 「プライバシー」タブを開く
  • ウィンドウの左半分の一覧から「フルディスクアクセス」を開く
  • ウィンドウの左下にある錠前をクリックする
  • ログインパスワードを入力する
  • ウィンドウの右半分の一覧下の「+」ボタンをクリックする
  • ファイル選択ダイアログで内蔵ドライブのルート(「Macintosh HD」など)を開く
  • ⌘+⇧+[.](コマンド+シフト+ピリオド)を押して隠しファイルを表示する
  • 「/usr/bin」を選ぶ
  • 右の一覧から「ruby」を選ぶ
  • 「プライバシー」タブに戻る
  • 一覧に「ruby」が追加されていることを確認する
  • セキュリティロックを有効にする

migemo インストール Linux

apt-getでも入る.

1
2
3
4
5
6
7
cd ~/work
git clone https://github.com/koron/cmigemo
cd cmigemo
./configure --prefix=$HOME/local
make gcc
make gcc-dict
make gcc-install

MySQL接続

  • 適当にsqlファイルを開く
  • M-x sql-mysqlを実行
  • ミニバッファで適切な情報を入力
  • SQLを書いて次のコマンドでSQL: MySQLバッファに送信
コマンド 説明
C-c C-b バッファ全体を送る
C-c C-c 段落を送る
C-c C-r 選択領域を送る

org

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

begin_srcなどのキーバインド

org syntax

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

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

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

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

表計算

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

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

python利用

  • C-c C-pでREPL(IPython)を発動できる
  • C-c C-cでスクリプト全体をロードする
  • C-c C-rで選択範囲をロードする

sudoで開く

  • 参考
  • C-x C-fなどでファイルを開くとき, /sudo::をつけて開く
  • パスワードが要求されるので入力する

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

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

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

キーバインドの確認

  • M-x describe-mode
  • 以前はhelm-descbindsを愛用していたが, helmが開発停止になってしまったため.

多言語入力

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

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

  • dired-do-query-replace-regexp

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

  • バッファ全体を選択: C-x hまたはM-x mark-whole-buffer)
  • C-M-\またはM-x indent-region

バッファの一括削除

  • helm 起動
  • 適当にバッファを選択
    • C-SPC でいらないバッファを選択
    • 適当に絞り込んだ上で M-a で全選択
  • M-D

フォントの大きさ指定

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

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

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

  • https://qiita.com/takc923/items/1d65622ed82697d00f6a
  • dired でディレクトリまたはファイルを選択
  • M-x dired-do-query-replace-regexp

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

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

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

メニュー表示・非表示

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