備忘録とか日常とか

学んだこととかを書きます。

pathlibとかいう優秀すぎる標準ライブラリ(python)

自分は今までpythonでファイル操作を行うときはos.pathとかglobとかを使っていたが、pathlibという優秀なものがあると聞いて使ってみた。
python3.4以降なら使わない手はない。

以下優れている点

  • os, glob の組み合わせで行ってきた操作が大体pathlib一つでできるようになる
  • メソッドチェーン的に記述でき、可読性が上がる
  • open()などのファイル読み込み系の操作と親和性が高い
  • windowsだとファイルパスにエスケープ二つ\\入れる必要があるが、/区切りで解釈してくれる

以下もうひとつな点

  • 一部ライブラリではPathオブジェクトを受け付けず、str()でキャストする必要がある
  • copyなど一部未対応のメソッドがある

公式ドキュメントはこちら

主な使用方法

import, インスタンス生成

基本はPath オブジェクトを生成して操作することになる。
インスタンス生成時にファイルまたはディレクトリのパスを指定する。(絶対パスでも相対パスでもよい)

>>> from pathlib import Path
>>> p = Path('aaa/bbb/ccc.txt')

pはPathのサブクラスであり、windowsならWindowsPathlinux, maxならPosixPathオブジェクトとなる。
使い方はほぼ同じなので気にする必要はない。

引数を指定しないとカレントディレクトリのリンクが自動的にパスに入る。

>>> Path()
WindowsPath('.')

カレントディレクトリ、ホームディレクトリ取得

# カレントディレクトリ取得
>>> p.cwd()

# ホームディレクトリ取得
>>> p.home()

上記メソッドは新たなパスが格納されたPathオブジェクトを返す。
これに限らず、Pathオブジェクトのメソッドは新たなPathを返すため、文字列を直に操作する必要がなくなる。

また、上記メソッドの出力はインスタンス生成時の引数に依らず、常に同じである。
Pathオブジェクトならいつでもカレント、ホームディレクトリを呼び出せる。

絶対パス取得

まずは絶対パスを取得する。

# シンボリックリンクを解決して絶対パスを返す
>>> p = Path('.')
>>> p.resolve()
WindowsPath('D:/project/path_test')

# なんかこっちでもいけるっぽい
>>> p.absolute()

公式ドキュメントには書いてなかったが、p.absolute()でも同じことができるっぽい。内部では同じメソッドを呼び出しているのだろうか。
コードの中身を見てないのでわかりません。

ついでに絶対パスかどうかの確認

>>> p.is_absolute()
True

絶対パスならTrueを返す。

ファイル名、拡張子の取得

ファイルまでのパスがPathオブジェクトに入っているなら以下でファイル名を取得できる
拡張子や、拡張子を除いた名前部分(stem)を取得することもできる。戻り値は文字列なので注意

# ファイル名取得 戻り値は文字列
>>> p.name
'aaa.txt'

# 拡張子取得  戻り値は文字列
>>> p.suffix
'.txt'

# .tar.gzみたいなのは.suffixes でリスト取得できる
>>> p.suffixes
['.tar', '.gz']

# 拡張子を除いたファイル名を取得 戻り値は文字列
>>> p.stem
'aaa'

ファイル、ディレクトリ削除、権限変更

パスがファイルかディレクトリかでメソッドが変わる。

# ファイル削除
>>> p.unlink()

# ディレクトリ削除 ただし空ディレクトリに限る
>>> p.rmdir()

# 権限変更 ファイル、ディレクトリ問わず適用可能
>>> p.chmod(755)
>>> p.cwd(755)

ディレクトリが空じゃない場合はおとなしくshutil.rmtreeとかを使う。

ディレクトリ取得

便利。

# 親ディレクトリ取得 戻り値はPATHオブジェクト
>>> p.parent

パス結合

これが一番便利かもしれない。
Pathオブジェクトでは/演算子がパスの結合として再定義されている。

# Pathオブジェクトに文字列で除算するとパス結合されたPathオブジェクトが返る
>>> Path('a/b/c') / 'd'
Path('a/b/c/d')

