絶望物理学徒（＋ショートカットキーなどの紹介）

# 注意
　この記事はYouTubeチャンネル「絶望ライン工ch」のノリを踏襲して執筆しております。

https://www.youtube.com/@zetsubouline

　そして、物理学科の学生生活とショートカット「キー」というかそれに限らず雑多な時短術を紹介します。ガチプロではないため、もっと効率の良い方法もきっとあると思いますがお許しください。

# はじめに

　弊学科「ぜつぼう教室」にて

　皆様こんにちは、絶望物理学徒でございます。私は３年生、某大学某学部の物理学科に所属しております。16日目の記事、架空の~~臨死体験~~院試体験記を拝読し、絶望いたしております。
　さて皆様は「物理学科」にどのようなイメージを持たれるでしょうか。おそらく
・物好きが集まる学科
・なにか訳のわからない（そもそも読めない）式を黒板かホワイトボードに書き殴っている
・メガネの男しかいない
などと推察されます。そんな皆様に物理学徒の「リアル」を知っていただくため、私の平日一週間を雑にご紹介させていただきます。その間、適宜ショートカットキーのご紹介を交えさせていただくこと、ご了承ください。

　もともとショートカットキーの紹介をしようと思っていたのに、序盤は余談がメインになってしまったということは`Cmd + /`でコメントアウトしておきましょう。


| キー | 結果 |
|:-:|:-:|
| Cmd + /  | コメントアウト（LaTeXでもpythonでも他でも）  |

（関係ないですが、Qiitaで表を作成するときは(例えば4行2列だと)「4x2」(真ん中は英小文字のx)と入れると補完してくれます。）


# Day1 月曜日

　皆様おはようございます、絶望物理学徒でございます。私は３年生、MacBook学科に通うApple信者です。所有しているデバイスは、MacBookPro、iPhone、iPad、AirpodsProとなっております。Windows大学などの他大学のシステムには明るくないのですが、以下Mac大のキャンパスライフをご紹介させていただきます。


　月曜日は2限から。通学中すれ違うヒトも余裕のある表情をしております。私もそれに負けじと余裕のある顔をして授業に向かいます（時間の余裕はありません）。授業は少人数に分かれて専門的な教科書や論文を輪読するものですが、グループ（担当の先生）によって扱うテキストの負荷が大きく異なります。私は幸いなことに日本語の丁寧な教科書を読んでおりますが、英語でかつ難解な教科書を扱うグループも多い。絶望いたします。

　お昼には学食のランチを喫食。チキン塩ダレ、チョレギサラダ、オクラ、麦飯。
　いただきます。
　美味い。チョレギサラダは(多分)ごま油の香りが食欲をそそります。具材は白菜であったりブロッコリーであったりフリーダムなプレイスタイルですが、それが良い。電磁気学の板書のようだ。オクラは常にサラダコーナーのスタメンです。かなりベテランですが、健康的な食事を摂っているというイメージの醸成に安定したパフォーマンスを発揮します。そしてチキン塩ダレ、君を待っていた。味、食べ応え、価格のバランスに優れ、ランチのMFとして躍動しております。ラストは麦飯。MFからのパス(塩味)を優しく包み込み、それでいて自分の個性と織り交ぜながらゴール(味蕾)へと突き刺す。ランチタイムの絶対的なFWとなりつつあります。ちなみに私はサッカーについては素人です。

　茶で一服つけ、午後の労務に向かいます。

　物理学科の学生には避けては通れない道、それが実験。しかし隔週の午後に存在するため、今週の私は午後休を取得しております。しかし、その日私は思い出した。ヤツらに支配されていた日々を...レポートに追われていた生活を...

