トップページunix
988コメント268KB

Vim Part21

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。2012/07/16(月) 01:09:05.70
Vim 6以降に関する話題、Part21です。
http://www.vim.org/

前スレ
Vim Part20
http://toro.2ch.net/test/read.cgi/unix/1322212163/

関連情報は>>2-6あたり。
0938名無しさん@お腹いっぱい。2013/03/06(水) 07:51:07.01
んなわけあるか
0939名無しさん@お腹いっぱい。2013/03/06(水) 07:56:32.53
あるよー
どこまで戻せばいいかわからなくなったり
戻しすぎたりするからねー
0940名無しさん@お腹いっぱい。2013/03/06(水) 11:57:01.60
戻しすぎたらCtrl-rすればいいんじゃない


redoのキーアサインってVimっぽくないよね
0941名無しさん@お腹いっぱい。2013/03/06(水) 12:18:59.38
そんなのケースバイケース
0942名無しさん@お腹いっぱい。2013/03/06(水) 14:00:00.26
edとかsed系はアンドウないね。
0943名無しさん@お腹いっぱい。2013/03/10(日) 02:24:00.42
環境変数をバッファに展開、入力する方法はありますか?
0944名無しさん@お腹いっぱい。2013/03/10(日) 06:31:31.41
:put =$home

:h :put
0945名無しさん@お腹いっぱい。2013/03/10(日) 06:32:49.68
いま Vista だった
:put =$HOME
0946名無しさん@お腹いっぱい。2013/03/10(日) 14:42:59.01
ありがとうございます。あってよかったけど、あるのか…
組み込み関数について知った辺りからvimにできないことって
あるのかよって思い始めた
0947名無しさん@お腹いっぱい。2013/03/12(火) 15:49:42.52
ペースト時にインデントを自動で揃えてくれる設定かプラグイン教えてください
0948名無しさん@お腹いっぱい。2013/03/12(火) 16:40:22.56
p=G
0949名無しさん@お腹いっぱい。2013/03/12(火) 17:37:50.32
それだと、ペースト行から下全部じゃないですか?
ペーストした範囲だけインデントを合わせたいです。
0950名無しさん@お腹いっぱい。2013/03/12(火) 18:14:01.22
ペーストしたばかりの範囲を囲む操作があったはず。
nnoremap <expr> gp '`[' . strpart(getregtype(), 0, 1) . '`]'

2chだと空白行がおかしい処理されるので念のため。
http://vim.wikia.com/wiki/Selecting_your_pasted_text
それで範囲囲んで=はどうだ?
0951名無しさん@お腹いっぱい。2013/03/12(火) 18:14:54.27
>>949
vpgv=
ではだめ?
0952名無しさん@お腹いっぱい。2013/03/13(水) 02:59:51.80
=`]
でできるよ
0953名無しさん@お腹いっぱい。2013/03/13(水) 05:52:16.03
あぁ、そこに至れなかった自分が悔しい
にしても =`] ってちょっとかわいいな
0954名無しさん@お腹いっぱい。2013/03/13(水) 12:31:11.65
nnoremap <silent> p p=`]
vnoremap <silent> p p=`]