#  windowsでのエスケープ二つと混ぜても同じ結果が得られる
>>> Path('a\\b\\c') / 'd'
WindowsPath('a/b/c/d')

# 一応メソッドもある
>>> Path('a/b/c').joinpath('d')
WindowsPath('a/b/c/d')

ファイル一覧取得、検索

指定したパス内のファイル、ディレクトリを一覧表示・検索できる。
検索に関しては、標準ライブラリのglobと使い方がほぼ同じである。
ただし、いずれもメソッドの戻り値はジェネレータであることに注意する。

# パス内のファイル、ディレクトリ一覧のジェネレータを返す
>>> p.iterdir()
<generator object Path.iterdir at 0x00000197DA6D3BF8>

# パス内の.py ファイルを検索、ジェネレータを返す
>>> p.glob('*.py')
<generator object Path.glob at 0x000002804AEC6C50>

# リストとして取り出したければキャストする
>>> list(p.glob('*.py'))

# パス以下を再帰的に検索したい場合は以下のように指定する
>>> p.glob('**/*.py')

ファイルを開く

Pathオブジェクトにはファイルを開くメソッドも用意されている。
テキストとして開くならこれで問題ない。当然だがパスはファイルが指定されている必要がある。

# ファイルを開く
>>> f = p.open('r')

# 組み込み関数にPathオブジェクトを渡すこともできる
>>> f = open(p, 'r')

注意すべきは、Pathオブジェクトに対応していない外部ライブラリも存在するということ。
ここによると、どうやらopenCVcv2.imreadには対応していないらしい。

そんな時は文字列にキャストしてからライブラリに渡せば問題ない。

>>> p = Path('aaa/bbb/ccc.txt')
# str()でキャストできる  UNIX環境
>>> str(p)
'aaa/bbb/ccc.txt'

# windows 環境でも使える
>>> str(p)
'aaa\\bbb\\ccc.txt'

# .as_posix()でもできるが、windows環境下でも / で区切られる
>>> p.as_posix()
'aaa/bbb/ccc.txt'

as_posix()は / で区切られた文字列が返されるため、windows環境では使用できない。
じゃあwindows用のメソッドがあるかと思いきや用意されていないっぽいので、環境に依存したくなければstr()を使うようにすべきか。

判定系

以下のメソッドはTrueかFalseで判定を返す。

# 絶対パスかどうかを判定
>>> p.is_absolute()

# 現在のパスが与えられたパターンと一致するかどうかを判定 (パターンはglob形式で指定)
>>> p.match('a/*txt')

# パスのファイル、またはディレクトリが存在しているかどうかを判定
>>> p.exists()

# ディレクトリかどうか判定
>>> p.is_dir()

# ファイルかどうか
>>> p.is_file()

# シンボリックリンクかどうか
>>> p.is_symlink()

# Pathオブジェクトが指定するファイルと引数で指定したファイルが同じファイルを参照しているかどうか
# 引数にはPathオブジェクトか文字列をとる
>>> p.samefile(other_path)

ファイル名変更など

# 指定したファイルまたはディレクトリをtgtにリネームする
>>> p.rename(tgt)

# パスの末尾のファイルまたはディレクトリ名をtgtに置き換える
# 存在する場合はリネームする
>>> p.replace(tgt)

MongoDBインストール(windows, ubuntu, macOS)

リレーショナルデータベースも触ったことのない人間がいきなりMongoDBを導入してみたのでメモ。
ついでにインストールはwindows, ubuntu, macからそれぞれ行ってみた。


公式ページには大体書いてる。
2018/9/6時点ではv4.0.2が最新らしい。
Install MongoDB Community Edition — MongoDB Manual
Community EditionとEnterprise Editionの二つがあるが、個人&ローカル利用ならCommunity Editionで事足りるのでそちらを入れる。
Enterpriseはセキュリティとかの機能がサポートされて有料になるらしい。詳しくは公式を。

インストール(windows)

以下のURLにアクセス。
MongoDB Download Center | MongoDB

[Community Server] ->[Windows] とタブを開き、VersionはOSのビットを選択(画面ではWindows 64-bit)
f:id:may46onez:20180906213515p:plain

後はインストーラの指示に従ってインストール。ある意味らくちんかもしれない。