　中学や高校の授業の実験のように、その場で実験を行って終わるわけではありません。国民の血税による機械で実験をさせてもらっている身、その結果を報告せねばなりません。そして先週実験を行ったということは、今週は報告書(レポート)を作成せねばならない。絶望いたします。
　ここで、冒頭の物理学科のイメージと異なる側面が浮き彫りになります。物理学科の民はこのレポートを作成するために、多大な労力をLaTeXと(多くの民は)Pythonに捧げることになるのです。幸いにも我々にはVSCodeという神が与えたもうたものがございます。このアプリでLaTeXもPythonも(他にもいろいろ)編集できるという代物です。天は二物を与えた。

　さてようやくショートカットを紹介する文脈になりました。本日は以下の話をします。
- スニペットを気軽に編集しよう
- キーボードショートカットを編集しよう

## スニペット

　VSCodeでLaTeXを書く一番の醍醐味はスニペットでしょう。例えば私は「report」と打つと、下のように出力されます。正確には「re」と打った時点でサジェストし、補完してくれています。なるほど、全てはゼーレのシナリオ通りということか。

![snippet.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711051/ac50a8b4-7db8-6592-8fea-3bdae8bdb603.gif)


　これはユーザースニペットの設定によって可能になっています。VSCodeの画面上部の検索バーのようなところで「latex.json」と打ち、Returnかクリックで開きます。jsonとはデータの形式の1つで、そこまで恐れる必要はありません。pythonの辞書型と似ています。latex.jsonに書く内容の一例をお見せします。

<details><summary>latex.jsonの例</summary>

```
{
    "report": {
        "prefix": "report",
        "body": [
            "\\documentclass[${1:dvipdfmx,a4paper}]{${2:jsarticle}}",
            "\\usepackage[utf8]{inputenc}",
            "\\usepackage{physics}",
            "\\usepackage{amsmath,amssymb}",
            "\\usepackage{bm}",
            "\\usepackage{wrapfig}",
            "\\usepackage{comment}",
            "\\usepackage{here}",
            "\\usepackage{url}",
            "\\usepackage{siunitx}",
            "\\usepackage{subcaption}",
            "\\usepackage[dvipdfmx]{graphicx}",
            "\\usepackage[dvipdfmx]{hyperref}",
            "\\usepackage[version=3]{mhchem}",
            "${3}",
            "",
            "\\begin{document}",
            "",
            "\\title{${4:レポート}}",
            "\\author{${5:絶望大学物理学科3年 \\cr 絶望 太郎}}",
            "\\date{${6:\\today 提出}}",
            "\\maketitle",
            "",
            "",
            "$0",
            "\\section{実験}",
            "",
            "\\subsection{概要}",
            "",
            "\\subsection{実験方法}",
            "",
            "\\subsection{結果}",
            "",
            "\\subsection{考察}",
            "",
            "\\begin{thebibliography}{99}",
            "\\bibitem{}", 
            "\\url{}",
            "\\end{thebibliography}",
            "",
            "\\end{document}"
        ],
        "description": "授業レポート用テンプレート"
    },
    "table":{
        "prefix":"table",
        "body":[
            "\\begin{table}[H]",
            "   \\caption{${1}}",
            "   \\label{${2}}",
            "   \\centering" ,
            "   \\begin{tabular}{ccc}",
            "   \\hline",
            "   & & ",
            "   \\hline \\hline",
            "   & & ",
            "   \\hline",
            "   \\end{tabular}",
            "\\end{table}"
        ],
        "description":"標準の表"
    },
    "figure":{
        "prefix":"figure",
        "body":[
            "\\begin{figure}[H]",
            "\\centering",
            "\\includegraphics[width = 0.5\\textwidth]{$1}",
            "\\caption{$2}",
            "\\label{$3}",
            "\\end{figure}"
        ],
        "description":"標準の画像"
    },
    "figure_double":{
        "prefix":"figure_double",
        "body":[
            "\\begin{figure}[H]",
            "\\begin{tabular}{cc}",
            "\\begin{minipage}[t]{0.45\\hsize}",
            "\\centering",
            "\\includegraphics[width = 5cm]{$1}",
            "\\subcaption{$2}",
            "\\label{$3}",
            "\\end{minipage} &",
            "\\begin{minipage}[t]{0.45\\hsize}",
            "\\centering",
            "\\includegraphics[width = 5cm]{$4}",
            "\\subcaption{$5}",
            "\\label{$6}",
            "\\end{minipage} ",
            "\\end{tabular}",
            "\\caption{$7}",
            "\\end{figure}"
        ],
        "description":"標準の画像を2枚並べたもの"
    },
    "figure_triple":{
        "prefix":"figure_triple",
        "body":[
            "\\begin{figure}[H]",
            "\\begin{tabular}{ccc}",
            "\\begin{minipage}[t]{0.3\\hsize}",
            "\\centering",
            "\\includegraphics[width = 5cm]{$1}",
            "\\subcaption{$2}",
            "\\label{$3}",
            "\\end{minipage} &",
            "\\begin{minipage}[t]{0.3\\hsize}",
            "\\centering",
            "\\includegraphics[width = 5cm]{$4}",
            "\\subcaption{$5}",
            "\\label{$6}",
            "\\end{minipage} &",
            "\\begin{minipage}[t]{0.3\\hsize}",
            "\\centering",
            "\\includegraphics[width = 5cm]{$7}",
            "\\subcaption{$8}",
            "\\label{$9}",
            "\\end{minipage} ",
            "\\end{tabular}",
            "\\caption{$10}",
            "\\end{figure}"
        ],
        "description":"標準の画像を3枚並べたもの"
    },
    "SI":{
        "prefix":"si",
        "body":[
            "\\SI{$1}{$2}",
        ],
        "description":"\\SI{}{}の時短"
    },
    "180":{
        "prefix":"180deg",
        "body":[
            "$\\SI{180}{\\degree}$",
        ],
        "description":"180degの時短"
    },
    "90":{
        "prefix":"90deg",
        "body":[
            "$\\SI{90}{\\degree}$",
        ],
        "description":"90degの時短"
    },
    "bib":{
        "prefix":"bib",
        "body":[
            "\\bibitem{$1}",
            "\\url{}"
        ],
        "description":"参考文献の時短"
    }
}


```


