計算物理屋の研究備忘録

Linux, Cygwin, Mac, zsh, emacs等の使い方、設定などのメモ

Macのinkscapeでコピペするとベクター画像がラスター画像になる

XQuartzが原因らしい.設定で直せる.

XQuartzの環境設定 --> ペーストボード --> CLIPBOARDが変更されときにペーストボードをアップデートのチェックを外す

ElpyでEmacsのPython統合開発環境を構築

Elpy

EmacsPythonのコードを書く時、自動的に補完候補を出したり、文法チェックをしたり、コードを整形したりと、統合開発環境を構築できるパッケージ。内部では補完とコード解析にcompnayjedi、文法チェックにはflake8などPythonのパッケージが使われている。

github.com

 インストール

インストールはpackage.elからすればいい。elpy以外のEmacsのパッケージは依存で勝手に入るかもしれないが、以下のものを入れておく。flycheckflymakeの代わりにflycheckを使いたい人だけ。

  • company
  • flycheck

他にも以下のPythonパッケージをpipなどでインストールしておく。 たぶん全部が必須ではない。自分が必要とするやつだけ入れればよい。

  • jedi
  • rope
  • autopep8
  • yapf
  • black
  • flake8

pyenv

pyenvを使っている場合、というよりpyenvを使っていなくても、自分が使用しているPythonにパスが通ってないとうまくelpyが動作しない。

Emacsから実行するときのパスはexec-path。scratchバッファでexec-pathと書いて、C-jで評価すると確認できる。pyenvの場合はexec-path/home/xxx/.pyenv/shims/などが入っていないとうまくいかず、システムのPythonが使われる。

パスを通す手っ取り早い方法はbashzshなどのログインシェルでパスを通しておいて、それをexec-path-from-shellを使ってEmacsに引き継がせる

シェルのPATHをEmacsに引き継がせる - 計算物理屋の研究備忘録

設定

use-packageを使って設定した。設定方法は公式のドキュメントに書いてあるのでコピペするだけ

elpy.readthedocs.io