途中でMongoDB Compass Communityというソフトも入れるかどうか聞かれるが、これはクライアントGUIツールと呼ばれるものである。要はGUIでデータベースをいじれる。
f:id:may46onez:20180906221206p:plain

こういうツールの使い方も覚えておくと後々便利かもしれない。
参考↓
dev.classmethod.jp

インストールできたらpathを通す。
[windowsキー] → 「環境変数」で検索し環境変数を編集する
Pathを選択し編集し、MongoDB\Server\4.0\binまでのpathを追加↓
f:id:may46onez:20180908120739p:plain

できたらコマンドプロンプトを起動し、

mongod --version

でバージョン表示されるか確認する。

インストール(ubuntu)

Ubuntu公式リポジトリのmongoDBはバージョンが古く、最新バージョンを取得するには一手間必要である。
公式リポジトリ以外からパッケージを取得するためには、そのリポジトリを認証するための公開鍵をキーチェーンに取り込まなければならない。

まず公開鍵と取り込む

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4

その後ソースリストの作成
ubuntu14.04の場合

echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

ubuntu16.04の場合

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

ubuntu18.04の場合

echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

あとはリポジトリ更新してインストール

sudo apt update
sudo apt install mongodb-org

ターミナルで

mongod --version

とか打ち込んでバージョン情報が表示されるならインストールできてる。

ちなみに最初に取得した公開鍵のことをGPGキーとか言ったりする。GNU Privacy Guardという暗号化ソフトで生成されるらしいが詳しいことはわからないので気が向いたらまた調べる。
一応参考サイト
概要のみ↓
tech.nikkeibp.co.jp
GPGの使い方とか↓
qiita.com

インストール(mac)

homebrewでさくっと。

brew update
brew install mongodb

らくちんすぎる。

手動で入れたい場合は公式からtarファイルを落とす。
以下URLから[Community Server] → [OSX]と選択してtarファイルをダウンロード。

ターミナルで以下のコマンドをたたき展開。

tar -zxvf mongodb-osx-ssl-x86_64-4.0.2.tgz

展開されたディレクトリを適当な場所に移し、ディレクトリ内の/binにパスを通す。
~/.bashrcに以下を追加。

export PATH=<path-to-mongodb-directory>/bin:$PATH

参考とか

使い方

Karl Seguinj氏のThe Little MongoDB Bookというのが勉強になるらしい。しかも無料。
githubでもtexソースが公開されてる。
GitHub - karlseguin/the-little-mongodb-book: The Little MongoDB Book

各言語への訳が有志で行われており、日本語ではMongoDBの薄い本という邦訳が有名っぽい。もうちょい他に訳あったやろ
この薄い本が検索上位に来ることが多いが、内容が古いらしいので以下の「MongoDBの手引き」のほうが良いかも
github.com

PDFは未作成っぽいのでmarkdownepubで。

困ったときの公式ドキュメント
The MongoDB 4.0 Manual — MongoDB Manual

NoSQLの仕組み的な

以下のスライドが参考になる。

Markdownが書きたいのでAtomとVSCodeを整備して比較する

Markdownを書くための環境設定などをメモする。
普段はVSCodeを使っているが、github開発のAtommarkdownと親和性が高そうなので比べてみた。
環境はmacbook promacOS Sierra 10.12.6

Atom

Atomはデフォルトでmarkdownに対応しており、macならctrl + shift + mでリアルタイムプレビューを表示できる。
それに加えて拡張機能も豊富であり、以下のサイトで色々紹介されている。
qiita.com

とりあえず以下の拡張は便利だった。

markdown-writer

各種ショートカットが追加され、キーバインドなどを設定可能。
便利。この後のtool-bar-markdown-writerがもっと便利。

tool-bar-markdown-writer

markdown編集時に、エディタ上部にtool-barが表示される。
markdownの記法を覚えてなくてもGUIで直感的に扱えるようになる。テーブル整形とかも便利。
tool-barmarkdown-writerのパッケージが必要。

markdown-pdf

Atomはデフォルトでhtml出力には対応しているが、pdfなどで出力するにはこのパッケージが必要。
コード部分なども綺麗に出る。
Atomはプレビューや出力のhtml, pdfのデザインなどがデフォルトで綺麗なとこが最大の利点かもしれない。