</details>

　prefixというところにある文字を打つと、サジェストが出て、Returnキーを押すとbodyの中身が出力されます。便利なのが、`figure_double`と`si`です(名前は自分で適当につけたもの)。

| prefix | 説明 |
|:-:|:-:|
| figure_double  | 図を横並びで2枚入れる用。たまに使うものの毎回どうやってたか探すのが面倒なので重宝。3枚用の`figure_triple`も便利。 |
| si  | 数値+単位を出力する`\SI{数値}{単位}`のスニペット。数値のみver.の`\num{数値}`も作るべきか。  |

（投稿後追記：）VSCodeにはデフォルトでもスニペットが登録されています。そういえばこれらが結構紹介したいことだったのに書き忘れておりました。絶望いたします。

| prefix | 説明 |
|:-:|:-:|
| @g  | `\gamma`  : このように、「@ + 英小文字」でギリシャ文字を打てます。|
| @2  | `\sqrt{}`  |
| SSE  | `\section{}`  |


 他にもたくさんあります。

## キーボードショートカット

　例えば`Cmd + C`でコピーができる、のようなものを自分で設定しようというものです。物質の中に自分で物理法則を作ってしまおうという感じです(適当)。設定の仕方は、さっきと似ていて、VSCodeの画面上部の検索バーのようなところで「keybindings.json」と打ち、Returnかクリックで開きます。keybindings.jsonに書く内容の一例をお見せします。

<details><summary>keybindings.jsonの例</summary>