にしときました。
いくつか回答が出たってことは特にみなさん設定してない?
0955名無しさん@お腹いっぱい。2013/03/13(水) 13:07:18.19
うん。
0956名無しさん@お腹いっぱい。2013/03/13(水) 22:27:59.68
私は=pをそれにしてるな
0957名無しさん@お腹いっぱい。2013/03/21(木) 09:36:32.67
exモードで
:s/before/after
で変換しますが、ここでbeforeやafterを入力するときに入力補完をしたいです。
どうすればいいんでしょうか。
0958名無しさん@お腹いっぱい。2013/03/21(木) 10:19:25.94
何を補完するんだ?
0959名無しさん@お腹いっぱい。2013/03/21(木) 12:29:00.14
行頭でci'で次の''内を削除してinsertになるのに
cibもしくはci(だと()内にいないとダメなのは皆さん気にならない?
0960名無しさん@お腹いっぱい。2013/03/21(木) 14:23:07.78
>>958
テキストに入力されている文字です

例えば
「floccinaucinihilipilification」がエディタ上に入力されていたとして
:s/floccinaucinihilipilification/hogehoge/
ってやる場合に「floccinaucinihilipilification」と入力するのが大変なので
0961名無しさん@お腹いっぱい。2013/03/21(木) 15:53:52.74
カーソル位置に依存した補完あるよ
:h c_ctrl-r_ctrl-f

CTRL-R CTRL-F
CTRL-R CTRL-P
CTRL-R CTRL-W
CTRL-R CTRL-A
について書いてあるけど、キーの押しやすさから、
私は CTRL-R CTRL-F ばかり使っている。
左手一本で ctrl押したまま ra でいいわけだし。
0962名無しさん@お腹いっぱい。2013/03/21(木) 15:54:33.79
しまった
× 左手一本で ctrl押したまま ra でいいわけだし。
○ 左手一本で ctrl押したまま rf でいいわけだし。
0963名無しさん@お腹いっぱい。2013/03/22(金) 00:01:51.26
押しやすさの理由で C-R C-W使ってるわ
0964名無しさん@お腹いっぱい。2013/03/22(金) 13:59:34.78
「vim がオススメ」と言える状況ってなんだろう?

お前ら、最強のテキストエディターは「Mery」で異論はないよな?
http://hayabusa3.2ch.net/test/read.cgi/news/1363874572/

137 :ハイイロネコ(チベット自治区):2013/03/22(金) 04:16:40.42 ID:so/V8PBf0
 vimがイイって言われ使ったけど、使いずれーよ。特に初心者は。
 頑張ってなれようとしたけど、少し触らなくなると、忘れる。
 もう変なのすすめるなよ。
0965名無しさん@お腹いっぱい。2013/03/22(金) 15:08:20.39
コーディング用途なら概ねオススメだろ
作文にでも使おうとしたんじゃないのか、そいつ
0966名無しさん@お腹いっぱい。2013/03/22(金) 16:42:02.30
Vimはすすめられて使うようなもんじゃなくて
命からがらたどりついた砂漠のオアシスみたいなもの
0967名無しさん@お腹いっぱい。2013/03/22(金) 16:56:33.16
初心者に勧めるならまずオペレータとモーション、つーかテキストオブジェクトの組み合わせを説明するわ
これが合理的だと感じられる人ならすぐ使えるようになると思う
0968名無しさん@お腹いっぱい。2013/03/22(金) 18:03:42.36
>>964
中級者くらいにならないとvimのありがたみはわからないから仕方ない
0969名無しさん@お腹いっぱい。2013/03/22(金) 18:12:03.34
a = ('y'~'x')
test = ('z'~'x')
sample = ('A'~'B'+'C')
この3行のそれぞれの最初の括弧の前にfuncをつけ、例えば最初の行なら
a = func('y'~'x')
と、括弧の位置が行ごとにずれている場合でもビジュアルモードで3つ一気に修正したいのですが、これは可能でしょうか?
0970名無しさん@お腹いっぱい。2013/03/22(金) 18:13:32.20
:0,$s/(/func(/
0971名無しさん@お腹いっぱい。2013/03/22(金) 19:30:12.65
:[line-address]s/befor/after/g
の形だな。
0972名無しさん@お腹いっぱい。2013/03/23(土) 18:06:31.98
遅くなりましたが、お二人方ありがとうございます。
無事にうまく修正できました。
0973名無しさん@お腹いっぱい。2013/03/26(火) 01:50:40.82
別に誰に勧められたのでもなく、今じゃ何でもかんでもvimで書いてるけど、
プログラミングでなくても、頻繁に単語や文章を入れ替えたりしながら書くタイプには向いているエディタだと思う。
使う人を選ぶとこはあるのかなという気はする。
0974名無しさん@お腹いっぱい。2013/03/26(火) 05:34:33.02
日本語の文章を打つのには向いてないよね
一応migemoみたいなのはあるんだけど
0975名無しさん@お腹いっぱい。2013/03/26(火) 07:28:32.04
w,e,bが実質使えなくなるからなー
改良するプラグインはあるけどやはり直感的じゃない
英語ならいけるんだろうね
0976名無しさん@お腹いっぱい。2013/03/26(火) 07:54:01.68
Q. Vim は 日本語 の 文章 の 入力 に 使えますか?
A. Vim は このような わかち書き の 文章 の 入力 には 向いていますが、
  通常 の 日本語 の 入力 には 向いて いません。
0977名無しさん@お腹いっぱい。2013/03/26(火) 14:30:36.93
>>961
ありがとうございます。

あとカーソル位置に依存しない補完はないのでしょうか。
インサートモードのctrl+pのような機能をexモードで使いたいので。
0978名無しさん@お腹いっぱい。2013/03/26(火) 14:42:45.91
>>977
command-line mode はいかん?
デフォルトでは、コマンドモードで <C-f>
0979名無しさん@お腹いっぱい。2013/03/26(火) 23:05:33.95
突然ですが、お知恵をください。

ソースのdiffのチェックをするときにvim -R - に差分食わせた後、:vspで縦3分割位して一気に見えるようにしたいのですが、先頭をずらしつつscrollbindまでしたあと、画面単位にページ移動させるにはどうすればよいのでしょうか?

デフォルトのままだと、高さ分しか移動しないので、分割したウィンドウが右から左へ移動するような感じになってしまいます。
0980名無しさん@お腹いっぱい。2013/03/26(火) 23:44:06.64
>>979
縦三分割で60行*3で180行一気にみるぜ!ということ?
私の知らない所で設定があるのかもしれないけどわからん
こんなんどうよ?
function! AwesomeScroll()
execute '0wincmd w'
let h = winheight(0)
let lnum = (h * winnr('$')) + 1
execute 'normal! ' . lnum . 'G'
endfunction
nnoremap <Down> :call AwesomeScroll()<Cr>z<Cr>
0981名無しさん@お腹いっぱい。2013/03/27(水) 17:10:52.31
>>979
内容的にdiffであることは関係なさそうな気がしてるんだけど、
3<C-f>じゃだめ?
0982名無しさん@お腹いっぱい。2013/03/27(水) 17:20:27.17
>>981
概ね良好だと思う
0983名無しさん@お腹いっぱい。2013/03/27(水) 22:27:26.71
>>980
そうです。scrollbindってすぐ壊れてしまうので、編集時には向かないけどみるだけならいいかなと。。。

教えてもらったものはうまくいかなかったのですが、参考にしていろいろしてみたら
:vsp +execute 'normal!'.(line('w$')+1).'Gzt'と

:execute 'normal!'.(line('w0')+(winheight(0)*winnr('$'))).'Gzt'
とすると、いい感じになりました

後者をnnoremapで<C-f>とかに割り当てるにはどうすればよいのでしょうか?
nnoremapに割り当てるとなんか編集モードになってしまいます。

あと、できればかけ算するのではなくウィンドウ指定してline('w$')をとりたいのですがそういうはできますか?
この場合、いちばん右下の行番号がほしいです。
0984名無しさん@お腹いっぱい。2013/03/27(水) 22:36:22.91
>>981
たしかにdiffは関係ないです。
ただタグジャンプとかするとscrollbindってずれてしまうみたいなので、みるだけの代表としてdiffといいました

普通に<C-f>だと折り返しがあるとずれちゃうのですよー
nowrapすればよいだけの話なのですが、なまじいけそうなだけになんか負けた気がして、いろいろやってます。
0985名無しさん@お腹いっぱい。2013/03/27(水) 23:13:39.42
>>984
gj のような感じで、ページ単位でスクロールできればよさそうっぽいけど、ないのかな
0986名無しさん@お腹いっぱい。2013/03/28(木) 00:51:03.47
>>983
いったんそのウィンドウをアクティブにして line('w$')するしかないんじゃないかな
0987名無しさん@お腹いっぱい。2013/03/28(木) 19:12:50.42
お手軽に済ませようと思ったのですけど、ウィンドウを移動するというところであきらめました。

はじめてのスクリプトで調べながらちょこちょことやってみましたが、 けっこういろんなことできるんですね。
途中で目的を忘れて、明らかにオーバースペックになってしまいましたが、できました。
結局、scrollbindなんて使わない方が無難だったという。。。
全部は書き込めなかったので、抜粋

function! NormalizeView()
execute b:start_nr.'wincmd w'
let l:target_bufnr=winbufnr(0)
let l:end_nr = b:start_nr
let l:lnum=line('w$')+1
wincmd w
while winnr() != l:end_nr
if winbufnr(0) == l:target_bufnr
execute 'normal!'.l:lnum.'zt'
let l:lnum=line('w$')+1
endif
wincmd w
endwhile
unlet l:lnum
endfunction

command! PgUp let lnum=line('w0')-1 | :execute(b:start_nr.'wincmd w')| :execute('normal!'.lnum.'zb') | :call NormalizeView()
command! PgDown let lnum=line('w$')+1 | :execute(b:start_nr.'wincmd w')| :execute('normal!'.lnum.'zt') | :call NormalizeView()
nnoremap <buffer> <silent> <C-f> :PgDown<CR>
0988名無しさん@お腹いっぱい。2013/03/28(木) 19:18:23.48
あっ、分割は別に関数作って command! -count=2 Pin1 :call NSplit(<count>) としました。
b:start_nrは 関数の中で設定しています。
コメントいただいた皆さんありがとうございました。

連投失礼しました。
レス数が950を超えています。1000を超えると書き込みができなくなります。