トップページunix
984コメント289KB

Vim Part25 [転載禁止]©5ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2015/03/30(月) 20:04:42.55
Vim 6以降に関する話題、Part24です。
http://www.vim.org/

前スレ
Vim Part24
http://peace.2ch.net/test/read.cgi/unix/1413122189/

関連情報は>>2-6あたり
0710名無しさん@お腹いっぱい。2015/10/27(火) 20:54:35.57
横からだけど、とりあえずLANG=Cに逃げるとか。
そんで se nocp enc=utf8 してなんとかなるといいなあ。
0711名無しさん@お腹いっぱい。2015/10/27(火) 21:18:11.94
vimに限らず日本語は入力できるの?
0712名無しさん@お腹いっぱい。2015/10/27(火) 21:47:06.48
vim emacsともに日本語できるよ
vimのfや:perldoなども日本語対応
0713名無しさん@お腹いっぱい。2015/10/28(水) 13:16:02.43
>>710
LANG=C でも set encoding=utf-8 をvimrcに書くと化けました。
ただ、vimrcに書かずにvim起動後に :set encoding=utf-8 を打つと化けなかったです。

ここじゃなくてfedoraのスレで聞いたほうが良いんですかね?
0714名無しさん@お腹いっぱい。2015/10/28(水) 13:48:06.39
LANG=ja_JP.UTF-8
0715名無しさん@お腹いっぱい。2015/10/28(水) 13:56:33.41
export $LANG
0716名無しさん@お腹いっぱい。2015/10/28(水) 13:59:48.50
>>714,715
>>709がその状態です。
0717名無しさん@お腹いっぱい。2015/10/28(水) 17:33:55.18
powerline系のなにか動いてないのこれ
0718名無しさん@お腹いっぱい。2015/10/29(木) 01:42:51.97
あれっと思ったら
/フルパス/vim -N -u NONE
するでござるよ。
0719名無しさん@お腹いっぱい。2015/10/29(木) 10:24:41.57
インデントなどの連続したスペースでのカーソルの移動をsmarttab,expandtabの挿入削除と同じような挙動にする方法を教えてください
0720名無しさん@お腹いっぱい。2015/10/29(木) 11:04:37.73
>>719
インサートモードならこの辺のキーを使う
:h i_ctrl-t
:h i_ctrl-d
:h i_ctrl-f
0721名無しさん@お腹いっぱい。2015/10/29(木) 11:32:35.21
mapclear系コマンドを全て実行してからvimrcを読み込み直すと
vimrcから読み込ませたプラグインのkeymapが効かなくなるんですがどうしてですか?
vimrcを読み込み直すんだからkeymapが再設定されるはずだと思うんですがですか?
0722名無しさん@お腹いっぱい。2015/10/29(木) 12:24:08.83
ヴィジュアルモードで範囲選択してから`>と`<を押しても範囲選択の最初と最後に飛びません
0723名無しさん@お腹いっぱい。2015/10/29(木) 12:30:09.10
>>722
選択中範囲の先頭と末尾に飛ぶのは`>と`<じゃなくてoとOだべ
`>と`<は「前回選択してた」範囲の先頭と末尾に飛ぶやつ
:h v_o
0724名無しさん@お腹いっぱい。2015/10/29(木) 12:52:02.96
>>723
そういうことでしたかありがとうございます
0725名無しさん@お腹いっぱい。2015/10/29(木) 17:31:30.45
function s:a()
return 'a'
endfunction

function s:b()
let l:s = call s:a()
endfunction

s:b()を実行すると
E121: 未定義の変数です: call
E15: 無効な式です: call s:a()

ってなります。どう書けば治りますか?
0726名無しさん@お腹いっぱい。2015/10/29(木) 21:12:56.45
>>725
call いらんよ
let s = s:a()
0727名無しさん@お腹いっぱい。2015/10/29(木) 22:14:41.71
代入するときだけcallつけなくていい仕様なんすね
0728名無しさん@お腹いっぱい。2015/10/29(木) 23:52:43.06
>>725
そう、Visual Basic と同じだよ…って知らんかww
0729名無しさん@お腹いっぱい。2015/11/03(火) 19:27:19.92
【質問1】
モード別にキーマップのヘルプを引く方法を伝授してください
例えばvirtual modeで複数行選択した時のShift+I

