facebook twitter hatena line google mixi email
★お気に入り追加


■ このスレッドは過去ログ倉庫に格納されています

  • 1
  •  
  • 2015/01/13(火) 13:05:45.21
主にWindows環境でのVimについてのスレッドです。

本家: http://www.vim.org/
Windows版バイナリ配布: http://www.kaoriya.net/
vim-jp: http://vim-jp.org/
VimWiki: http://vimwiki.net/
ctags 日本語対応版: http://hp.vector.co.jp/authors/VA025040/

名無しのVIM使い(スクリプト) http://nanasi.jp
spanish passion Linux(全オプション) http://www15.ocn.ne.jp/~tusr/
ずんWiki http://www.kawaz.jp/pukiwiki/?vim

関連リンク
UNIX板 Vim Part22: http://peace.2ch.net/test/read.cgi/unix/1365071542/
MacVim 再び: http://anago.2ch.net/test/read.cgi/mac/1133534694/
前スレ vim Part 5: http://anago.2ch.net/test/read.cgi/software/1379912425/

ここまで見た
  • 566
  •  
  • 2017/08/02(水) 23:15:30.89
NodeJSを主に書いているんですが他のファイルを呼び出すパスを書く時に、相対パスを予測変換で表示してくれるプラグインないですか。

ここまで見た
  • 567
  •  
  • 2017/08/03(木) 07:19:41.96
>>566
予測変換が必要ならIMEの入力履歴を使うしかないかな
予測変換じゃないけど/hage/を打つと/hage以下のファイル名が候補で出てくる
neocompleteとか

ここまで見た
  • 568
  •  
  • 2017/08/03(木) 08:18:50.31
禿げは今関係ないだろ!

ここまで見た
  • 569
  •  
  • 2017/08/03(木) 16:22:38.37
高知県四万十市の地名・半家の可能性に賭けろ

ここまで見た
  • 570
  •  
  • 2017/08/13(日) 12:19:33.93
terminalが使えるVimってどこでダウンロードできますか

ここまで見た
  • 571
  •  
  • 2017/08/13(日) 12:39:32.92
git

ここまで見た
  • 572
  •  
  • 2017/08/13(日) 13:06:16.43
現時点ではコンパイル時に有効にしないとターミナルは使えない
使いたいなら自分でビルドするしかない

ここまで見た
  • 573
  •  
  • 2017/08/13(日) 21:35:07.02
めんどくさ

ここまで見た
  • 574
  •  
  • 2017/08/22(火) 21:49:47.40