以下のはちょっと問題があった。

markdown-scroll-sync

プレビューをスクロールすると自動で該当するテキスト部分までスクロールしてくれる。
機能自体は便利で良いのでが、自分の環境ではなぜか動作しなかった。。
Mac以外なら動くのかもしれない。アプデ待ち。

markdown-toc

目次を自動生成してくれるパッケージ。
トピック名を変更しても上書き保存時に目次も変更してくれるのでよい。
が、これで生成したhtmlやpdfのリンクは機能しない。。意味ねえ。。
当然プレビューのリンクも効いていない。

ググってみて、先人がいたと思ったらなんかちょっと違った。
take-she12.hatenablog.com
日本語はidが生成されなくてリンクが正常にいかないらしいということはわかったが、英語でもリンクされない。
何故なのか・・・。
Atom側の問題なのかもしれない。解決できる気がしないのでとりあえず放置。


と思ったらすごいのがあった。

markdown-preview-enhanced

f:id:may46onez:20180309180023p:plain
プレビュー、TOC作成、プレビューとスクロール同期に加えてlatex数式埋め込みからPDF、html、ebook出力などめっちゃ多機能である。
数式埋め込みなど全ての機能を使うには別途パッケージが必要だが、これを入れるだけでとりあえず

  • スクロール同期プレビュー
  • TOC自動作成
  • html出力(リンク生きてる, ただし日本語はだめ)

の三つは実現できる。もうこれだけでいいね!

PDF出力はpuppeteer, phantomJS, princexmlの三つに対応している。princexmlは有償なのでよくわからない。
残り二つについて試してみた

puppeteer

Nodeのライブラリ。今までNode.jsとかいうのに触れた機会がなく、基礎知識など皆無だがとりあえず使う方法だけメモしておく。
Node.jsについての説明は以下だけ読んだ。
qiita.com
qiita.com

macで導入するにはまずhomebrewを導入する。多分↓のでできる。
qiita.com

その後nodeをインストールする。

brew install node
echo 'export PATH="/usr/local/share/npm/bin:$PATH"' >> ~/.bash_profile

するとnpmが使えるようになっているので、

npm install -g puppeteer

とするとpuppeteerでのPDF出力が可能となる。

ここまでやってから、どうやらnodebrewとやらがあるということに気がついた
mmorley.hatenablog.com
homebrewではNode.jsのバージョン管理ができないらしい。
今はよくわかんないので必要になってからでいいかな・・・

PhantomJS

PhantomJSとはwebkitベースのヘッドレスブラウザということらしい。サーバサイドとかウェブ系のことがわからなさすぎて辛い。。
例によってとりあえず使う環境は整えておく。というよりこれはbrewで入れるだけ。

brew install phantomjs

二通りでPDF出力を試したが、puppeteerはコード部分の背景が白くなってしまい、phantomJSはやたらフォントサイズが大きくなってしまうという結果になった。
どっかをいじれば直せるのかもしれないが、とりあえずデフォルトではAtomのプレビューとPDFが綺麗で個人的には一番好き。


VSCode

VSCodeもデフォルトでmarkdownプレビューに対応している。
しかし自動で分割してくれず、shift + command + Vで同じ領域の別タブにプレビュー→自分で画面分割という手順を踏む必要があり、あまりスマートな感じがしない。
以下のパッケージが非常に役に立つ。

Markdown Preview Enhanced

MPE再び。デフォルトでは微妙なmarkdownプレビューを改善してくれる。
Atomと同じctrl + shift + m (またはcommand + K からの V)でMPE Previewを表示でき、自動で画面分割してくれるので余計な操作はいらない。
もはやこれでほぼ事足りる。


一応こんなのもある。

Markdown PDF

VScodeデフォルトのプレビューをPDF変換する。
上書き保存時に自動変換する機能や、スタイルシートを指定して自分好みのpdfを出力できる機能がついており、拡張性が高い。
ただデフォルトだとVScodeのプレビューのまま出てくる上にフォントサイズが少々大きい。
色々いじりたい人向け。ドキュメントが日本語で読みやすい

