【vscode】括弧の色を既定値から変更する
最近、built-inで、括弧のペアごとに異なる色を付ける機能を使えるようになりました。
既定値を上書きして、自分で色を設定することもできます。
setting.json
の一番外の{ }
の中に、下記コードを追加します;
"editor.bracketPairColorization.enabled": true, "workbench.colorCustomizations": { "editorBracketHighlight.foreground1": "#5caeef", "editorBracketHighlight.foreground2": "#dfb976", "editorBracketHighlight.foreground3": "#c172d9", "editorBracketHighlight.foreground4": "#4fb1bc", "editorBracketHighlight.foreground5": "#97c26c", "editorBracketHighlight.foreground6": "#abb2c0", "editorBracketHighlight.unexpectedBracket.foreground": "#db6165" },
editor.bracketPairColorization.enabled
は既定値がtrue
なので、あえて書く必要はないです。
カラーコードで好きな色を指定できます。
ネスト順に1
, 2
, ..., 6
と番号が付いています。
editorBracketHighlight.unexpectedBracket
は、予期されていない括弧(ペアが成立していないなど)を指定します。
参考
【本日のbrew doctor】Warning: You have unlinked kegs in your Cellar.
本日のbrew doctor
のコーナーです。
% brew doctor Please note that these warnings are just used to help the Homebrew maintainers with debugging if you file an issue. If everything you use Homebrew for is working fine: please don't worry or file an issue; just ignore this. Thanks! Warning: You have unlinked kegs in your Cellar. Leaving kegs unlinked can lead to build-trouble and cause formulae that depend on those kegs to fail to run properly once built. Run `brew link` on these: node
とりあえずググったら、自分の記事が出てきました:
後半なんかキレてるので、できれば読まないでほしいですが、今の状況もこの記事書いたときと同じっぽいです。
Homebrewで管理しているnode
が、別に要らないならアンインストールすればいいだけなので、依存関係を見てみます。
下記コマンドで、node
を必要とする(インストール済みの)パッケージの一覧を表示します;
% brew uses --installed node yarn
まあ、上の記事同様、yarn
さんですね。yarn
さんは誰かに必要とされていますか?
% brew uses --installed yarn
いいえ、yarn
さんは誰にも必要とされていません。
上の記事に書いていましたが、どうやら私は、yarn
はHomebrewじゃなくてnpm
の方で管理することにしたらしいです。
npm
の方にyarn
があるか確認してみます;
% npm list -g /Users/hoge/.nodebrew/node/v18.4.0/lib ├── corepack@0.11.2 ├── generator-code@1.6.12 ├── npm@8.12.1 └── yo@4.3.0
居ないですね。node
のバージョン変えてみますか;
% nodebrew list v12.22.6 v15.9.0 v18.4.0 current: v18.4.0 % nodebrew use v15.9.0 use v15.9.0 % npm list -g /Users/hoge/.nodebrew/node/v15.9.0/lib ├── browser-sync@2.26.14 ├── npm@7.5.3 └── yarn@1.22.10
あ、居ました。
上の記事では、yarn
はnpm
で管理する宣言をしていましたが、node
のバージョンはころころ改めそうですし、それでグローバルインストールしておくのはなんかよくないのかなと思ったり。
node.js
プロジェクトに関係なくyarn
を使うときがあるなら、Homebrew管理にしておいた方が良いのかな。
でも、そもそもyarn
要らないんですけど。何で使ったんだっけ。
というか、上の記事内でbrew uninstall yarn
してるんだが、お前なんで帰ってきたの? 自然発生するの?
結局、対処方法も上の記事と同じですかね。
Homebrew管理のnode
とyarn
をアンインストールします;
% brew uninstall yarn node Uninstalling /usr/local/Cellar/yarn/1.22.11... (15 files, 5MB) Uninstalling /usr/local/Cellar/node/16.10.0... (2,435 files, 48.4MB)
はい、解決()
% brew doctor Your system is ready to brew.
次yarn
が必要になったら、直接インスコしようかな。もう使わないことに越したことはないけど。
ちなみに、yarn
というのはこれです。
こいつもパッケージ管理するやつなんですよね。
というわけで、以上です。
【Git】error: unknown option `initial-branch=main'
gitでエラーが出た;
% git init --initial-branch=main error: unknown option `initial-branch=main' usage: git init [-q | --quiet] [--bare] [--template=<template-directory>] [--shared[=<permissions>]] [<directory>] --template <template-directory> directory from which templates will be used --bare create a bare repository --shared[=<permissions>] specify that the git repository is to be shared amongst several users -q, --quiet be quiet --separate-git-dir <gitdir> separate git dir from working tree
--initial-branch
オプションをご存知でない!?
gitのバージョンが古いだけでした。
gitをアプデしましょう。
以上。
蛇足
エラー吐いたときのGitのバージョン;
% git --version git version 2.24.1
Gitは、どうやら、Homebrewでインスコしてた模様;
% where git /usr/local/bin/git <- Homebrew /usr/bin/git <- macOSランタイム? % ls -go /usr/local/bin/git lrwxr-xr-x 1 28 12 20 2019 /usr/local/bin/git@ -> ../Cellar/git/2.24.1/bin/git % ls -l /usr/bin/git -rwxr-xr-x 76 root wheel 167120 5 10 06:30 /usr/bin/git*
最新のバージョンを確認します。
まずはbrew update
でHomebrew(自身)を最新版にアプデします;
% brew update ... % brew -v Homebrew 3.5.4 Homebrew/homebrew-core (git revision 1abcad8993b; last commit 2022-07-09) Homebrew/homebrew-cask (git revision 0ec7c70cf3; last commit 2022-07-09)
Gitの最新安定版は2.37.0
のようです;
% brew outdated git git (2.24.1) < 2.37.0 % brew info git git: stable 2.37.0 (bottled), HEAD Distributed revision control system https://git-scm.com /usr/local/Cellar/git/2.24.1 (1,554 files, 45.5MB) * Poured from bottle on 2019-12-20 at 23:31:19 From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/git.rb License: GPL-2.0-only ==> Dependencies Required: gettext ✔, pcre2 ✘ ==> Options --HEAD Install HEAD version ==> Caveats The Tcl/Tk GUIs (e.g. gitk, git-gui) are now in the `git-gui` formula. Subversion interoperability (git-svn) is now in the `git-svn` formula. zsh completions and functions have been installed to: /usr/local/share/zsh/site-functions Emacs Lisp files have been installed to: /usr/local/share/emacs/site-lisp/git ==> Analytics install: 267,859 (30 days), 859,304 (90 days), 3,005,421 (365 days) install-on-request: 262,165 (30 days), 840,650 (90 days), 2,942,147 (365 days) build-error: 36 (30 days)
というわけで、Gitをアプデします;
% brew upgrade git
以上で、Gitをアプデできました;
% git --version git version 2.37.0
--initial-branch
オプションもちゃんと使えるようになっていました;
% git init --initial-branch=main Initialized empty Git repository in /Users/hoge/Desktop/test/.git/
めでたしめでたし
参考
【macOS Monterey】codeコマンドを使えるようにする(Visual Studio Code)
Visual Studio Code(以下vscode)をターミナル上から起動するためのcode
コマンドを使えるようにします。
※以下はズルいので無しです:
alias code='open -a "Visual Studio Code"'
Windowsだとvscodeをインストールするだけで、code
コマンドにも自動でパスが通るようです。
なので、以下はmacOS(特にMonterey)の人向け内容です。
環境
% sw_vers ProductName: macOS ProductVersion: 12.4 # Monterey BuildVersion: 21F79 % code -v 1.62.3 ccbaa2d27e38e5afa3e5c21c1c7bef4657064247 x64 % date 2022年 7月 4日 月曜日 06時44分03秒 JST
手順
まず、vscodeは事前にインストールしておいてください。
標準でcode
コマンドが使えないか確認(最新バージョンならできるかも):
% code ## -> 成功すればvscodeアプリが起動する
ダメだったら、コマンドが見つからないとエラーが出る:
% code zsh: command not found: code
vscodeを起動して、cmd + shift + P
で表示される窓にshell
と入力します。
表示されるサジェストから、code
コマンドをインストールします。
ターミナルを起動して、code
コマンドが使えればOK。
% code ## -> vscodeアプリが起動するハズ?
成功した人は以上、成功しなかった人は以下に続く。
pythonコマンドのパスが通ってない
私の環境では以下のようなエラーが出ました:
% code /usr/local/bin/code: line 6: python: command not found /usr/local/bin/code: line 10: ./MacOS/Electron: No such file or directory
python
コマンドが見つからないということですが、macでは標準でpython 2系がインストールされていたような?
と思いましたが、Montereyではpythonが削除されたようです。
なので、pythonをインストールしていない人はインストールします。
※覚えてない人はwhere
コマンドで探してみて下さい:
where python python2 python3
homebrewでインストールするなら:
brew install python@3.9
多分、/usr/local/Cellar/python@3.9/
以下に、pip
とかも含めてインストールされます。
また、おそらく、シンボリックリンク/usr/local/bin/python3
が作られるはずです。
% where python3 /usr/local/bin/python3 <- たぶんこれ /usr/bin/python3 <- こっちはXcodeでインスコされたやつ
リンク先はls -go
(ls -l
)で確認できる:
% ls -go /usr/local/bin/python3 lrwxr-xr-x 1 38 9 13 2021 /usr/local/bin/python3@ -> ../Cellar/python@3.9/3.9.7/bin/python3
以上でpythonのインストールは確認できたが、まだやることがある。
今、python3
コマンドで、インストールしたpythonを実行できる環境にあるが、code
コマンド実行に失敗したときを思い出すと、以下のようなエラーであった:
python: command not found
つまり、code
内で呼んでいるのは「python
」コマンド。
なので、python
コマンドでもインストールしたpythonが呼ばれるように、シンボリックリンクを作成する:
## ln -s リンク先 リンク元 ln -s ../Cellar/python@3.9/3.9.7/bin/python3 /usr/local/bin/python
第1引数で指定してるpythonの実行ファイル(あるいはシンボリックリンク)は、各自の環境に合わせて修正して下さい。
第2引数の方は、シンボリックリンクのファイルですが、ファイル名は必ずpython
とし、配置する場所はパスが通っているところであればどこでも良いです。
以上で、任意ディレクトリからpython
コマンドが利用できるので、code
コマンドも実行できるようになっているはずです。
% code ## -> 今度こそvscodeアプリが起動するハズ
codeコマンドの中身
vscodeのコマンドパレットからcode
コマンドをインストールすると、/usr/local/bin/code
に/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code
のシンボリックリンクが作られるようです。
% ls -go /usr/local/bin/code lrwxr-xr-x 1 68 7 2 15:40 /usr/local/bin/code@ -> /Applications/Visual Studio Code.app/Contents/Resources/app/bin/code
そして、code
の実体はただのシェルスクリプトです。
中身は以下で全てです:
#!/usr/bin/env bash # # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. function realpath() { python -c "import os,sys; print(os.path.realpath(sys.argv[1]))" "$0"; } CONTENTS="$(dirname "$(dirname "$(dirname "$(dirname "$(realpath "$0")")")")")" ELECTRON="$CONTENTS/MacOS/Electron" CLI="$CONTENTS/Resources/app/out/cli.js" ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" --ms-enable-electron-run-as-node "$@" exit $?
確かに、エラーメッセージ通り6行目でpython
コマンドを実行しています。
これが見つからなくてエラーが出ていました。
シンボリックリンクを作成する代わりに、code
ファイル自体を弄っても対応できますが、まあ前者にしておきましょう。
試行錯誤:エイリアスじゃダメ
そもそも、私の環境ではpython
コマンドが使えました!
というのも、python
という名前でエイリアスを作成していたんですよね:
alias python='/usr/local/bin/python3'
でも、これはzsh
用の設定ファイル~/.zshrc
にしか書いていませんでした。
code
で呼ばれるシェル(shebang)はbash
なので、bash
用の設定ファイル.bash_profile
にもエイリアスを追加してみましたが、それでもダメでした。
結局、よくわからないのですが、エイリアスじゃダメっぽいです。
実際、code
のファイル内に直接alias
コマンドを書いてみましたが、それでもcommand not found
でした。
というわけで、このあたりの仕様がエイリアスとシンボリックリンクの使い分け方になるのかなと思います。
余談:macとpython
昔はmacOSに標準でpython 2系がインストールされていて、python
コマンドが使えたはずです。
どうやらMontereyのバージョンからランタイムpythonが削除されたようです。
なので、これからは自分でインストールする必要があるようです。
おわりに
長くなりましたが以上です。
何でこんなに長いんでしょう。
参考
同様の内容の記事
macOS MontereyとランタイムPython
シェル
【nodebrew】Use of uninitialized value $a1 in numeric comparison (<=>) at ... の解消
nodebrew list
などを実行すると以下のように、頭になんかメッセージが出力される;
% nodebrew list Use of uninitialized value $a1 in numeric comparison (<=>) at /Users/<hoge>/.nodebrew/current/bin/nodebrew line 678. Use of uninitialized value $a1 in numeric comparison (<=>) at /Users/<hoge>/.nodebrew/current/bin/nodebrew line 678. .DS_Store v12.22.6 v15.9.0 v18.4.0 current: v18.4.0
<hoge>
は各自のユーザ名に置き換えてください。
これを解消するには、/Users/<hoge>/.nodebrew/node/
にある.DS_Store
を削除すればいい;
rm /Users/<hoge>/.nodebrew/node/.DS_Store
以上。以下蛇足。
環境
手順
nodebrew list
で.DS_Store
が表示されちゃってることから察するように、この存在が原因。
実際;
% ls -a /Users/<hoge>/.nodebrew/node/ ./ ../ .DS_Store v12.22.6/ v15.9.0/ v18.4.0/
いますね。なので、rm
コマンドなりで消してやれば良い;
rm /Users/<hoge>/.nodebrew/node/.DS_Store
これでもう出なくなりました;
% nodebrew list v12.22.6 v15.9.0 v18.4.0 current: v18.4.0
参考
Macユーザーはロジクール製品を買わないように
ロジクールのmx ergoというマウスを使っていますが、これのBluetooth接続によってMacのスリープ状態が自動的に解除されます。
Macをスリープ状態しなたいのなら、その度にロジクールマウスの電源を切るなどの対応をしないといけません。
夜中だろうがいつだろうが、勝手にMacのスリープ状態を解除し、モニターを点灯させます。
この現象が周知されてからもう半年ぐらい経ちますが、未だにロジクールマウスのソフトウェアアップデートによるバグ修正はありません。ソフトウェアアップデート自体は何度かありましたが、このバグを修正する気は無さそうです。
mx ergo 以外のロジクール製品でも同様の現象が確認されているようですが、ロジクールとしてはやはりこの問題に対応する気はなさそうです。
【Java】配列のclone()について
Javaにおいて、配列に対してclone()
というメソッドが使える。
clone()
メソッドは、配列を「コピー」してくれるのだが、モノによってはshallow copyにもdeep copyにもなりうる。
1次元配列の場合は、deep copyになる。
public class Main { public static void main(String[] args) { int[] a = {0, 1, 2}; int[] b = a.clone(); b[0] = 9; for (int n : a) { System.out.printf("%d ", n); } System.out.println(); for (int n : b) { System.out.printf("%d ", n); } } }
結果:
0 1 2 9 1 2
しかし、2次元配列の場合は、shallow copyになる。
public class Main { public static void main(String[] args) { int[][] c = {{1, 2}, {3, 4}}; int[][] d = c.clone(); d[0][0] = 9; for (int[] nn : c) { for (int n : nn){ System.out.printf("%d ", n); } System.out.println(); } System.out.println(); for (int[] nn : d) { for (int n : nn){ System.out.printf("%d ", n); } System.out.println(); } } }
結果:
9 2 3 4 9 2 3 4
2次元配列をdeep copyしたいなら、1次元ずつcloneする。
public class Main { public static void main(String[] args) { int[][] c = {{1, 2}, {3, 4}}; int[][] d = new int[c.length][c[0].length]; for (int i = 0; i < c.length; i++){ d[i] = c[i].clone(); } d[0][0] = 9; for (int[] nn : c) { for (int n : nn){ System.out.printf("%d ", n); } System.out.println(); } System.out.println(); for (int[] nn : d) { for (int n : nn){ System.out.printf("%d ", n); } System.out.println(); } } }
結果:
1 2 3 4 9 2 3 4
結局、clone()
メソッドを使ったところで、愚直なdeep copyよりforループが1つ少なくて済むだけという話。
愚直なdeep copy:
public class Main { public static void main(String[] args) { int[][] c = {{1, 2}, {3, 4}}; int[][] d = new int[c.length][c[0].length]; for (int i = 0; i < c.length; i++){ for (int j = 0; j < c.length; j++){ d[i][j] = c[i][j]; } } d[0][0] = 9; for (int[] nn : c) { for (int n : nn){ System.out.printf("%d ", n); } System.out.println(); } System.out.println(); for (int[] nn : d) { for (int n : nn){ System.out.printf("%d ", n); } System.out.println(); } } }
というわけで、この記事にはオチがないです。
以上。