【質問2】
ヘルプを引くときにalt、ctrl、shiftにアルファベットを足したものはどうやってヘルプで引いたらで引いたら良いですか?
例えばctrl+shift+何かみたいなのとか
0730名無しさん@お腹いっぱい。2015/11/03(火) 20:25:59.02
C-v の後にC-l など入力するとそれ自体を入力できる
ヘルプの種類は接尾語としてi_ v_
:h i_
:h v_
0731名無しさん@お腹いっぱい。2015/11/03(火) 22:47:32.00
できましたどうも
0732名無しさん@お腹いっぱい。2015/11/03(火) 23:36:38.31
へえ、生の制御文字でヘルプ引けるなんて初めて知った。
今まで補完を頼りに h i_ctrl-x_ctrl-u とかしてたわ。
0733名無しさん@お腹いっぱい。2015/11/05(木) 17:43:30.22
プラグイン固有のキャッシュファイルってどこに作ればいいんですか?
0734名無しさん@お腹いっぱい。2015/11/05(木) 18:36:25.57
/var/cache
0735名無しさん@お腹いっぱい。2015/11/06(金) 04:46:31.83
~/.cache
0736名無しさん@お腹いっぱい。2015/11/06(金) 10:38:10.19
BNKRGがemacs使いつつvim馬鹿にした
0737名無しさん@お腹いっぱい。2015/11/08(日) 00:55:19.57
vimgrepに渡す正規表現パターン
/〜/j
このjについて調べたいんですがドキュメントのどこを見ればいいのか教えてください
0738名無しさん@お腹いっぱい。2015/11/08(日) 02:07:33.62
>>737
:h :vimgrep
0739名無しさん@お腹いっぱい。2015/11/08(日) 03:14:52.80
vimscriptで各ウィンドウのウィンドウローカル変数を、アクティブなウィンドウを変更せずに調べることってできませんか?

for window in vim.windows:
__vim.command("%swincmd w" % window.number) # ←ここがクソ
__if vim.eval("exists('w:unko')") == 1:
____print("this is unko window")
みたいなのを実際にカレントウィンドウを変更せずに調べたいです
0740名無しさん@お腹いっぱい。2015/11/08(日) 07:00:15.60
>>739
:h getwinvar()
0741名無しさん@お腹いっぱい。2015/11/08(日) 12:05:36.16
>>740
ありがとう…優しいおじさん…!
getwinvar(n, "unko")でループ回してうまくいきました
0742名無しさん@お腹いっぱい。2015/11/08(日) 17:38:27.05
perlとかluaとか使ってスクリプト書いた場合ってやっぱり呼び出し時にオーバーヘッドってどのくらいあるか確認したいんですが
どうやって調べればいいのか教えてください
0743名無しさん@お腹いっぱい。2015/11/09(月) 23:28:07.60
2〜3行目を、1行目と連結したいから
1行目で2<S-j>したのに3行目が連結されません

<S-j>
1<S-j>
2<S-j>
これはどれも2行目しか連結しません
3<S-j>って書いたら2〜3行目を1行目に連結できましたが何故2<S-j>ではできないのでしょうか?
0744名無しさん@お腹いっぱい。2015/11/09(月) 23:28:26.65
:profileとか
0745名無しさん@お腹いっぱい。2015/11/10(火) 07:31:46.25
>>743
helpに答え書いてあるよ
:h J
0746名無しさん@お腹いっぱい。2015/11/11(水) 15:12:45.02
>>743
こういう直感に反した動きをするところは自分でソース書き直しちゃえばいいんじゃないの
0747名無しさん@お腹いっぱい。2015/11/11(水) 15:18:30.31
pull request
0748名無しさん@お腹いっぱい。2015/11/11(水) 19:10:08.67
help読んだ?
1〜3行ビジュアル選択してJすれば今の仕様も納得すると思うんだが
0749名無しさん@お腹いっぱい。2015/11/11(水) 19:59:19.36
カウントの解釈が特別なんだな
いっつもJJとかでやるから知らんかった
0750名無しさん@お腹いっぱい。2015/11/11(水) 21:51:35.57
1万行をいっぺんにインデントするのに時間がかかるんですがこれ使用ですか?
0751名無しさん@お腹いっぱい。2015/11/11(水) 23:45:22.59
はい
0752名無しさん@お腹いっぱい。2015/11/12(木) 08:40:25.20
一万行処理するvimさんの気持ちも考えてあげろよ
0753名無しさん@お腹いっぱい。2015/11/12(木) 17:04:42.11
:!lsみたいに外部コマンドを実行すると、シェルの画面になって何かキーを押さないとvimに戻れないんですが
この画面を表示させない方法ありませんか?
0754名無しさん@お腹いっぱい。2015/11/12(木) 17:19:09.91
>>753
Windowsだったらこれ
:h :!start
0755名無しさん@お腹いっぱい。2015/11/12(木) 17:29:39.92
つまりWindows以外だとvimprocを使うしかないってことですか?
0756名無しさん@お腹いっぱい。2015/11/12(木) 17:39:13.31
:sil !{command}
で、どうかなっと
0757名無しさん@お腹いっぱい。2015/11/12(木) 17:58:53.07
silentってメッセージを非表示にするやつですねよ
外部プログラムに対してsilentすると、背景と文字が黒になってしまい画面がおかしくなりました
vim -u NONEで試しました
0758名無しさん@お腹いっぱい。2015/11/12(木) 18:12:30.58
>>755
:h system()
0759名無しさん@お腹いっぱい。2015/11/12(木) 20:43:00.83
コマンドによってはエラーが買えるのでエラーが取れないsystem()はつかいたくありませんがこれで妥協します
0760名無しさん@お腹いっぱい。2015/11/13(金) 08:40:35.28
エラーは検出できるんだよなぁ
0761名無しさん@お腹いっぱい。2015/11/13(金) 11:47:39.00
>>759
:h system() の少し下に書いてありますよ

