Macのghci上でCtrl+yを入力するとsuspendされる
MacのアプリケーションではCtrl-Yはヤンクに割り当てられていることが多いが,Haskellの対話環境であるghciを使っているときに,Ctrl-Yがおかしな動作をすることに気づいた.
$ ghci
Configuring GHCi with the following packages:
GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /private/var/folders/5q/q2ghsy6s29z88zqbtthn1x5w0000gn/T/ghci57891/ghci-script
Prelude> -- ここでCtrl-Yを押...
vim-surroundで文字列を括弧で囲むときに空白をつけない方法
普段vim-surroundを使っているが,括弧をつけるときに選択した文字列の間にスペースが入ってしまうのを解決する方法があったのでメモする.
先に結論
vim-surroundをインストールした環境では,選択モードに入ってSを押した後,
bで(
Bで{
rで[
aで<
をスペースなしで選択部分を囲むことができる.
他にも,
tで任意のタグ (<でもOK)
sでスペース (スペースでもOK)
pで空行
lでLatexのEnvironments (\begin{foo} ~ \end{foo}のやつ)
で囲むことができる.
括弧を削除するときは,対応する括弧の中に入って
ds( (括弧の種類は消したいものに対応) と打てばよ...
vimでsnippetのインデント深くするときはハードタブじゃないとダメ
問題
vimのneosnippetを使っているときに,インデントが上手く動作しない場合があった.
snippet initial
options head
#include <iostream>
int main(int argc, char const* argv[])
{
${1}
${2}
${3}
return 0;
}
のように書いて,snippetを起動させると以下のように,
一つ目のplaceholderより下のインデントでおかしくなる部分が出てしまう.
解決策
ググってみたところ,docsのここを見ろという内容のissue1を発見した.
...
`show $ head [1, 2]`は良くて`show . head [1, 2]`がエラーになる理由
Haskellでプログラミングの問題を解いていて,.だとエラーになるけど$に変えてみるとコンパイルが通る,という状況に何度か出くわした.理由を調査したのでメモする.
現象
> show . head [1, 2]
<interactive>:15:1: error:
• Non type-variable argument in the constraint: Num (a1 -> a)
(Use FlexibleContexts to permit this)
• When checking the inferred type
it :: forall a a1. (Num (a1 -> a), Show...
.gitignoreに拡張子なしのファイルを登録する
この前gccでコンパイルした実行ファイルを無視するために,拡張子がないファイルだけをgitの管理対象から外したいと思ってやり方を調べたのでメモする.
How do I add files without dots in them (all extension-less files) to the gitignore file? にあるStackoverflowの回答によると,以下のように.gitignoreなどのファイルに記述すれば (or 変数に値を入れれば) 実現できると書いてあった.
*
!*/
!*.*
ただし,上の記述は先頭に加えないと動作しない (後勝ちなのでこのルールで前のルールが全て無効になってしまう).
また,2行目は!/**/と書いてもOK.
このルールは...
bashのforループのin句は省略できる
bashで配列内にある要素が存在しているか確認するための関数を書こうと思って,stackexchangeとかにあるかなと思って見てみたところ,見慣れないforの使い方があったのでメモする.
containsElement () {
local e match="$1"
shift
for e; do [[ "$e" == "$match" ]] && return 0; done
return 1
}
上の関数の使い方は以下の通り.
$ array=("something to search for" "a string" "test2000")
$ containsElement "a string" "${array[@]}"
$ echo ...
envコマンドについて
pythonスクリプトの1行目に#!/usr/bin/env pythonとかを書くが,envコマンドが何をやっているのかいまいちわかっていなかった.のでメモする.
まず,envコマンドをそのまま実行すると,環境変数の一覧が見れる.
$ env
XDG_SESSION_ID=214
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
...(中略)...
OLDPWD=/home
また,envの後に引数としてコマンドを指定すると,${PATH}を頭から順に見ていき,指定したコマンドを実行したところでそいつを実行する.(ようだ)
そのため,#!/usr/bin/env pythonが頭に書いてあるスク...
ポインタのキャストがわかりにくい
この前,callback関数についてちょっと調べようと思ってWikipediaのページのコードを見ていたが,ポインタ変数への代入部分でハマったのでメモする.
コールバックの例のコード (C言語):
#include <stdio.h>
/* Library code */
int traverseWith(int array[], size_t length,
int (*callback)(int index, int item, void *param),
void *param)
{
int exitCode = 0;
for (int i = 0; i < length;...
48 post articles, 6 pages.