```
[
    {
        "key": "shift+cmd+r",
        "command": "python.execInTerminal"
    },
    {
        "key": "cmd+shift+m",
        "command": "editor.action.insertSnippet",
        "args":{
            "snippet": "\\$ ${TM_SELECTED_TEXT} \\$$0",
        },
        "when": "editorLangId == latex",
    },
    {
        "key": "cmd+b",
        "command": "editor.action.insertSnippet",
        "args":{
            "snippet": "\\bm{${TM_SELECTED_TEXT}$0}",
        },
        "when": "editorLangId == latex",
    },
    {
        "key": "cmd+m",
        "command": "editor.action.insertSnippet",
        "args":{
            "snippet": "\\$$0\\$",
        },
        "when": "editorLangId == latex",
    }
]
```


</details>

　一番便利なのはやはり`Cmd + M`だと思います。$2つを出して、かつカーソルをその間に来るようにしています。これは、jsonで`$0`があるところにカーソルが移ることを利用したものです。（一番上は、pythonのコードを`Cmd + Shift + R`で実行できるようにしたものなので今はちょっと関係ないです。）
　ただし、キーボードショートカットを新たに設定するときは、既存のショートカットキーとの干渉に気をつけましょう。現在設定されているものは`Cmd + K → Cmd + S`で見れます。

...気づけばもう20時ですね。晩飯を食らい、帰路に着きましょう。


# Day2 火曜日

　皆様おはようございます、絶望物理学徒でございます。私は３年生、布団専攻所属の人間です。只今の時刻、日本標準時で6時42分23秒。本日は大変外気の気温が低く、正常状態へ移る転移温度をなかなか超えることができません。それでもなんとかアラームによって外部磁場を発生させ、活動を開始します。

　1限の授業の出席人数が、指数関数的に減衰することは避けられないと思いますが、さらに天候や他の授業の課題などの外的要因によって擾乱を受けます。さらに授業に出席したからと言って油断は禁物です。授業中は空調の影響により暖かく湿ってはいない空気が教室の中に流入し、大型で非常に強い勢力の眠気が私を襲っておrりmす、。。

　皆様おはようございます、絶望物理学徒でございます。さて、気を取り直して2限の授業を受けましょう。
　最近、我々の時間割はアニメと似ていると感じております。今学期から始まる授業もあれば、内容的に前学期から続いているものもあります。しかも私たちはよく初対面の際、

>「好きな分野とかある？」

と尋ねます。これはすなわち、

>「今期のアニメでどれ見てる？」

と同型ではないでしょうか。ただし、(アニメでも同様か分かりませんが、)作画を担当される方によって描画が大きく影響を受けることもまた事実です。ちなみに、私はアニメについては素人です。

　さてお昼です。学食のランチを喫食。チキン塩ダレ、チョレギサラダ、ひじきと豆のサラダ、麦飯。
　いただきます。
　美味い。チョレギサラダは(多分)ごま油の香りが食欲をそそります。具材はもやしであったりコーンであったりフリーダムなプレイスタイルですが、それが良い。50分の授業で50分雑談をしていた高校の時の先生を思い出します。ひじきのサラダもやはりベテランですが、燻し銀的な魅力があります。そしてチキン塩ダレ、君を待っていた。彼が飛車なら、角は麦飯。双璧をなす二人に隙はありません。ちなみに私は将棋については素人です。

　茶で一服つけ、午後の労務に向かいます。

　今日はテキストを編集するショートカットについて。スニペットなどと比べるとその華やかさは劣りますが、全ての基礎であり、オールラウンダーであり、あなたの人生のパートナーとなるでしょう。

| ショートカット | 結果 |
|:-:|:-:|
| Cmd + ← or →  |  行頭/行末にカーソルを移動 |
| Cmd + Shift + ← or →  |  行頭/行末まで選択 |
| Shift + ← or →  | 1文字ずつ選択。すでに選択したものの増減も可。 |
| ひらがな入力で「zh」「zj」「zk」「zl」 | 「←」「↓」「↑」「→」 |
| Opt + (Shift +) クリックしながらドラッグ | 複数行に渡るカーソル→複数行に一気に入力可  |

