Hatena::ブログ(Diary)

驚異のアニヲタ社会復帰への道

Prima Project

2018-06-16

vim 8.1 にしたら \ の後は / か ? か & でなければなりませんって文句言われるし"Vim: Caught deadly signal ABRT" って言われて突然落ちる

vim 8.0 でvimrc をいい感じにしていたのに、ppa (https://launchpad.net/~jonathonf/+archive/ubuntu/vim) を

sudo add-apt-repository ppa:jonathonf/vim

vim-gnomeインストールすると 8.1 がインストールされるようになっている。

そうすると、いままで 8.0 ではエラーが出ていなかったのに、

\ の後は / か ? か & でなければなりません

って起動時に毎回文句言われるようになった。これは

vim -N

で回避できるらしいが、肝心のスクリプトを書いているときに

Vim: Caught deadly signal ABRT

と言われて突然落ちる。python を書いているときに頻発する。

パッチの問題とか言われているようだが、パッチの当て方がよくわからないので vim 8.0 がapt-get できるようにしたいが、ppa をいくらいじっても 8.1 しか出てこない。

 

こちらのppa (https://launchpad.net/~laurent-boulard/+archive/ubuntu/vim) を使うと

sudo add-apt-repository ppa:laurent-boulard/vim
sudo apt-cache policy vim-gnome
vim-gnome:
  インストールされているバージョン: 2:8.0.1520-1~xenial~lboulard+1
  候補:               2:8.0.1520-1~xenial~lboulard+1
  バージョンテーブル:
 *** 2:8.0.1520-1~xenial~lboulard+1 500
        500 http://ppa.launchpad.net/laurent-boulard/vim/ubuntu xenial/main amd64 Packages
        500 http://ppa.launchpad.net/laurent-boulard/vim/ubuntu xenial/main i386 Packages
        100 /var/lib/dpkg/status
     2:7.4.1689-3ubuntu1.2 500
        500 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
     2:7.4.1689-3ubuntu1 500
        500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

ようやく出るようになった。

 

いやでもやっぱりpython で落ちる。

2018-05-07

Rmd をコマンドでrender したい

rmarkdown を使っているとき、Rstudio ならknitr ボタン、コマンドならrender でRmd ファイルがコンパイルされる。

昔、同僚が「R を開かずにコマンドでrender したいすっね〜」って言っていたのでワンライナーで自作してあげたのだが、いまさらながら自分も欲しくなってきた。

というわけで作る。

.bashrc に関数を定義して、その関数引数にknitr したいRmd を持ってきたらコンパイルされるようにする。

まず、Rmd を引き取ってrender してくれる関数をR で作るが、

a <- commandArgs()[2]
rmarkdown::render(a)
browseURL(gsub("Rmd", "html", a))

という感じにしておく。これはR のバッチモードというかワンライナーモードで、実際に処理したいRmd ファイルはR とその次にコマンド上、書かれるので、文字列を引き取ってrender する。

ついでにできたhtmlブラウザで開くようにする。これをセミコロン ; でつないで一行にしておく。

 

.bashrc では、ただalias を使うと引数をうまく処理できないらしいので、function で関数render を定義して、あとでalias で名付ける。

function render(){
  command R $1 -q -e 'library(rgl);a<-commandArgs()[2];rmarkdown::render(a);browseURL(gsub("Rmd", "html", a))'
}
alias render=render

 

実行は以下の通り。

render hogehoge.Rmd

Rmd にかかれている内容がRmd だけで完結するならばこれでよいが、いろいろ計算している場合にはそのオブジェクトが定義されているR でrender するほうが簡単だと思う。

自分はRmd のテンプレとして冒頭に

```{r eval=TRUE, echo=FALSE, warning=FALSE, message=FALSE, comment=""}
knitr::opts_chunk$set(echo=TRUE, eval=TRUE, warning=FALSE, message=FALSE, comment="",
out.height=480, out.width=480, fig.height=7, fig.width=7)
knitr::knit_hooks$set(rgl = hook_webgl)
# filetitle <- "filename"
# render(sprintf("%s.Rmd", filetitle)); browseURL(sprintf("%s.html", filetitle))
```

としておいて、filetitle だけ変えて# のところをコピペ実行すればそこそこ楽にファイルが生成される。

2018-02-06

Rでパスを省略せずに取得したい

R の場合、HOME ディレクトリは ~ で省略されるが、これを使って例えばR の外部のプログラムを実行させるときの引数にするとき、パスを省略せずに書かないといけない場合がある。

例えば、Python の os.path.expanduser みたいなやつ。

 

関数を探してもすぐには見つからなかったので自作すると、R では ~/Desktop で定義して、$HOME の値をターミナル上から取得して ~ の部分と置き換える、という感じでやる。

と思ってたら dirname 関数でよかった。

wd
[1] "~/Desktop"
gsub("\\~", system("echo $HOME", intern=TRUE), wd)
[1] "/home/user/Desktop"

2018-01-24

vim のESC をjj と っjに割り当てる

vim を使っていて、みんなが思っているのがESC が遠い。

今まではCapsLock にESC を割り当てていたが、ubuntu 16 になってGUI で設定できると言いながらそれで設定しても設定が活きないときがある。

 

というわけでjj にESC を割り当てる人が多い。

no title

しかしこれだけでは、日本語入力のときにjj をしたときに、っj になってしまってESC にならないことがある。

というわけで っj もESC にする。日本語入力の最中なので、っj はコンソール上に表示されるが、これを確定した瞬間にESC になっている。

" ESC to jj
inoremap <silent> jj <ESC>
" 日本語入力で”っj”と入力してもEnterキーで確定させればインサートモードを抜ける
inoremap <silent> っj <ESC>
inoremap <silent> っj <ESC>

 

ESC したら日本語入力から抜けて半角英数入力になっていたらうれしい設定がたぶんこれ。

function! Fcitx2en()
 let s:input_status = system("fcitx-remote")
 if s:input_status == 2
    let l:a = system("fcitx-remote -c")
 endif
endfunction

set ttimeoutlen=150
autocmd InsertLeave * call Fcitx2en()

2018-01-22

RZ4 のSSD を換装する

以前、SX2 のSSDを換装したのだが、RZ4 を最近使っていて、持ち運びに便利だし意外と電池もちが良かったのでSSD を増やそうということになった。

安心と実績のcrucial(安かった)もともと入っていたのはサムスン製。

元々の256GB は再利用する。

 

リカバリーディスクからwindows領域も一応リカバリーしておく。

裏蓋を外すときに、分解判定の銀色シールがあるので、やるなら自己責任で。