Markdown All in One

ショートカット、テーブルフォーマット、アウトライン表示などなど、編集する際に役立つ機能が詰まった拡張。
VScodeでがっつりmarkdownを編集する人にはいいかもしれない。
ただしbold体、italic体をトグルするショートカットがVScode自体のショートカットと重複するので注意が必要。

どっちを使うのか

と、ここまで書いたがVScodeには一つ致命的な欠陥がある。
プレビュー表示した状態で日本語を入力→バックスペースを押すとゴミ文字が入力されるというもの。
以下でこの問題が取り上げられている。
forum.vivaldi.net

qiita.com

macOSだけの問題らしい。日本語入力の際に出る不具合だが、プレビュー表示していない時は問題なく編集できる。謎。
今のところ、少なくともMarkdownをプレビュー見ながら編集したければAtomがいいと思われる。

.bstファイルをいじって著者名表記を変える

bibtexで引用する際に注意すべき点として、

  • 引用順をどうするか
  • 著者名表記をどうするか

がまずあげられる。分野によると思うが、自分がよく使うのは

  • 文献を引用された順にソート
  • 著者名のファーストネームはイニシャル

なので、それに合わせて.bstファイルをいじる方法をメモする。

デフォルトのテンプレ

欧文用ではplain.bst, unsrt.bstを使い、和文にはjplain.bst, junsrt.bstを使う。
plainでは参考文献がアルファベット順に出力し、
unsrtでは引用された順に出力する。

特に設定を書き換えない場合は参考文献を載せたい場所で

\bibliographystyle{plain}
\bibliography{reference.bib}

みたいに書けば良いが、自分でいじった.bstファイルを使う場合はtexソースと同じディレクトリに.bstファイルを置く。

ここではjunsrt.bstをいじって自分用のmyjunsrt.bstをつくる。
/usr/local/texlive/2016/texmf-dist/pbibtex/bst/junsrt.bstを適当にコピー。
jplain.bstも同じ場所にある。バージョンとかは適宜読み換える。
見つからない場合は

find /usr/local/ -name junsrt.bst

とかしたら出てくる。windowsもtexlive/以下にあるんじゃないかな。知らんけど。

書き換え

.bstファイル内では、

FUNCTION {---定義名---} {
    ----定義の内容----
}

