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
| def foo(x):
return x + 9
[foo(x) + 7 for x in range(7)]
|
| : [16, 17, 18, 19, 20, 21, 22]
|
session mode
| def foo(x):
if x>0:
return x+1
else:
return x-1
foo(1)
|
non-session mode
return を使う必要がある.
| def foo(x):
if x>0:
return x+1
else:
return x-1
return foo(5)
|
サンプル
ipython
- 公式: https://github.com/gregsexton/ob-ipython
- 公式以外のサンプル: https://github.com/dfeich/org-babel-examples/blob/master/python/ipython-babel.org
| %matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
|
| def foo(x):
return x + 9
[foo(x) + 7 for x in range(7)]
|
| | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
|
| plt.hist(np.random.randn(20000), bins=200)
|
| [[file:~/tmp/image1.png]]
|
| 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 marked
top'. | | u | Go to the page marked up'. | |-----------|---------------------------------------------------------------------| | n | Go to the page marked
next'. | | 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が起動しないとき
- とりあえずRailsプロジェクトで動けばいいのでその前提での対処を書く
Messages
やruby-ls::stderr
バッファなどを確認する - 特に
ruby-ls::stderr
を見たとき次のようなメッセージがあった.
| 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)
|
Gemfile
にgem '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
でも入る.
| 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
セクションわけを雑にプログラムで処理したい
セクションは*
で設定するわけで, 処理したいセクションがあるなら次のような処理でファイルを読み込んだ文字列を分割すればよい.
| 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
| (defun my-say-hello ()
(interactive)
(async-shell-command "echo %TEST%"))
|
これで別バッファが開いてコマンド実行結果を出力してくれる. subshell-proc.elも良さそう.
キーバインドの確認
M-x describe-mode
- 以前は
helm-descbinds
を愛用していたが, helm
が開発停止になってしまったため.
多言語入力
set-input-method
からいろいろな言語・文字入力が選べます.
- 一覧
list-input-methods
describe-input-methods
- 発音記号入力: ipa
- ロシア語 (キリル文字) 入力: ロシア語ガイド参照.
- ギリシャ文字入力: ギリシャ語ガイド参照.
- 中国語入力, 特に簡体字・ピンイン入力: 中国語ガイド参照.
ディレクトリレベルで一括置換
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
しておくこと.
| ;; メニュー表示
(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で割り切る手もある.
メニュー表示・非表示
| ;表示
(menu-bar-mode 1)
;非表示
(menu-bar-mode 0)
|