forked from missing-semester/missing-semester
-
Notifications
You must be signed in to change notification settings - Fork 17
/
editors-notes.txt
123 lines (109 loc) · 4.94 KB
/
editors-notes.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
このメモは教える時の参考に使用しています。
もしあなたが学生でここにたどり着いてしまったのなら、恐らく editors.md を見た方が良いでしょう。
文章(エッセイ)を書くこととプログラムの違い
- プログラミング:長時間の執筆よりも、読み、移動、編集により時間を費やす
- 異なる目的には異なるプログラム
エディタを習得する価値あり
- 何百時間も節約できる
- 他のことと異なり、習得に時間をかける価値がある
学び方
- チュートリアルから始める
- コード(と理想的には文章)を編集するタスクでは全部必ずそのエディタを使う
- 悪い習慣を避ける
- 書きながら調べる
- より良い方法がありそうなら、多分本当にある
- プログラマはエディタの手入れをする。なのでエディタは超強力なツール
- 学習のタイムライン
- 数時間以内:基本的なエディタの機能を学ぶ(保存、終了…)
- 20時間以内:前に使っていたエディタと同じ速度で作業できる
- その後:メリットが始まる
- 学ぶのをやめない(とても便利で強力なツールがある)
どのエディタを学ぶべきか?
- みんな強いこだわりがある:エディタ戦争
- https://insights.stackoverflow.com/survey/2019/#development-environments-and-tools
- VS Code は GUI ベースのツールで最も一般的
- Vim は CLI ベースで最も一般的
- この講義では Vim を教える
- 全講師が Vim を使用
- Vi エディタ (1976)が由来、今日でも開発されている
- 興味深い発想
- 多くのツールが Vim のキーバインドを使用
(例: VS Code の Vim エミュレーションは 1400万ダウンロード)
- (GUI エディタと比較して)少し成長曲線があるが、価値はある
- 最終的に他のエディタを選ぶにしても、学ぶ価値はある
この講義では
- vimの哲学:このエディタのさっぱりした発想
- 基本
- デモ
- 演習、より学ぶためのリソース
- vimtutorで始める
- この講義:詳細ではなく思考法に集中する
モーダルな編集(モーダル ~ "モード")
- 多くの時間が、読む/移動する/小さな編集をすることに費やされるという考えを元に設計
- 簡潔な図式:ノーマルモード <-> 挿入モード
- より複雑な図式:ノーマル <-> {挿入、置換、ビジュアル、v-ライン、v-ブロック、コマンドライン}
- モードは左下に表示
- それぞれのモードでキーストロークは異なる意味を持つ:例 `x`
- caps lockをescapeにリマップ
基本
- ノーマルモードと挿入モードの切り替え
- 始めるのに必要な知識はこれだけ。挿入モードは予想通りに動く。
- バッファ vs タブ vs ウィンドウ
- バッファ ~ 開いたファイル
- タブには1つ以上のウィンドウがある
- バッファは0以上のウィンドウで開ける
- ウェブブラウザなどとは違う
- コマンドライン
- ノーマルモードで`:`
- :q, :w, :wq, :e {ファイル名}, :ls, :help {トピック} (:help :w, :help w)
vimのノーマルモードはプログラミング言語の一種(vimで一番重要な考え)
- 原理を学べば、面白い方法で組み合わせられる
- マッスルメモリーと化す
- 移動
- 選択
- 編集
- カウント
- 修飾子
デモ(壊れたfizzbuzz)
- mainは決して呼ばれない
- `G` ファイルの終わり
- `o` 下に1行追加
- "if __name__ ..." の部分で打ってみる
- 1の代わりに0から始まる
- `/range` を検索
- `ww` で2単語先に動く
- `i` でテキスト挿入、"1, "
- `ea` で単語の後ろに挿入"+1"
- "fizzbuzz" の新しい行
- `jj$i` でファイルの終わりにテキスト挿入
- ", end=''" を追加
- `jj.` で直前のコマンドを繰り返し
- `jjo` で if の下に1行追加
- "else: print()" を追加
- fizz fizz
- `ci'` でfizzを変更
- コマンドライン引数
- `ggO` で上を開く
- "import sys"
- `/10`
- `ci(` で "int(sys.argv[1])"
vimのカスタマイズ
- ~/.vimrc
- 基本設定で始める
- ネットでインスピレーションを探す
プラグイン
- プラグインマネージャーは必要ない:プラグインを `~/.vim/pack/vendor/start/` に置くだけ
- おすすめプラグイン
- 曖昧ファイル検索: ctrlp.vim
- コード検索: ack.vim
- ディレクトリ移動: nerdtree
- マジックオプション: vim-easymotion
- 講師が使っているものを見よう
- 詳細: https://vimawesome.com/
他のツールでの vim キーバインド
- shell (set -o vi / bindkey -v)
- $EDITOR
- readline
- Jupyter notebook
高度な vim デモ
宿題