;;; elpy (melpa-stable)
(use-package elpy
  :ensure t
  :pin melpa-stable
  :defer t
  :init
  (advice-add 'python-mode :before 'elpy-enable)
  :config
  (setq elpy-rpc-virtualenv-path 'current)
  (when (load "flycheck" t t)
    (setq elpy-modules (delq 'elpy-module-flymake elpy-modules))
    (add-hook 'elpy-mode-hook 'flycheck-mode)))

設定が済んだら、Emacsを起動してM-x elpy-configでElpyがうまく動いているか確認できる

Elpy Configuration

Emacs.............: 26.3
Elpy..............: 1.32.0
Virtualenv........: None
Interactive Python: python 3.7.5 (/home/xxx/.pyenv/shims/python)
RPC virtualenv....: .pyenv (/home/xxx/.pyenv)
 Python...........: python 3.7.5 (/home/xxx/.pyenv/shims/python)
 Jedi.............: 0.15.2
 Rope.............: 0.14.0
 Autopep8.........: 1.4.4
 Yapf.............: 0.29.0
 Black............: 19.10b0
Syntax checker....: flake8 (/home/xxx/.pyenv/shims/flake8)

Emacsでcompanyを使う

company

Emacsの補完用パッケージ。今までauto-completeを使っていたが、elpyはcompanyを使うようなので乗り換えた。設定が少し難しかったがなんとか便利に使えるようになった。

設定

インストールはpackage.elを使えば良い。use-packageを使っているのでその設定。

;;; company (melpa-stable)
(use-package company
  :ensure t
  :pin melpa-stable
  :demand
  :bind (("<tab>" . company-indent-or-complete-common)
         :map company-active-map
         ("C-p" . company-select-previous)
         ("C-n" . company-select-next))
  :config
  (global-company-mode)
  (setq company-idle-delay 0)    ; 遅延なし
  (setq company-selection-wrap-around t)    ; 候補の最後の次は先頭に戻る
  (setq completion-ignore-case t)
  (setq company-dabbrev-downcase nil)
  (setq company-backends '((company-capf company-dabbrev)
                           ;;company-bbdb
                           ;;company-eclim
                           company-semantic
                           ;;company-clang
                           ;;company-xcode
                           ;;company-cmake
                           company-files
                           (company-dabbrev-code company-gtags
                                                 company-etags company-keywords)
                           ;;company-oddmuse
                           )))

tabキーにcompany-indent-or-complete-commonを設定しておくと、補完するときは補完で、インデントするときはインデントしてくれるので便利。

補完の候補の選択をC-pC-nに変更。

いちばんややこしいのがcompany-backendsの設定。デフォルト設定では、カレントバッファに書いた単語などを補完してくれない。companyではcompany-backendsで指定されたバックエンドを前から順番に探し、一致した?バックエンドを使うらしい。

例えばinit.elなどを編集する時、elispなどのプログラミングで使うバックエンド(company-capf)が選択されて、カレントバッファの語句を動的に補完するバックエンド(company-dabbrev)が使われない。これは使いにくいので上記のように変更した。カッコで(company-capf company-dabbrev)のようにして、リストの先頭にもっていった。カッコでくくると一つのバックエンドのように扱ってくれるので、こうしておくとバッファの語句もプログラミング言語予約語なども補完候補になる。デフォルトで設定されていたよくわからないバックエンドはコメントアウトしておいた。

Emacsのバッファ内絞り込み検索 helm-swoop

インストール

package.elでmelpa等から。

設定

use-packageを使った設定

;;
;; helm-swoop (melpa-stable)
;;
(use-package helm-swoop
  :ensure t
  :pin melpa-stable
  :after helm
  :bind ("M-i" . helm-swoop))

helmより後に設定されるようした。M-ihelm-swoopを実行できるようにも設定。

ちなみに、デフォルトの設定でもisearchで検索中にM-iでhelm-swoopに切り替わる。

使い方

helm-swoopを実行すると、いつものhelmのように、バッファ内で絞り込み検索ができる。

さらに絞り込んだあとに、画面上に表示されるようにC-c C-eと打つと、絞り込んだ行だけのバッファを編集することができて、置換などがやりやすい。編集が終わったらC-x C-sで編集を元のバッファに反映できる。反映せずにキャンセルもできるので編集が便利になる。

JupyterLabのインストールと設定

目次

JupyterLabのインストール

pipでインストールするだけ。

$ pip install jupyterjab

拡張機能を使うならnode.jsというかnpmが必要なのでこれもインストールしておく
ちなみにこれらはPythonではなくJavascript関係。

Macの場合、homebrewからインストールできる。ググるとnodebrewをインストールしてバージョン管理する方法がいっぱい出てくるが、 そこまでしたくないので、普通にインストールした。

brew install node

使い方

jupyter notebookと同じで、

$ jupyter lab

と打つだけで、ブラウザが起動する。手動でlocalhost:8888に繋いでもいい

設定

ダークテーマ

Setting --> JupyterLab theme
JupyterLab Darkを選択

フォント、行番号、codefolding

Setting --> Advanced Settings Editor --> Notebook --> User Preferences

フォントをRictyに、行番号とcodefoldingをtrueに変える

{
    "codeCellConfig": {
        "fontFamily": "Ricty",
        "fontSize": 18,
        "lineNumbers": true,
        "codeFolding": true
    }
}

Extension Managerを利用可能にする

npmが必要なので事前にnode.jsなどをインストールしておく
Setting
Enable Extension Managerにチェック
これで一番左端のジクソーパズルみたいなアイコンを選択すると拡張機能が簡単にインストール可能

拡張機能

@jupyterlab/toc

目次を表示できる。jupyter notebookでも便利なので使っていた。

@lckr/jupyterlab_variableinspector

github.com

これをインストールして、ノートブックで右クリックしてOpen Variable Inspectorを選ぶと 変数名や代入されている値の一覧を出してくれて、めちゃくちゃ便利。

Ubuntu 18.04 LTS にEmacsをインストール

Ubuntuを18.04LTSにアップグレードして、Emacsを普通のsudo apt install emacsでインストールしたらバージョンは25だった。最新は26だったけれど、まあいいかと思って使っていたら、パッケージのインストールで

Failed to verify signature archive-contents.sig:

のようなエラーが出てうまくいかなかった。解決策もググると出てきて

elpa.gnu.org

elpa-keyring-updateをインストールすればいいらしいのだが、それもうまくいかなかった。それに起動したemacsのウィンドウサイズがやたらでかかったり、何かうまくいかないことも多いのでemacs 25は消して、最新のemacs 26を入れることにした。

emacs 26はPPAで公開されている。

$ sudo add-apt-repository ppa:kelleyk/emacs
$ sudo apt-get update
$ sudo apt-get install emacs26

これでエラーも出なくなった。

Emacsでneotreeを使う

インストール

packageを使ってmelpaからインストールできる。

設定

(require 'neotree)
(global-set-key [f8] 'neotree-toggle)  ; F8でトグル
(setq neo-autorefresh nil)        ; ルートディレクトリを自動更新しない
(setq neo-smart-open t)           ; neotreeを開いた時のカレントファイルのディレクトリを表示する
(setq neo-show-hidden-files t)    ; 隠しファイルをデフォルトで表示

F8でディレクトリツリーを開いたり閉じたりできる。