`Shift + ← or →`が侮れません。マウスで選択したり、`Cmd + Shift + ← or →`で選択したりしても、1、2文字余計だったり足りなかったりすることは多いです。その時に微調整をしてくれるのがこのショートカットキーというわけです。

縁の下の力持ちってわけね、ルパン。
不二子ちゃん、その通りだよ。
（絶望ライン工chのノリを再現しています、ご了承ください。）

　さぁ、明日も頑張りましょう。

# Day3 水曜日

　皆様おはようございます、絶望物理学徒でございます。私は３年生、物理的な構造をなす葦です。朝からまだ週の半ばであることに絶望いたします。

　さすがに3日目ともなると絶望した口調に皆様お疲れかと思いますので、本日は趣向を変えて、少女漫画風のタッチで行こうと思います。ちなみに、私は少女漫画については素人です。


>　みんなおはよう！わたしの名前は小窓きい(Cmdキー)。都立MacBook高校に通う高校1年生。でも入学初日から遅刻しちゃう、急がなきゃ！(タッタッタッ...)
　この春から憧れのMacBook高に通えるなんて夢みたい！今は亡き初代校長のジョブズ先生が設立したこの高校は、Windows大附属高といつも競い合ってる。私が好きなのは、洗練されたデザインの校舎(デバイス)と制服(OS)！でも私の家は裕福じゃないから、みんなは最新のVenturaの制服を着てるけど、私はお下がりのMonterey...でも紫色は好きだし、良いよね！
　さっそく授業が始まったけど、右斜め前の席のF君かっこいい...！`Cmd + F`でどんな時でも検索して、すぐに探し物を見つけてくれるの！Return君(あだ名はEnter)は自分の力だけでファイル名を変えられてすごい！N君は新しいもの好きで、`Cmd + N`で新規ウィンドウを開いてくれるし、Finder内だと`Cmd + Shift + N`で新規フォルダを作成できるの！魔法使いみたいね。
　あっ、中学で一緒だった古都路ちゃん(Ctrl)だ！...えっ！？J君とK君と、良い感じなの！？J君は柔らかい感じで優しくて、でもK君はスマートでキレがあってどうしよう、って...やっぱり、ことちゃんはすごいなぁ...
「おい、忘れてんぞ」
　うわっ、Z兄！そうだ、この高校にはZ兄がいるんだった...コイツは腐れ縁のZ兄。家が隣同士で、Z兄の方が一個上なんだけど、なぜか私の忘れ物とか届けに来てくれて...


...絶望いたします。やはり慣れないことをするものではないですね。この中で紹介していた(つもりの)ショートカットなどをまとめておきます。

| ショートカット | 結果 |
|:-:|:-:|
| Cmd + F  | 検索 |
| ファイル名を選択して Return  | 名前変更 |
| Cmd + N  | 新規ウィンドウ作成 |
| Cmd + Shift + N  | Finderで新規フォルダ作成 |
| Cmd + Z  | A→Bを戻す(B→A) |
| Cmd + Shift + Z  | (`Cmd + Z`の後で)戻るのをやめる(A→B) |
| Ctrl + J | 選択範囲をひらがなに  |
| Ctrl + K | 選択範囲をカタカナに  |

　カタカナ語が溢れる現代、`Ctrl + K`が良い仕事をします。横文字の最後の一文字を打ち間違えて、最後の一文字だけ打ち直すもカタカナになってくれない。そんな時に、このK君はさっと僕らの尻拭いをしてくれるわけです。ひらがなでいてほしいのにMacのライブ変換で消えたひらがなも、`Ctrl + J`で復活できるわけです。

　さぁ、残り2日です。ちなみに今日もチキン塩ダレを食べました。

# Day4 木曜日

　皆様おはようございます、絶望物理学徒でございます。私は３年生、過去から未来へ時を進む、タイムトラベラーです。さて、クリスマスが近づいてまいりました。3年前のイブは、予備校の最寄駅で受験用の証明写真を撮っていました。絶望いたします。