> The resulting error code can be found in |v:shell_error|.
> This function will fail in |restricted-mode|.
0762名無しさん@お腹いっぱい。2015/11/17(火) 17:37:32.00
colorschemの見栄えを調節したいんですが
言語別に全ての色を確認できるコードはありませんか?
0763名無しさん@お腹いっぱい。2015/11/18(水) 12:57:06.30
highlight StatusLine ctermfg=1 ctermbg=2
StatusLineに定義したctermfgとctermbgの色が入れ替わって反映される
背景色が1で文字色が2になるのはどうして?
0764名無しさん@お腹いっぱい。2015/11/18(水) 14:48:06.10
>>763
その行の後ろに cterm=NONE
って足してみて
:h highlight-cterm
0765名無しさん@お腹いっぱい。2015/11/18(水) 17:54:52.03
E149: 残念ですが :highlight-cterm にはヘルプがありません

ああデフォルトでreverseが設定されてるからか
0766名無しさん@お腹いっぱい。2015/11/18(水) 18:59:50.48
>>765
打ち間違えとるよ
high〜の直前には : は無いよ
0767名無しさん@お腹いっぱい。2015/11/18(水) 21:36:33.97
あっ、ほんとだ気づかなかった
0768名無しさん@お腹いっぱい。2015/11/22(日) 17:43:17.08
function! s:Func()
let s:ary = [1, 2]
endfunction

Func内でのみ有効なaryの値を外部ファイルで管理したいんですがどのような方法がありますか?
0769名無しさん@お腹いっぱい。2015/11/22(日) 18:20:43.31
みんなはバッファの切り替えとか一覧とかどうしてる?
emacsならC-xC-bで一覧表示して選択だけど
viだと:ls!で一覧表示で、:b[バッファ番号]で選択だけど
みんな一々バッファ番号で選択してるの?
0770名無しさん@お腹いっぱい。2015/11/22(日) 18:45:50.63
helm-buffer <-> easy_buffer
0771名無しさん@お腹いっぱい。2015/11/22(日) 21:13:39.04
>>769
私はctrlp.vimですね
0772名無しさん@お腹いっぱい。2015/11/22(日) 21:14:17.80
>>768
ファイルの読み書きならwritefile / readfileかね
0773名無しさん@お腹いっぱい。2015/11/22(日) 22:19:19.23
phpでいうincludeみたいなこと出来ないかなと思っていろいろsource xxx.vimみたいにしたけどだめでした
ファイルへの読み書きしかなさそうですね
0774名無しさん@お腹いっぱい。2015/11/22(日) 23:20:08.04
ubuntu32bit 14.04LTSでの話です(厳密にはwattosR9)
gvimをインストールしたのですがカーソルがいきなり動かなくなったり予想外のところで動いたりとにかく不安定な動作をします
gtk、gnomeどちらも試しました プラグインも一時的に無くしてます、アンインストールやpc再起動も試してますが直りません
vimは問題なく動きます
どなたか解決策をお教えください
0775名無しさん@お腹いっぱい。2015/11/23(月) 03:02:31.42
>>773
phpのincludeなら:sourceだと思うが
0776名無しさん@お腹いっぱい。2015/11/23(月) 07:26:51.94
エディタにしろブラウザにしろ、複数画面操作は
今やタブ切り替えが主流だと思うのだけど
このエディタはずっとバッファ切り替えが主流なのね
タブは後から出てきた文化だから、古いVimには
適当な定義キーが空いていないという事情があるのかな
0777名無しさん@お腹いっぱい。2015/11/23(月) 10:20:12.77
考えてみるんだここまで来てわざわざ主流に合わせる必要もないでしょ、私は分割で
は無く、タブを切り替える使い方を主としてる。当然同じfileを開いてる場合の話、
キーバインドはデフォルトを守る必要は無いし、上下の移動の段階から変更してる。
無いキーバインドはcommandを作って新しく割り当てる。