という形で各種表記の仕方が定義される。
こんな感じ↓

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }

    { s nameptr "{ff}{ll}" format.name$ is.kanji.str$
	{s nameptr "{ff}{ll}" format.name$ 't :=}                        
 	{s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=}
      if$

      nameptr #1 >
	{ namesleft #1 >

	    {", " * t * }


	    { t "others" =

 		{ s is.kanji.str$

 			{"$B$[$+(B" * }


 			{", et~al." * }

 		  if$
 		}
 		{ s is.kanji.str$

 		    {", " * t * }



		    { numnames #2 =
 			{" and " * t * }
 			{", and " * t * }
		      if$
		    }


 		   if$
 		}
	      if$
	    }
	  if$
	}
	't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

著者名の出力を変えるにはFUNCTION {format.names}の中身を書き換える。
上記nameptrとか書いているあたりを見る

       {s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=}

この部分。
{ff~}{vv~}{ll}{, jj}で著者名の表記を指定する。

  • {f}でファーストネームを頭文字のみ表示、{ff}で全て表示
  • {l}でラストネームを頭文字のみ表示、{ll}で全て表示
  • {v}でミドルネームを頭文字のみ表示、{vv}で全て表示
  • {j}でJr.を頭文字のみ表示、{jj}でJr.全て表示
  • `~`をつけるとそこで改行されなくなる。姓と名で改行されないようにするために使われる。
  • `.`をつけるとその位置にピリオドを表示
  • `, `をつけるとその位置にカンマを表示

で変えられる。
例えばJohn Fitzgerald Kennedyが著者名の時、

  • {f.~}{v.~}{ll}{, jj} で J. F. Kennedy
  • {ff~}{v.~}{l.}{, jj} でJohn F. K.

みたいになる。

【追記 18/2/5】
一行前の

	{s nameptr "{ff}{ll}" format.name$ 't :=}

の部分は日本語表記に使用される。ここを書き換えると漢字の苗字の一文字目だけ表示されたりするのでいじらない。


他にもタイトルや出版年の出力を変えることができるらしい。
少なくとも情報系の学会や研究会ではtexフォーマットが与えられることが多いので使う機会はなさそうだが・・・
自前で作る必要がある場合に役立つかもしれない。

○参考元
bst ファイルのカスタマイズ - Okomeda Net
LaTeXで参考文献の形式を変更する方法(bstファイルの編集) - けつあご日記

Visual Studio Codeの拡張とか初期設定とか

約一年半の沈黙を破り更新。
いや沈黙というか普通にサボってただけなんだが・・・

社会人になってもコンスタントに更新できるだけの気力があるかどうかはわからない。
でもできるだけ勉強したこととかを更新していきたい


エディタの話。最近Visual Studio Codeに乗り換え、いい感じなので初期設定などをメモしておく。


自分は最初Sublime textを使ってたが、拡張の設定などが煩雑であまり好きになれなかった。
あと「これ無料版やで!気に入ったら買ってや!」っていうポップアップも地味に鬱陶しかった。。
なのでAtomに切り替えたのだが、拡張を入れていくとかなり重くなってしまい、ついにイライラがピークに達したのでリストラした。


VSCode

  • 拡張を入れても十分軽い
  • gitやターミナルにデフォルトで対応
  • デバッグ機能も最初から搭載

と、かなり使い勝手が良い。
というか最初からある程度の機能が備わっているので、拡張を入れずともそこそこ使えるのである。
それがVSCodeの魅力とも言える。

逆に不便に感じたことは

  • 複数プロジェクトを同時に開けない
  • たまにauto formatが効かない(OS依存?)

などがある。
異なる場所にあるディレクトリをサイドバーで同時に開く機能がVSCodeにはないらしい。
シンボリックリンクを使う方法もあるようだが、まあデフォで対応してくれたらその方が嬉しい。
あとubuntuで使用してる時にpythonのauto formatが効かない時がある。
これに関してはよくわからん。誰か直してくれ(他力本願)


とまあ色々あるがいい感じなので初期設定をメモしておく。
当方現在はpythonがメインなのでpython系の拡張が多いです。

拡張

Atom Keymap

その名の通り、Atomキーバインドをそのまま持ち込める。
もちろんVSCode内でキーバインドをカスタムすることもできるが、他のエディタに慣れた人ならそのまま使えるのが良い。
Sublime Text Keymapもありますよ。

Shortcuts

画面下のステータスバーにターミナルなどのショートカットを追加する。
あんま使わないけどあったら便利か?

Linux Themes for VSCode

テーマが追加される。
デフォルトではなんとなく好きじゃない配色ばかりだったので、これは気に入っている。

file-icons

サイドバーのアイコンが変わる。
いっぱい種類があるので調べて見ると楽しいかも。

LaTeX Workshop

latexがビルドできるようになり、pdfファイルをvscode内のtabで表示できる。
pdfはブラウザでも表示できる。
シンタックスハイライトやオートフォーマットも追加される。便利。
詳しくは以下
qiita.com
VSCode でLatexの日本語環境を作る · GitHub

Project Manager

プロジェクトを切り替えるコマンドを追加できる。
上述の通り、VSCodeではサイドバーで異なる場所にあるディレクトリを同時に開くことができない。
代案としてこの拡張を使えば、同時には開けないが切り替えはスムーズにできる。

Python

とりあえず入れた。シンタックスハイライトやらスニペットやらが追加される。
この中でも`Python`はpythonでコーディングするなら必ず入れる。lintとCode formatが使えるので便利

Setting Sync

非常に便利。gistを使って複数の端末で設定を共有できる。
利用するにはGithubアカウントが必要になる。利用方法は以下を見ればわかりやすい
marketplace.visualstudio.com

設定

Macなら設定ファイルは`/Users/ユーザー名/Library/Application Support/Code/User/settings.json`に書かれているが、
VSCode⌘ + ,GUI的に設定できる。windowslinuxならctl+,だと思う

ここに設定を書き込むわけだが、検索して変えたい設定をクリックするだけで設定ファイルに自動で記述される。
例えばエディタ内のルーラの位置を変えたければ、検索窓にrulersとか入れて出てきた設定を選択すればよい。
拡張の設定もここで変えられる。

以下に自分の設定をのせとく
【18/2/1 更新】

{
    "editor.multiCursorModifier": "ctrlCmd",
    "editor.formatOnPaste": true,
    "editor.renderWhitespace": "all",
    "python.linting.pylintEnabled": false,
    "python.linting.pep8Enabled": true,
    "editor.wordWrap": "on",
    "editor.rulers": [
        80
    ],
    "[python]": {
        "editor.rulers": [
            79
        ]
    },
    "editor.formatOnSave": true,
    "[latex]": {
        "editor.formatOnSave": false
    },
    "latex-workshop.latex.toolchain": [
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ]
        },
        {
            "command": "pbibtex",
            "args": [
                "%DOCFILE%",
                "-kanji=utf8"
            ]
        },
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ]
        },
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ]
        }
    ],
    "latex-workshop.latex.autoBuild.onSave.enabled": false,
    "editor.renderControlCharacters": true,
    "workbench.startupEditor": "newUntitledFile",
    "workbench.activityBar.visible": true,
    "python.linting.mypyArgs": [
        "--errors-only"
    ],
    "python.formatting.autopep8Args": [
        "--errors-only"
    ],
    "workbench.colorTheme": "Adapta Nokto",
    "window.title": "${activeEditorLong}",
    "sync.gist": "2adb76066f632f1f22a2798c7d57e1c2",
    "sync.lastUpload": "2018-02-01T03:57:43.855Z",
    "sync.autoDownload": false,
    "sync.autoUpload": false,
    "sync.lastDownload": "",
    "sync.forceDownload": false,
    "sync.anonymousGist": false,
    "sync.host": "",
    "sync.pathPrefix": "",
    "sync.quietSync": false,
    "sync.askGistName": false,
    "editor.minimap.showSlider": "always",
    "workbench.iconTheme": "file-icons",
}

