VSCodeキーボード・ショートカット(Linux/Ubuntu)

一般

Ctrl+Shift+P, F1 コマンドパレットを開く
Ctrl+P 任意のファイルに移動(クイックオープン)
Ctrl+Shift+N 新規ウィンドウ
Ctrl+W ウィンドウを閉じる
Ctrl+, ユーザー設定
Ctrl+K Ctrl+S キーボード・ショートカット

基本編集操作

Ctrl+X 行削除
Ctrl+C 行コピー
Alt+Up/Down 行を上下に動かす
Ctrl+Shift+K 行削除
Ctrl+Enter 行末に改行(カーソルは下に移動)
Ctrl+Shift+Enter 行頭に改行(カーソルは上に移動)
Ctrl+Shift+\ 対応するカッコにカーソル移動
Ctrl+]/Ctrl+[ 行をインデントする
Home/End ファイルの先頭、末尾に移動
Ctrl+Home/End ファイルの先頭、末尾に移動
Ctrl+Up/Down 画面を1行ずつスクロールする
Alt+PgUp/PgDn 画面を1ページずつスクロールする
Ctrl+Shift+[/] 折りたたみ/展開
Ctrl+K Ctrl+[/] 再帰的に折りたたみ/展開
Ctrl+K Ctrl+0 すべて折りたたみ
Ctrl+K Ctrl+J すべて展開
Ctrl+K Ctrl+C 行コメントの追加
Ctrl+K Ctrl+U 行コメントの削除
Ctrl+/ 行コメントの切り替え
Ctrl+Shift+A ブロックコメントの切り替え
Alt+Z 折返しの切り替え

言語編集

Ctrl+Space 候補表示
Ctrl+Shift+Space パラメーターヒント表示
Ctrl+Shift+I ドキュメントの整形
Ctrl+K Ctrl+F 選択範囲の整形
F12 定義へ移動
Ctrl+Shift+F10 定義を覗く
Ctrl+K F12 定義を横に開く
Ctrl+. クイックフィクス
Shift+F12 すべての参照を表示
F2 シンボルの名前修正
Ctrl+K Ctrl+X 末尾の空白のトリミング
Ctrl+K M 言語モードの変更

マルチカーソルと選択

Alt+Click カーソルの挿入
Shift+Alt+Up/Down カーソルを上下に挿入
Ctrl+U カーソル操作のアンドゥー(元に戻す)
Shift+Alt+I 選択範囲の各行末にカーソルを挿入
Ctrl+I 行選択
Ctrl+Shift+L すべての一致を選択
Ctrl+F2 単語ですべての一致を選択
Shift+Alt+Right 選択範囲を拡大
Shift+Alt+Left 選択範囲を縮小
Shift+Alt+マウスドラッグ 矩形(ボックス)選択

表示

F11 フルスクリーン切り替え
Shift+Alt+0 エディターレイアウトの縦横切り替え
Ctrl+=/- 拡大/縮小
Ctrl+B サイドバー表示の切り替え
Ctrl+Shift+E エクスプローラーを表示/フォーカスの切り替え
Ctrl+Shift+F 検索の表示
Ctrl+Shift+G ソース管理の表示
Ctrl+Shift+D デバッグの表示
Ctrl+Shift+X 拡張機能の表示
Ctrl+Shift+H 複数のファイルで置換
Ctrl+Shift+J 検索の詳細の切り替え
Ctrl+Shift+C 新規のコマンド/ターミナルを開く
Ctrl+K Ctrl+H アウトプットパネルを表示
Ctrl+Shift+V マークダウンプレビューを開く
Ctrl+K V マークダウンプレビューを横に開く
Ctrl+K Z 禅モードに移行(Esc Escで抜ける)

検索と置換

Ctrl+F 検索
Ctrl+H 置換
F3/Shift+F3 次を検索/前を検索
Alt+Enter 検索に合った対象をすべて選択
Ctrl+D 次の検索に合った対象を選択に追加
Ctrl+K Ctrl+D 次の検索に合った対象に選択を移動

ナビゲーション

Ctrl+T すべてのシンボルを表示
Ctrl+G ライン番号へ移動
Ctrl+P ファイルへ移動
Ctrl+Shift+O シンボルへ移動
Ctrl+Shift+M 問題パネルの表示
F8 次のエラーまたは警告へ移動
Shift+F8 前のエラーまたは警告へ移動
Ctrl+Shift+Tab エディターのグループヒストリーを選択
Ctrl+Alt+- 戻る
Ctrl+Shift+- 進む
Ctrl+M Tabによるフォーカスの移動の切り替え

エディター管理

Ctrl+W エディターを閉じる
Ctrl+K F フォルダーを閉じる
Ctrl+\ エディターを分割する
Ctrl+1/2/3 n番目のエディターグループのフォーカスを移動
Ctrl+K Ctrl+Left フォーカスを前のエディターグループに移動
Ctrl+K Ctrl+Right フォーカスを次のエディターグループに移動
Ctrl+Shift+PgUp エディターを左へ移動
Ctrl+Shift+PgDn エディターを右へ移動
Ctrl+K Left アクティブなエディターグループを左(上)へ移動
Ctrl+K Right アクティブなエディターグループを右(下)へ移動

ファイル管理

Ctrl+N 新規ファイル
Ctrl+O ファイルを開く
Ctrl+S 保存
Ctrl+Shift+S 名前をつけて保存
Ctrl+W 閉じる
Ctrl+K Ctrl+W すべて閉じる
Ctrl+Shift+T 閉じたエディターを再度開く
Ctrl+K Enter プレビューモードで開いたファイルを開く
Ctrl+Tab 次のタブを開く
Ctrl+Shift+Tab 前のタブを開く
Ctrl+K P アクティブファイルのパスをコピー
Ctrl+K R アクティブファイルをエクスプローラーで表示
Ctrl+K O 新しいウィンドウでアクティブファイルを開く

デバッグ

F9 ブレークポイントの切り替え
F5 スタート/コンティニュー
F11/Shift+F11 ステップの開始/終了
F10 ステップオーバー
Shift+F5 ストップ
Ctrl+K Ctrl+I ホバーの表示

統合ターミナル

Ctrl+統合ターミナルを表示 Ctrl+Shift+ 新しい統合ターミナルを作成
Ctrl+Shift+C 選択対象のコピー
Ctrl+Shift+V アクティブターミナルに貼り付け
Ctrl+Shift+Up/Down スクロールアップ/ダウン
Shift+ PgUp/PgDn ページ単位のスクロールアップ/ダウン
Shift+ Home/End 一番上にスクロール/一番下にスクロール

キーワード: 逆引き, Visual Studio Code, キーバインド, キーバインディング

Googleマップで3D表示ができない(解決)

Ubuntu 18.4でGoogleマップで3D表示ができなくなってNVIDIAのグラフィックドライバーを入れることで解決したので手順を書いておきます。
3D表示とは地図を航空写真にしてコントロールキーを押しながらマウスを動かすと立体的に見えるやつです。Googleマップの「地球」メニューで見える見え方かな。

使っているUbuntuマシンの1台で成功したので、ほかのマシンでやりながらメモを作ります。

まずubuntuの画面の右上の電源ボタンのマークのなかのツール>設定>詳細でグラフィックのところをみるとNVA5とか買いてある。これをGeForce GT 430とか使っているグラフィックに変えるのが目的です。

~$ lspci | grep VGA  
04:00.0 VGA compatible controller: NVIDIA Corporation GT216 [GeForce 210] (rev a2)

おっと古いね。まあいいか。

https://www.nvidia.co.jp/Download/index.aspx?lang=jp

ここからドライバーをダウンロードですが、わたしのこの機械の場合、

製品のタイプ: GeForce  
製品のシリーズ: GeForce 200 Series  
製品ファミリー: GeForce 210  
オペレーティングシステム: Linux 64-bit  
言語: Japanese  

で検索ボタンを押すと

バージョン 340.107

が選ばれたのでダウンロードします。別画面に飛ぶのでそこでもダウンロードを押すとダウンロードされます。

私の場合
ダウンロードディレクトリーに

NVIDIA-Linux-x86_64-340.107.run

という名前でダウンロードされました。拡張子がrunなのでどうやって実行するか別途調べます。chmod +xで実行ファイルにして、sudo ./NVIDIA-Linux-x86_64-340.107.runにするか、sudo sh ./NVIDIA-Linux-x86_64-340.107.runということなのですがどちらでも大丈夫みたいです。

すぐエラーになっていまあるドライバー(Nouveau kernel driver)が邪魔しているのでダメですというエラーになるので、一旦OKするとそのまま続けるか聞かれるので中断します。続けてもいいけどたぶん成功しない。

でいまのドライバーを削除する作業に入るわけですが、これが失敗するとパソコンがこわれそうな作業なので一応自己責任でお願いします。大丈夫だと思うけどね。

エディターで次のファイルを作ります。

sudo vim /etc/modprobe.d/blacklist-nouveau.conf

中身に

blacklist nouveau
options nouveau modeset=0

と書いてセーブします。

sudo update-initramfs -u

成功したら

sudo reboot

すると、グラフィックドライバーがない状態で立ち上がるので、27インチのディスプレイに巨大な文字の画面になるけどびっくりしないで作業を進めます。

そそ、途中でgccがないとか言われるのでgccは事前にインストールしておいて下さい。

Ubuntuにログインしてcd ダウンロードとかして、

sudo sh ./NVIDIA-Linux-x86_64-340.107.run

でドライバーのインストールを続けます。

途中で失敗したけど続けますかとか出て、Are you sure you want to continue? と聞かれるけどデフォルトが

Continue installation

なので大丈夫そうなのでそのまま続けます。ほかにもいろいろ聞かれるけど適当に選んで進めると終了。またsudo rebootすると

グラフィック GeForce 210/PCIe/SSE2

とかになっているし、Googleマップも無事3D表示できました。

めでたし

4Clojure問題の翻訳と解答

Clojureに4Clojure Problemsという問題集のサイトがあって、とてもよくできているので翻訳してみました。

GitHub - kalz2q/4clojure-jp: translation of 4clojure problems in japanese

Markdownで書いて、README.mdにはりつけてあります。

問題はさまざまだけど数学系が多いかな。

解答はいろんな人が書いているのをコピペして、コピペする前に一応テストを走らせたので大丈夫だと思います。

ほんとははてなに貼り付けたかったのですが、ちょっと大きすぎるみたいなのでgithubにしました。

勉強し始めたばかりなのでClojureがわからないだけでなく、そもそもの問題が何度読んでもわからないのが多かったけど、テストケースがついているのと、今回解答も載せたので、なんとなくわかるのがいい。テストケースだけではわからなくても文章でわかったり、プログラムを読んでわかったりすることもありますよね。

git cloneできない(解決)

何台かあるうちの一台のUbuntu 18.04マシンで、git cloneができないという事態が発生しました。

~$ git clone https://github.com/syl20bnr/spacemacs.git
Cloning into 'spacemacs'...
ssh: Could not resolve hostname github: Name or service not known
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

そんな馬鹿な、といろいろ調べたのですが解決しないでいたところ、ひょっとしてと思って、

https

http

に書き直したら問題なく、git cloneできました。

なぜだろう。

Google Home でスケジュールが聞けない

Google Homeで今日の予定は? と聞くと、

「3件入っています。最初のは午前7時からで、・・・」

とか言ってくれるのがとても便利だったのですが、先月くらいからカレンダーに予定を入れているのに聞けなくなってしまいました。

すいません、わかりません。
とか、
お役に立てそうにありません。
予定を見つけられませんでした。
とか返事をします。

いろいろやってみるとパソコンのChromeに入っているGoogle Calendarスマホに入っているGoogle Calendarは同期が取れているのに、それが見つけられないでいるみたいです。
メールやフォトは同期が取れているので不思議なのですが、最終的に解決しませんでした。

ところが!!!

Gmailのアドレスをもう一つ作成して、スマホをそれにして、Google Homeをリセットしたところ、そのアドレスの予定を読み上げてくれる。
とりあえず、ちょっとめんどうだけど、使えています。
パソコンのGoogl Chromeでアイコンをクリックするだけで切り替えられるのではじめ思ったほどめんどうではないです。

以上

クイズ 連分数

PythonのSymPyのネットにあるチュートリアルを読んでいたら、連分数のクイズがありました。

連分数とは分数の中に分数があるような以下のような形の分数です。

from sympy import *
init_printing()
x,y,z = symbols('x y z')

def list_to_frac(l):
    expr = Integer(0)
    for i in reversed(l[1:]):
        expr += i
        expr = 1 / expr
    return l[0] + expr
frac = list_to_frac([x,y,z])
frac

$$x + \frac{1}{y + \frac{1}{z}}$$

一般的な形としては添字付きの変数であらわします。

syms = symbols('a0:5')
syms

$$\left ( a_{0}, \quad a_{1}, \quad a_{2}, \quad a_{3}, \quad a_{4}\right )$$

a0, a1, a2, a3, a4 = syms

frac = list_to_frac(syms)
frac

$$a_{0} + \frac{1}{a_{1} + \frac{1}{a_{2} + \frac{1}{a_{3} + \frac{1}{a_{4}}}}}$$

さてこれを通分すると次のようになります。

frac=cancel(frac)
frac

$$\frac{a_{0} a_{1} a_{2} a_{3} a_{4} + a_{0} a_{1} a_{2} + a_{0} a_{1} a_{4} + a_{0} a_{3} a_{4} + a_{0} + a_{2} a_{3} a_{4} + a_{2} + a_{4}}{a_{1} a_{2} a_{3} a_{4} + a_{1} a_{2} + a_{1} a_{4} + a_{3} a_{4} + 1}$$

で問題は、変数をランダムに混ぜて、cancelされた式から元の連分数をつくれ、というものです。

import random
l = list(symbols('a0:5'))
random.shuffle(l)
orig_frac = frac = cancel(list_to_frac(l))
del l

ここでlを求めるわけですが、先に答えを見たりしないようにご丁寧にlを消去しています。
解いたあと、正解かどうかはorig_fracと、求めたlでcancel(list_to_frac(l))したものを比べれば確認できます。

frac

$$\frac{a_{0} a_{1} a_{2} a_{3} a_{4} + a_{0} a_{1} a_{3} + a_{0} a_{2} a_{4} + a_{0} + a_{1} a_{2} a_{4} + a_{1} a_{3} a_{4} + a_{1} + a_{4}}{a_{0} a_{2} a_{3} a_{4} + a_{0} a_{3} + a_{2} a_{4} + a_{3} a_{4} + 1}$$

l=[]
frac = apart(frac, a1)
frac

$$a_{1} + \frac{a_{0} a_{2} a_{4} + a_{0} + a_{4}}{a_{0} a_{2} a_{3} a_{4} + a_{0} a_{3} + a_{2} a_{4} + a_{3} a_{4} + 1}$$

l.append(a1)
frac = 1/(frac - a1)
frac

$$\frac{1}{a_{0} a_{2} a_{4} + a_{0} + a_{4}} \left(a_{0} a_{2} a_{3} a_{4} + a_{0} a_{3} + a_{2} a_{4} + a_{3} a_{4} + 1\right)$$

frac = apart(frac, a3)
frac

$$a_{3} + \frac{a_{2} a_{4} + 1}{a_{0} a_{2} a_{4} + a_{0} + a_{4}}$$

l.append(a3)
frac = 1/(frac - a3)
frac

$$\frac{a_{0} a_{2} a_{4} + a_{0} + a_{4}}{a_{2} a_{4} + 1}$$

frac = apart(frac, a0)
frac

$$a_{0} + \frac{a_{4}}{a_{2} a_{4} + 1}$$

l.append(a0)
frac = 1/(frac - a0)
frac

$$\frac{1}{a_{4}} \left(a_{2} a_{4} + 1\right)$$

frac = apart(frac, a2)
frac

$$a_{2} + \frac{1}{a_{4}}$$

l.append(a2)
frac = 1/(frac - a2)
frac

$$a_{4}$$

frac = apart(frac, a4)
frac

$$a_{4}$$

l.append(a4)
list_to_frac(l)

$$a_{1} + \frac{1}{a_{3} + \frac{1}{a_{0} + \frac{1}{a_{2} + \frac{1}{a_{4}}}}}$$

l

$$\left [ a_{1}, \quad a_{3}, \quad a_{0}, \quad a_{2}, \quad a_{4}\right ]$$

orig_frac

$$\frac{a_{0} a_{1} a_{2} a_{3} a_{4} + a_{0} a_{1} a_{3} + a_{0} a_{2} a_{4} + a_{0} + a_{1} a_{2} a_{4} + a_{1} a_{3} a_{4} + a_{1} + a_{4}}{a_{0} a_{2} a_{3} a_{4} + a_{0} a_{3} + a_{2} a_{4} + a_{3} a_{4} + 1}$$

cancel(list_to_frac(l))

$$\frac{a_{0} a_{1} a_{2} a_{3} a_{4} + a_{0} a_{1} a_{3} + a_{0} a_{2} a_{4} + a_{0} + a_{1} a_{2} a_{4} + a_{1} a_{3} a_{4} + a_{1} + a_{4}}{a_{0} a_{2} a_{3} a_{4} + a_{0} a_{3} + a_{2} a_{4} + a_{3} a_{4} + 1}$$

AnacondaとSageMathとJupyter

PythonやJupyterをインストールするのにAnacondaを使うと思いますが、するとSageMathが使えなくなります。問題は二つあって、

1.SageMathはPython2.7なのに対し、AnacondaはPython3である。

2.Anacondaと両立させるにはSageMathをローカルにインストールする必要があるが、sudo apt installではローカルインストールにならない。

この問題を解決するために以下の手順でSageMathをローカル・インストールします。

1.インストールの間、PATHからanaconda3/binを削除する。
echo $PATH > newpath.txt
newpath.txtを編集して、export PATH='newpath....'とする。
source newpath.txt
echo $PATH でanaconda3/binがないことを確認する。

2.http://www.sagemath.org/download-source.htmlからsage-8.3.tar.gzをダウンロードし、$HOMEに展開すると、sage-8.3というフォルダーができている。

3.環境を整える。自分の場合全部最新バージョンでした。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install binutils gcc g++ make tar git openssl libssl-dev
sudo apt-get install gfortran m4 perl build-essential gfortran sudo apt-get install imagemagick texlive dvipng

3.インストールする。4,5時間かかると思う。
cd sage-8.3
make

4.起動について
$HOME/sage-8.3/sage -n jupyter
で起動する。これでsageのnotebookが使える。
普通のjupyterを使う時はjupyter-notebookで起動する。

sageでつくったnotebookを普通のjupyterで開いたり、逆をするとnotebookが壊れて悲惨なことになるので注意する。

近い将来いろいろ解決すると思うのですが、いまのところこれで動いています。

環境は、Ubuntu 18.04、SageMath 8.3、conda 4.5。