そういう拡張をを始めだすと、emacsかvimの二択のような所がある、emacsはすぐ壁
にぶつかって定義されてるelispを初心者に追わせていく無理ゲーになるから時間か
かる、`その点'はvimのほうが楽、設定の敷居は何倍か低い。
0778名無しさん@お腹いっぱい。2015/11/23(月) 11:06:14.64
sourceじゃなくて、こういう事じゃないの。
let a=readfile("filename")
let a=readfile("cat filename")
0779名無しさん@お腹いっぱい。2015/11/23(月) 11:07:23.51
ごめん二行目はsystemの間違い。
0780名無しさん@お腹いっぱい。2015/11/23(月) 11:18:11.22
>750>>752
あんちゃん、vimの気持ち考えたらそっとしとくのが一番だろ!
(伝わらないだろうな。。)
0781名無しさん@お腹いっぱい。2015/11/23(月) 11:36:49.97
>>742
ここの「http://vim-jp.org/vimdoc-ja/eval.html」 以下部分を読むと良いよ。
> reltimestr({time}) *reltimestr()*
> 時刻値{time}を表現する文字列を返す。秒、ドット、マイクロ秒とい
0782名無しさん@お腹いっぱい。2015/11/23(月) 12:35:33.45
オムニ補完すると1番目が選択状態になりますが
何も選択しない状態にするにはどう設定したらいいですか?
0783名無しさん@お腹いっぱい。2015/11/23(月) 14:39:00.61
>>782
set cot-=noselect

noinsertという指定項目もある
0784名無しさん@お腹いっぱい。2015/11/23(月) 14:39:40.86
間違えた
set cot+=noselect
0785名無しさん@お腹いっぱい。2015/11/23(月) 14:49:57.93
>>783-784
これ指定したらうまくいきました。ありがとうございました。
ヘルプ見て詳しく調べようと思ったんですが
:h cotで開くoptions.txtにはmenu、menuone、longest、previewしか載っていません
noselectとnoinsertはヘルプのどこを見たらいいんでしょうか?
0786名無しさん@お腹いっぱい。2015/11/23(月) 15:05:13.52
>>785
Vimを新しめのバージョンにすれば表示されると思います。
日本語訳を見てます?
日本語訳は未だ反映されていないので
:h 'completeopt'@en
で参照下さい。
0787名無しさん@お腹いっぱい。2015/11/23(月) 15:08:22.09
日本語訳で見てました
英語のほうだと載ってました
日本語訳って常に最新だと思ってました
英語が出来ないとつらいですね。。。
0788名無しさん@お腹いっぱい。2015/11/23(月) 18:00:00.75
csv形式の文字列をsplitしたいんですが
例えばこんな文字列
'a\,b,c'
'"a,b",c'
'"a\,b",c'

echo split('"a\,b",c', ',')
['a,b', 'c']と2つに分かれて欲しいんですが3つに分かれます
何かよい方法ございますか?
0789名無しさん@お腹いっぱい。2015/11/24(火) 07:29:01.12
そもそも根本的なお勧めな解答をするならば
糞データのほうを直したほうが良い。
0790名無しさん@お腹いっぱい。2015/11/24(火) 22:39:57.17
その糞データを直すためにvimを使おうってんじゃ?
0791名無しさん@お腹いっぱい。2015/11/24(火) 23:19:13.51
糞でもなんでもない普通のcsvじゃん
手軽にデータ整形ならvimじゃなくてスクリプト書いてやった方がいいんじゃね
0792名無しさん@お腹いっぱい。2015/11/24(火) 23:51:10.22
RFC4180にはカンマをバックスラッシュでエスケープするなんて仕様は無いってことだろな
0793名無しさん@お腹いっぱい。2015/11/25(水) 02:24:25.19
真面目にやるなら、パーサ使うとかだろうけど、
とりあえずなら、一旦、別の文字に退避とかすればいいんじゃない?

こんな感じで、

function! MySplit(str)
let vals = []
for val in split(substitute(a:str,'\\,','@@@','g'),',')
let vals += [ substitute(val, '@@@','\\,','g') ]
endfo
return vals
endf

俺の、人生初 vim function だから、出来はよくわからないけど、
とりあえず動いた。…
こんなんでも嬉しいな。
0794名無しさん@お腹いっぱい。2015/11/25(水) 10:44:48.47
結局データ直す方向か。文句は言うのに。
ちゃんと動くかは知らないし文句言われ様が短くもしないし直さない以上。
cat csv |xargs -i printf '%s\0' {} \
|sed -n 's#"[^"]*[^\],*"#&\n#; :start; s#\(".*[^\]\),\(.*"\n\)#\1\\,\2#;
t start; P; D' \
|sed ':start; N; $!b start; s#["|\n]##g'|xargs --null -i echo {}

cat csv |xargs -i printf '%s\0' {} \
|sed -n 's#"[^"]*[^\],*"#&\n#; :start; s#\(".*[^\]\),\(.*"\n\)#\1\\,\2#;
t start; P; D' \
|sed ':start; N; $!b start; s#["|\n]##g'|xargs --null -i echo {} \
|sed 's#\([^\]\),#\1\t#g'|tr -d '\\'|awk -F '\t' '{ print $0 }'
0795名無しさん@お腹いっぱい。2015/11/25(水) 10:53:44.28
悪い間違い。echoじゃないほうがいいかもね。
0796名無しさん@お腹いっぱい。2015/11/25(水) 18:00:42.81
scriptからオムニ補完ってどうやって呼び出せますか?
07977882015/11/25(水) 21:17:42.49
>>789-794
Vimで何でもやろうとする考えを改めます
0798名無しさん@お腹いっぱい。2015/11/26(木) 11:40:48.77
Vimをある程度使っていくと他人が書いたこれしろって記事に興味がなくなる
0799名無しさん@お腹いっぱい。2015/11/26(木) 13:08:52.01
>>797
趣味でやるのはそれはそれで面白いけどね
0800名無しさん@お腹いっぱい。2015/11/28(土) 12:02:50.42
~/.vimrc経由で定義したグローバル変数とグローバル関数を全て削除するやり方ありますか?
0801名無しさん@お腹いっぱい。2015/11/30(月) 06:13:18.84
興味ない事はやらないという自己管理の徹底って重要だなと感じる。
ピンポイントでcで書けばものの数分で書けるコードを分厚い本かって
分厚さがよく似合うprogramで動す。なんだかんだで後者を選択して
しまってきたが、振り返るとやはり時間の無駄だったな。
ここ崩すとどんどん崩れてく。
0802名無しさん@お腹いっぱい。2015/12/01(火) 06:01:04.07
例えば word to word. という羅列があったとします。
eを押していくと、ピリオドの前のdで止まるはずですよね。

ところが私のvimでは、シェルスクリプトファイル(*.sh)の時だけ、
eの動作で一気にピリオドまで飛んでしまうんですけど、

私だけですか?
0803名無しさん@お腹いっぱい。2015/12/01(火) 07:11:50.98
>>802
Windows kaoriya版でもそうなる
スクリプトファイルが特別扱いされているのかな?
0804名無しさん@お腹いっぱい。2015/12/01(火) 08:08:09.76
>>802
シェルスクリプトでは iskeyword に "." が追加されている
そのため "." も「単語の一部」という扱い

sh.vim を見たら "." の追加を止めさせるための設定があったよ
vimrc に
let g:sh_noisk = 1
と書いておけばいい
:h g:sh_isk で説明を読める
0805名無しさん@お腹いっぱい。2015/12/01(火) 12:44:03.56
neovimってそんなにいいの?
0806名無しさん@お腹いっぱい。2015/12/01(火) 12:52:38.09
まずどこに良いって話があったのか
0807名無しさん@お腹いっぱい。2015/12/01(火) 12:59:43.91
>>803-804
報告有難うございます。
なるほど、ちゃんと意図された設定がしてあったのですね。
私は初学者ながらiskeywordのヘルプを引いて、はあ、で、どうすれば・・?
で終わってしまっていました。
素晴らしい解析有難うございます!
勉強になります。
0808名無しさん@お腹いっぱい。2015/12/01(火) 13:02:52.01
東京に対するネオサイタマみたいな感じ
0809名無しさん@お腹いっぱい。2015/12/01(火) 13:41:19.48
>>808
久しぶりにホッコリした
0810名無しさん@お腹いっぱい。2015/12/01(火) 14:45:23.84
>>809
キモッ
■ このスレッドは過去ログ倉庫に格納されています