ビジュアルモードでのキーストローク a( による括弧の選択について質問です。

ビジュアルモード時、下記の3行のテキストのそれぞれ行頭にカーソルがある状態で
a( をストロークすると、3行目で行った場合のみ結果が他の場合と違います。

(())
(a())
(\())

1行目と2行目では、どちらも外側の括弧とその内部を選択します。
しかし3行目では、最初の開き括弧から1つ目の閉じ括弧までが選択されます。

バックスラッシュが影響しているように思えるのですが、これは仕様でしょうか。
3行目でも他と同じように外側の括弧を選択するにはどうすれば良いでしょうか。


ちなみに、3行目の行頭にカーソルがある時、その括弧に対応する閉じ括弧、
つまり2つ目の閉じ括弧が一時的にハイライトされます (もちろん1つ目の開き括弧も)。
これは望んだ通りの挙動です。

しかし、そこで % をストロークすると、1つ目の閉じ括弧にジャンプします。
これは a( の挙動と同様です。

またこれらの望まない挙動は丸括弧に限りません。
% でジャンプできるペア全てに当てはまります。

ここまで見た
  • 575
  •  
  • 2017/08/22(火) 23:10:08.20
>ビジュアルモード時、下記の3行のテキストのそれぞれ行頭にカーソルがある状態で

ビジュアルモードで矩形選択してる状態?
aじゃなくてAを押さないと編集できないよ

ここまで見た
  • 576
  •  
  • 2017/08/22(火) 23:17:28.40
つうか仕様かどうかを2ちゃんで聞いてる時点で(ry
githubのメイン垢で聞くのが恥ずかしいなら捨て垢でも取得してgithub.com/vim-jp/issues/issuesで聞いてきなよ

ここまで見た
  • 577
  •  
  • 2017/08/22(火) 23:26:13.09
syntaxのほうは再現できないけど%の方は再現したから報告してきてね
ここで書き込んでも誰も作業しないよ

ここまで見た
  • 578
  •  
  • 2017/08/23(水) 00:01:06.06
>>575
言い方が悪かったです。

1行目の行頭にカーソルを移してビジュアルモードに入り a( をストロークします。
次に、一旦ビジュアルモードを抜けてから今度は2行目の行頭にカーソルを移し、
もう一度ビジュアルモードに入って a( をストロークします。
3行目でも2行目と同様の事を行います。

この時、3行目で行った結果が1行目や2行目で行った結果と違う、という話です。

ここまで見た
  • 579
  •  
  • 2017/08/23(水) 00:07:43.61
>1行目の行頭にカーソルを移してビジュアルモードに入り a( をストロークします。

↑の時点でインサートモードにいるのに
↓ではビジュアルモードに入ってたことになる

>次に、一旦ビジュアルモードを抜けてから今度は2行目の行頭にカーソルを移し、


丁寧に説明してください
と言うかここで説明しても僕は作業はしませんよ

ここまで見た
  • 580
  •  
  • 2017/08/23(水) 00:08:44.04
バグの可能性があるならちゃんとvim-jpで報告してください
英語が出来るならvim_useで質問してもいいでしょう

ここまで見た
  • 581
  •  
  • 2017/08/23(水) 00:18:36.31
ああごめんごめんインサートモードは関係なかったわ
酔ってて眠いし頭が回らないわ

ここまで見た
  • 582
  •  
  • 2017/08/23(水) 13:48:52.82
>>580
分かりました。

ここまで見た
  • 583
  •  
  • 2017/08/24(木) 07:44:55.33
カーソル位置はそのままで、指定した行番号の行を削除したいです。
たとえば、5行目にいながら20行目を削除する、などです。

:20d は使えません。
なぜなら、削除と同時にカーソルが移動してしまうからです。
(当然、カーソルより前の行を消した結果カーソル位置が1行上に移動するのはOKです)

プラグインを使わずに、デフォルトの機能だけで可能でしょうか。

ここまで見た
  • 584
  •  
  • 2017/08/24(木) 08:36:29.25
>>583
そのあとC-oじゃ駄目なの?

ここまで見た
  • 585
  •  
  • 2017/08/24(木) 10:38:03.45
>>584
駄目ではありません。
そのような機能があることを知りませんでした。

解決しました。
ありがとうございました。

ここまで見た
  • 586
  •  
  • 2017/08/24(木) 14:19:20.19
>>585
C-oとC-i便利よ。後g;

ここまで見た
  • 587
  •  
  • 2017/08/28(月) 06:15:07.03
sudoで起動したときに設定を反映させる方法を教えてください。

ここまで見た
  • 588
  •  
  • 2017/08/28(月) 06:45:49.71
>>587
いくつかある
sudo vimでググれ

ここまで見た
  • 589
  •  
  • 2017/08/29(火) 20:44:34.25
>>587
自ユーザで使ってる .vimrc などを /root にもコピーすれば?

ここまで見た
  • 590
  •  
  • 2017/09/02(土) 21:09:55.29
書籍 Pro Vim に次のようなコマンドが紹介されていました。
(正確には違いますが、質問の本質に無関係な部分は省略、改変しています)

:let c=0 | g/^/let c=c+1 | s/^/\=c/

各行の頭に1から順に番号を挿入するものです。

これは3つの同格なコマンド let、g、s がパイプで繋がっているのではなく、
1つ目のパイプで let と g が繋がっており、2つ目のパイプで繋がった let と s が、
g が実行する一塊のコマンドを構成している、 という認識でよろしいでしょうか。

ここまで見た
  • 591
  •  
  • 2017/09/02(土) 21:25:16.10
いや、|を区切りに順番に実行してるだけ

ここまで見た
  • 592
  •  
  • 2017/09/02(土) 21:39:42.36
…じゃなかった、二つ目の|は :g のコマンド部に含まれることになる(ので、一行ごとに let c=c+1 | s/^/\=c が実行される)
だから多分おっしゃってる通りです

言いたかったのは、シェルでいうパイプみたいな入出力機能は無いよってこと

ここまで見た
  • 593
  •  
  • 2017/09/02(土) 22:28:24.27
>>592
何となくの理解でしたが、おかげさまで確信が持てました。
ありがとうございました。

ここまで見た
  • 594
  •  
  • 2017/10/03(火) 23:14:16.22
3ボタン式フットペダル買おうと思う
左はESCとして、真ん中と右に何を割り当てようか?

ここまで見た
  • 595
  •  
  • 2017/10/03(火) 23:19:07.97
クラッチとアクセルだよな

ここまで見た
  • 596
  •  
  • 2017/10/03(火) 23:26:04.06
そもそもそういうのが必要ないのがvimのいいところじゃね

ここまで見た
  • 597
  •  
  • 2017/10/04(水) 00:15:47.10
>>595
真ん中にクラッチ!?
なにいうてはりますの

ここまで見た
  • 598
  •  
  • 2017/10/04(水) 00:51:15.43
免停

ここまで見た
  • 599
  •  
  • 2017/10/04(水) 20:51:51.94
>>594
C-z と fg <CR>

ここまで見た
  • 600
  •  
  • 2017/10/05(木) 02:39:35.11
>>594
押しっぱなしOKならCTRL

ここまで見た
  • 601
  •  
  • 2017/10/12(木) 22:42:02.80
kaoriya の gvim と cygwin の vim を併用しています
kaoriya の gvim において、コマンドラインモードの部分のテキストを
クリップボードにコピーしたいです。何か方法はあるでしょうか?

ちなみに cygwin の vim では、ターミナルの機能だと思うのですが
マウス選択すればクリップボードにコピーされます
また、右クリックでメニューも出ます

ユースケースとしては、ファイルのフルパスを 1 と Ctrl + G で
コマンドライン部分に表示させた後、その文字列をコピペする操作です

ここまで見た
  • 602
  •  
  • 2017/10/12(木) 23:19:03.68
>>601
ファイル名をクリップボード(または単にレジスタ)に入れるだけならこれがよさそう
https://blog.trimark.jp/archives/21

いろんなメッセージに対して使いたいならこっちかな
https://superuser.com/a/171105

ここまで見た
  • 603
  •  
  • 2017/10/13(金) 00:10:56.55
>602
回答ありがとうございます
どちらも有益な情報でした

nnoremap ,cp :let @*=expand("%:p")<CR>

こんな感じでマップすると、良い感じで使いまわせそうです
あと、2つ目の方は先頭に改行 ^J が入ってしまうようですね
助かりました

ここまで見た
  • 604
  •  
  • 2017/10/13(金) 22:17:18.33
指定した範囲内の特定の文字列を置換したい。
ただし、置換先の文字列は1から順に増加する数字を含むとする。

例えば下記のものを

abcdef
xyzcwv
ocpqr
hijkclcno
xxcx

2行目から4行目までの c を上から順に、また左から順に [1] [2] [3] [4] に置換すると、

abcdef
xyz[1]wv
o[2]pqr
hijk[3]l[4]no
xxcx

となる。

どうすれば良い?

ここまで見た
  • 605
  •  
  • 2017/10/13(金) 22:23:38.98
「ただし、」はどこにかかってるの?

ここまで見た
  • 606
  •  
  • 2017/10/13(金) 23:24:02.57
>>604
コマンド一発でやる方法は思いつかなかったわ
関数作るならもちろんできる

function! AAA() range
let i = a:firstline
let n = 1
for l in getline(i, a:lastline)
let line = l
while match(line, 'c') + 1
if match(line, 'c')
let line = substitute(line, 'c', printf('[%d]', n), '')
let n += 1
endif
endwhile
cal setline(i, line)
let i += 1
endfor
endfunction

ここまで見た
  • 607
  •  
  • 2017/10/14(土) 05:23:42.42
:let i=1 | 2,4g/./s/c/\=("[".i."]")/g | let i+=1

上のだと4行目のcは同じ数字にしか置換されない
↓これで

let g:c=0
function! Inc()
let g:c+=1
return g:c
endfunction
:let g:c=0 | 2,4g/^/s/c/\=("[".Inc()."]")/g

:global コマンドを使い慣れてないので2,4g/^/s/cのとこはキレイでないかもしれない

ここまで見た
  • 608
  •  
  • 2017/10/14(土) 21:37:36.91
>>606
>>607
今まで関数は必要なかったんで避けてきたんたが、とうとう使うときが来たか。
使い方の基礎から勉強してみるよ。
ありがと。

ここまで見た
  • 609
  •  
  • 2017/10/14(土) 22:24:49.10
関数を作ると別ファイルに分けたくなる→プラグイン開発の道へ

ここまで見た
  • 610
  •  
  • 2017/10/15(日) 11:40:20.45
連続した2行の中のそれぞれのある列からある列までの文字列を上下入れ替えたいんだけど、
素早くやる方法ってある?

たとえば、こんなの (便宜的に半角空白2文字を倍角空白1文字に置き換えた)

bindsym up  command1
bindsym down command2

こんな2行の文字列内の「up 」と「down」を入れ替えたい。
もちろん up の後ろの2つの空白文字も含めて。
こんな感じに。

bindsym down command1
bindsym up  command2

プログラミングとかコンフィグファイルとか書いてると時々あって、
今まで普通に消してから書き直すか、片方を一度別の文字列に置換する方法でスワップしてたんだけど、
これが結構疲れるんだ。
長い文字列だと、作業中に何をやろうとしていたのか、どこまでやってたのか忘れることもあるし。

なんか良い方法ない?
キーストロークでやる方法、コマンドを駆使する方法、何でもいいんだけど。

ここまで見た
  • 611
  •  
  • 2017/10/15(日) 14:06:22.54
>>610
自分は true/false を入れ替えるのにこれ使ってるわ
sagarrakshe/toggle-bool

自分はこれで足りてるけど、こっちのが高機能で色々カスタマイズできるみたい
AndrewRadev/switch.vim

ここまで見た
  • 612
  •  
  • 2017/10/15(日) 21:11:15.02
>>611
ごめん、例が誤解させちゃったみたい。

up と down だったのは特に考えなしに挙げた例で、
実際は何か意味的に対になる単語という訳じゃないんだ。
だから、予め辞書みたいに登録しておけない。

純粋に、2つの行の、同じ列から同じ列までの範囲の文字列を入れ換えたい。

矩形選択した範囲内の一番上の行と一番下の行をスワップする。
これができれば理想的なんだけど。

ここまで見た
  • 613
  •  
  • 2017/10/15(日) 22:25:14.16
>>612
俺の知識の範囲ではコマンド一発じゃ無理だけど関数作ればできるよ
置き換える範囲は正規表現でも列でもできるし

ここまで見た
  • 614
  •  
  • 2017/10/16(月) 14:09:16.56
>>613
やっぱ既存のコマンドを繋げるだけじゃ無理か。
関数作ってみるよ。
ありがと。

ここまで見た
  • 615
  •  
  • 2017/10/16(月) 15:36:02.02
>>610
洗練されてないコードだがこんなんとか
function! Sw()
let pat = '\s\+\S\+\s\+'
let l = getline('.')
let m = matchstr(l, pat)
let l2 = getline(line('.') + 1)
let m2 = matchstr(l2, pat)
cal setline(line('.'), substitute(l, pat, m2, ''))
cal setline(line('.') + 1, substitute(l2, pat, m, ''))
endfunction

ここまで見た
  • 616
  •  
  • 2017/10/20(金) 00:35:41.26
>>610
矩形選択した2行の同列の文字列同士を交換するならこんなんでどうか

function! s:SwapLine()
let pos1=getpos("'<")
let pos2=getpos("'>")
let l1=pos1[1]
let c_start=pos1[2]
let l2=pos2[1]
let c_end=pos2[2]
let len=c_end - c_start + 1
let text1=strpart(getline(l1),c_start-1,len)
let text2=strpart(getline(l2),c_start-1,len)
let line1=getline(l1)
let line2=getline(l2)

let newline1=strpart(line1,0,c_start-1).text2.strpart(line1,c_end)
let newline2=strpart(line2,0,c_start-1).text1.strpart(line2,c_end)

call setline(l1,newline1)
call setline(l2,newline2)
endfunction

vmap <C-S> :<C-U>call s:SwapLine()<CR>

お絵かきランド
フリック回転寿司
ここまで見た

★お気に入り追加

このページを共有する
facebook twitter hatena line google mixi email