　そろそろネタと集中力が散漫になってきましたので、眠気覚ましに外部ツールを紹介させていただきます。輸入モノ、ですね。（関係ないですが、`Cmd + l`でサイトのURLを選択した状態になります。その後`Cmd + C`を押せばURLのコピー、`Cmd + Return`で新規タブで同じサイトを開く、ということが可能です。）

https://clipy.softonic.jp/mac

　皆様は「Clipy」というアプリをご存知でしょうか。詳しくは詳しい記事に任せますが、ざっくり言うと、
- クリップボードの記録が残る(デフォルトは直近30件)
- スニペットが設定できる(VSCodeでなくても)

　クリップボードとは、`Cmd + C`でコピーしたものを保管する箱のようなものです。普通は最新の一個だけが保存されているのですが、ペーストしようとして`Cmd + V`を押したつもりが間違えて`Cmd + C`を押してしまい、さっきまで保存していたものが消えてしまった...そんな経験はありませんか。しかしClipyを使えば、`Cmd + Shift + V`で呼び出した後、過去のコピーしていたものを呼び出せるのです。現実的に使うのは過去2件くらいですが。

![cliipy_record3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711051/a8ccfc54-1f07-20e1-d80a-b2dae75987e2.gif)

　あと、Day1で紹介したスニペットが、VSCodeでなくても設定できるようになります。私はなぜかVSCodeのpython上で、これを利用しています。

![clipy_snippet.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711051/8b50d5e7-cd63-f5de-4139-9070f4f9a277.gif)


# Day5 金曜日

　皆様おはようございます、絶望物理学徒でございます。私は３年生、Qiitaの記事を書く大変さを身をもって知った人類です。最後はショートカットキーではないですが、私の物理実験のデータの整理方法をご紹介させていただきます。

　Day1で申し上げたように、物理学科の民は実験から逃れられず、またそれはデータ解析からも逃れられないことを意味します。データの解析はなるべくスマートに済ませたいのです。現在私が取っている方法は、dataフォルダとpythonフォルダを作り、データはdataフォルダ内にcsv形式で保存し、pythonでそのデータを読み取りにいく、というものです。これはpythonのコードの中にデータをベタ打ちするより、見やすく編集しやすいという利点があります。

　階層は以下のようになっております。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711051/ec186d32-957f-42d6-89cc-53f09ec4f83a.png" width=40%>

　「hoge.csv」の中身は以下のようになっております。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711051/a619e27c-4dcc-a0d5-5c12-37ef62e99170.png" width=30%>

　読み取る部分のコードは以下のようになっています。

```
import pandas as pd

data = pd.read_csv("../data/hoge.csv") 
x = data["x"] 
y = data["y"] 
```

　`../`は、現在いるフォルダから一個上の階層へ移動するという意味です。現在いるフォルダは`./`で指定できます。確かこういうのを相対パスとか言った気がします。注意として、pythonファイルを実行する際、VSCodeのターミナルで、
`cd /Users/yourname/Desktop/実験/種目名/python(pythonファイルがあるディレクトリへのパス)`
などでディレクトリを移動しておく必要があります。パスは、フォルダ名を選択した状態で`Cmd + Option + C`でコピーできます。

# 一週間お疲れ様でした

　というわけで皆様、ご唱和ください。

　　　　　__K-A-N-P-A-I__

　ちなみに、私はお酒を飲んだことはありません。


# 終わりに

　色々雑になってしまいすみません。みなさんぜひ、ショートカットを使って余った時間で、絶望ライン工chを見ましょう。おすすめを2つほど挙げておきます。

<br>

<iframe width="560" height="315" src="https://www.youtube.com/embed/fGeipVbBO0g" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<br>
<br>
<br>



<iframe width="560" height="315" src="https://www.youtube.com/embed/gI1FsX7RdjA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>