Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Edit with Emacs(Chrome版It's All Text!的な)を使ってtextareaをVimで編集する

$
0
0

Edit with EmacsというChrome拡張とローカルに立てたサーバを使って、textareaをエディタで編集できるようにする。

MacとVimを使った設定方法を書いていくが、Windowsと他のエディタでもできるはず。

まずEdit with Emacs - Chrome ウェブストアにある拡張をインストールする。
次に、pythonで書かれたedit-serverをgit cloneする

しかし、これだと日本語を適切に扱ってくれないので、修正した

を使うか、

のように修正する。

edit-serverはデフォルトでエディタはgvim -fを使い、ポート番号は9292を使う。このままでいいなら

$ /path/to/edit-server

で起動する。ここでedit-serverはディレクトリではなくリポジトリに入っているファイル。起動時に

WARNING: env_importer not loaded - filters disabled

がでるが、これは気にしなくていい。

起動したら、textareaの右下にあるeditボタンを押せば、gvimが立ち上がり編集可能となり、保存すると内容がtextareaに反映される。fileencodingがutf-8でないと気はutf-8に変更しよう。

set fileencoding=utf-8

gvim以外を使いたい場合は環境変数EDIT_SERVER_EDITORを変更する。PATHに入っているか、絶対PATHで設定する必要あり。

--portでポート番号を変更することもできる。ポート番号を変更する場合はEdit with EmacsのオプションのConfigurationのポート番号も合わせて変更する。

エディタをemacsclient、ポート番号9293を使う例。

$ EDIT_SERVER_EDITOR='emacsclient' /path/to/edit-server --port 9293

ここでemacsを例にあげたが、emacsの場合はelispで設定できるのでedit-serverは必要ない(EmacsWiki: Edit with Emacs)。

また、エディタの立ち上げ方法はEdit with Emacsのオプションで幾つか設定できる。

PC起動時に有効にする

毎回コマンドラインからedit-serverを立ち上げるのは面倒なので、LaunchAgentsを設定をする。

~/Library/LaunchAgents/edit-server.plist
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plistversion="1.0"><dict><key>Label</key><string>edit-server</string><key>ProgramArguments</key><array><string>sh</string><string>-c</string><string>
                export EDIT_SERVER_EDITOR="/Applications/MacVim.app/Contents/MacOS/gvim -f";
                python
                $HOME/src/github.com/tmsanrinsha/edit-server/edit-server
            </string></array><key>OnDemand</key><false/><!-- <key>StandardOutPath</key> --><!-- <string>/Users/tmsanrinsha/logs/edit&#45;server.log</string> --><!-- <key>StandardErrorPath</key> --><!-- <string>/Users/tmsanrinsha/logs/edit&#45;server&#45;err.log</string> --></dict></plist>

環境変数を設定するためにsh -cで囲んでいる。以下のコマンドを実行しているのと同じ。

$ sh -c "export EDIT_SERVER_EDITOR=\"/Applications/MacVim.app/Contents/MacOS/gvim -f\"; python $HOME/src/github.com/tmsanrinsha/edit-server/edit-server"

gvimがPATHに入ってないようなので、絶対パスで指定している。$HOMEは使えるようだ。
StandardOutPath, StandardErrorPathはデバッグ用。うまくいかない時はここのコメントを外す。ファイルパスの部分は自分の環境に合わせる。ここでは$HOMEなどの環境変数は使えない。

$ launchctl load ~/Library/LaunchAgents/edit-server.plist

で設定を読み込む。editボタンでgvimが立ち上がるかを確かめる。成功している場合は次回からはPC起動時にedit-serverが立ち上がる。

立ち上がらない場合はedit-serverのプロセスの確認や、ログの確認などを行う。

プロセスがない場合は起動時に失敗している可能性がある。sh -c ...のコマンドを直接実行して失敗しないか、xmlの書き方が間違ってないかを確かめる。xmlのチェックは

$ plutil -lint  ~/Library/LaunchAgents/edit-server.plist

でできる。xmlの変更を行った場合はunloadしてからloadする。

$ launchctl unload ~/Library/LaunchAgents/edit-server.plist
$ launchctl load ~/Library/LaunchAgents/edit-server.plist

補足

pythonのエンコード

元々のコードだと

UnicodeDecodeError: 'ascii' codec can't decode

がでた。

self.wfile.write(contents.encode('utf-8'))

という箇所で失敗している。

.encode('utf-8')はunicode文字列をutf-8でエンコードしたstr文字列に変換するメソッドだが、contentsがstr文字列なため(これはtype(contents)で確認した)pythonが良きに計らって、unicode文字列型に変換しようとし、デフォルトのasciiでデコードしようとして失敗しているようである。contentsは元々utf-8でエンコードされたstr文字列なのでこの変換はいらず、

self.wfile.write(contents)

でうまくいく。

以下を参考にした。

.pyc

修正する仮定で.pycというキャッシュファイルができて、うまく反映できなかった。.pycファイルを作成させない方法メモ - かせきのうさぎさんによると-Bオプションを使うと、.pycを作らなくなるので、つけて修正していた。

$ python -B /path/to/edit-server

[python] 細かすぎて伝わりにくい、Pythonの本当の落とし穴10選 | 私の小岩ホッチキスによるとタイムスタンプが.pyのタイムスタンプが更新されていたら、再度.pycを作り直すらしいが……。

LaunchAgentsでの環境変数の設定

LaunchAgentsの環境変数の設定はHowTo: Set an Environment Variable in Mac OS X - launchd.plist - Dowd and Associatesに書いてある方法で設定が可能で、$ launchctl loadした後はうまくいったが、PCを再起動するとうまくいかなくなった。plistの読み込み順に問題があるのかも。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>