メモしておくと、

  • `Python`拡張はデフォルトでpylintを使うが、自分はpep8派なので以下の記述を加える
"python.linting.pylintEnabled": false,
"python.linting.pep8Enabled": true,
  • pep8でwarningとerrorの箇所を示してくれるが、warning山ほど出すぎてしんどいのでとりあえずerrorだけ表示するように設定
"python.linting.mypyArgs": [
        "--errors-only"
    ],
    "python.formatting.autopep8Args": [
        "--errors-only"
    ],
  • latex関係を導入。
    "latex-workshop.latex.toolchain": [
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ]
        },
        {
            "command": "pbibtex",
            "args": [
                "%DOCFILE%",
                "-kanji=utf8"
            ]
        },
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ]
        },
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ]
        }
    ],
    "latex-workshop.latex.autoBuild.onSave.enabled": false,

toolchainを指定することでbibtexファイルとかを一発でビルドしてくれる。詳しくは上述のサイト。

ついでにlatex-workshop.latex.autoBuild.onSave.enabledをtrueにすると保存時に自動ビルドされる。デフォルトでtrueになっているが煩わしいのでfalseにした

  • 保存時にオートフォーマットする。この機能がAtomの拡張より格段に軽くて使いやすい。
"editor.formatOnSave": true,
  • ウィンドウのタイトルバーにカレントディレクトリのパスを表示。
"window.title": "${activeEditorLong}"
  • 言語ごとに設定を変えることができる。pep8は79文字制限があるので、pythonの時はルーラを79文字の位置にする
 "[python]": {
        "editor.rulers": [
            79
        ]
    },

また自分のlatexファイルはぐっちゃぐちゃなのでもはや我流で行きたい。latexでは切る。

"[latex]": {
        "editor.formatOnSave": false
},

latexでオートフォーマットするにはlatexindentというツールを導入する必要がある。
以下のサイトでなにかわかるかもしれない。
tex.stackexchange.com



Setting Sync使えばこれも自動でバックアップされるのでメモする意味もないかもしれないが一応。
今後VSCodeがもっと栄えてくれると嬉しい。