vim Part 6 [sc](★0)
-
- 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/
-
- 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のとこはキレイでないかもしれない
-
- 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>
-
- 617
- 2017/10/20(金) 14:23:23.01
-
>>616
vmap <C-S> :<C-U>call s:SwapLine()<CR>
↓
vmap <C-S> :<C-U>call <SID>SwapLine()<CR>
-
- 618
- 2017/10/24(火) 12:52:35.00
-
ファイルの最後尾を見たくてvim(gvim)をリードモードで開きたいです。
開いたあとにshift+gや、.vimrcの設定ではなく、起動時のオプションで、リードモード、最後尾を表示、で開くにはどうしたら良いでしょうか?
ソフトの実行ログで、最後尾周辺に見たい情報があります。
-
- 619
- 2017/10/24(火) 13:47:10.36
-
>>618
view + <ファイル名>
view にパスが通ってなかったら vim -R
-
- 620
- 2017/10/24(火) 21:40:55.66
-
ノーマルモードで、
viWU
の後に、カーソルを最初に v を入力する時にいた位置に戻したいのたが、
関数やプラグインを使わずキーストロークのみで実現するには
マーク機能を使うしかないかな?
<c-o> を入力したら変なところ飛んじゃった。
viWU はジャンプリストには登録されないみたい。
-
- 621
- 2017/10/25(水) 10:33:41.05
-
>>620
語頭じゃないところで単語を大文字変換して、カーソル位置が動くからそれを元に戻したい、で良いですかね。
maviWUとやって'aしてみましたが駄目でしたよ。
-
- 622
- 2017/10/25(水) 18:19:16.67
-
>620
viWU``
こういうことをしたい感じ?
マーク機能を使っているけど自動でマークされた場所に戻るだけだからセーフということで
-
- 624
- 2017/10/25(水) 22:59:13.87
-
あっ、再試験してみたらやっぱり手動でマークしないとダメだった……。なんだろ、無意識にm`しちゃってたのか?
改めて、 m`viWU`` ならたぶん意図通りになるんじゃないかなと。m`はジャンプリストを更新しているので最後の``はC-oでもいけるよ
:h jumplistにも載ってるからたぶん由緒正しい方法
-
- 625
- 2017/10/26(木) 21:15:31.52
-
>>624
意図通りになった。
が、ヘルプを読んでも previous context mark の意味がよく分からん。
普通のマーク (m[a-z] m[A-Z]) とは違うの?
-
- 626
- 2017/10/27(金) 18:07:57.94
-
日本語ヘルプだと「直前位置マーク」ってなっていて、これはとてもいい名付け方だと思う
/とかggとかGとかでカーソルがどこかへジャンプする時にジャンプ前の位置が自動でマークされる
m`は手動でそのマークを更新しているわけね
maとかして`aと違うのはカーソルジャンプが発生すると自動で上書きされるマークだから、一時的に使うだけなら後腐れがないというのが1点
それとC-oで戻れないって>620にあったので戻れるようにできないか調べた結果というのがもう1点
-
- 627
- 2017/10/27(金) 21:08:26.73
-
>>626
なるほど、そういう機能なのか。
(日本語もちゃんと意味を理解して訳してるんだね)
理解できたよ。
ありがと。
-
- 628
- 2017/10/29(日) 17:26:34.66
-
>>601
ノーマルモードで2つのキーq: 連続押しするとexコマンド履歴が表示されるので
それ選択してクリップボードへ。
また :dis ってexモードで入力すると "で始まる各レジスタが表示される。
もしかしたら編集中のファイル名などコピペしたいのがあるかもしれない。
-
- 629
- 2017/11/08(水) 12:12:30.72
-
cygwin の vim と kaoriya の gvim を併用しています
nerdtree において、259 文字以上のパスの場合、
cygwin の vim はそのファイルが表示されます
kaoriya の gvim はそのファイルが表示されません
後者の nerdtree において max_path を超えるパスを扱える方法はあるでしょうか
プラグインと設定ファイルはどちらも同じものを読み込んでます
kaoriya 付属の設定が原因かもですが、特定方法が分かりません
-
- 630
- 629
- 2017/11/13(月) 13:11:31.88
-
netrw も同じ症状でした
kaoriya は内部でwin32 api の制限を受けてるってことなんでしょうかね
-
- 631
- 2017/11/13(月) 18:11:05.12
-
>>630
Kaoriya版はVisualC++でコンパイルしたネイティブのWindowsアプリなので
Windowsの制限をモロに受けると思う
-
- 632
- 2017/11/13(月) 19:48:42.85
-
cygwin もネイティブのWindowsアプリなのでWindowsの制限を受けるのは同じ
-
- 633
- 2017/11/13(月) 20:38:21.25
-
>>632
うーんじゃあファイル名の長さ制限は別の要因によるのかなあ
まあ自分もかつて両方使って環境変数の競合によるトラブルに悩まされた経験があるので
そもそもCygwinのVimとKaoriyaのVimは併用すべきでないと思う
-
- 634
- 2017/11/19(日) 13:35:29.94
-
Win32 APIは特別な対策をしなければMAX_PATH文字までしか使えない。
Cygwinはその特別な対策をしているが、Win32版は何もしていない。
-
- 635
- 2017/11/29(水) 01:43:35.26
-
GVimってなんでダメなの?
-
- 636
- 2017/11/29(水) 11:16:58.03
-
誰がダメだと言ってたの?
-
- 637
- 2017/11/29(水) 13:53:19.92
-
VIP板のプログラミングスレの人達が言ってた
-
- 638
- 2017/11/29(水) 13:59:35.80
-
GVIPならよかったんじゃね?
-
- 639
- 2017/11/30(木) 09:04:35.33
-
linuxなら使わんけど
windowsなら普通に使う
-
- 640
- 2017/11/30(木) 09:40:33.28
-
Gvimがダメなんじゃなくて
Gvimがダメとか言ってる人たちがダメなんでしょ
弘法筆を選ばず
Windowsのメモ帳だってコードは書ける
-
- 641
- 2017/11/30(木) 15:14:08.43
-
まあcatよりはマシかもね
-
- 642
- 2017/11/30(木) 17:23:03.64
-
挿入モードでカーソルを行末に持って行くのに、C-o $でやっているのですが他に方法って有りましたっけ。
-
- 643
- 2017/11/30(木) 17:35:50.97
-
End
-
- 644
- 2017/12/01(金) 08:01:01.83
-
思考を放棄して ESC A してる
-
- 645
- 2017/12/01(金) 13:20:44.67
-
>>643
それって入力中の文字列の最後に行くだけじゃないっけ
-
- 646
- 2017/12/01(金) 13:40:07.04
-
C-eを<End>にcnoremapしてる
-
- 647
- 642
- 2017/12/01(金) 14:17:12.52
-
様々なご意見ありがとうございます。
MacbookなのでEndがないのと、ホームポジションからなるべくキーを離したくないのです。
今まではESC AまたはC-[ Aだったのですが、最近ようやくC-o $を知りました。
どのみち2ストロークだよなあ、と思って質問してみました。
vimrc弄ってマッピングするのは盲点でした。検討してみます。
-
- 648
- 2017/12/01(金) 20:09:15.11
-
>>645
嘘でした。ちゃんと行末に飛びます
ごめんなさい
-
- 649
- 2017/12/01(金) 22:13:17.49
-
>>647
Fn+rightキーでend
-
- 650
- 2017/12/02(土) 06:25:06.47
-
未だにAltってマップ出来ないの?
-
- 652
- 2017/12/02(土) 18:04:49.08
-
フットペダルの出番ですね!?
-
- 654
- 2017/12/03(日) 10:23:47.82
-
vim を使用しているとき矢印キーを不能にしたくて、
試しに :noremap! <Up> <Nop> としましたが、
インサートモードでおかしな挙動をします。
1つ上の行に1文字 A が挿入されます。
不可解です、これはどう言うことでしょうか?
コマンドラインモードでは問題なく意図通りになっています。
ちなみに、:noremap! <Del> <Nop> もインサートモードでの挙動が変です。
こちらはカーソルのすぐ左の1文字の大小が入れ替わり、
かつノーマルモードへ戻ってしまいます。
:noremap! <BS> <Nop> はインサートモードでも意図通りになりました。
-
- 655
- 2017/12/03(日) 10:28:33.55
-
>>654
ごめんなさい。
あせって質問する前に落ち着いてしっかりリサーチすべきでした。
互換モードが絡んでいたのですね。
解決しました。
-
- 656
- 2017/12/03(日) 12:15:11.52
-
>>655
ごめんなさい、嘘をついていました。
まだ解決されていません。
矢印キーや Delete キーなどの挙動の仕組みは理解できました(つもり)。
そこで、set nocompatible を .vimrc に既述しましたが、症状は変わりません。
そもそも .vimrc が存在する時点で、デフォルトで nocompatible on のはずです。
仮想端末の方が悪いのかと、数種類試してみましたが、どの場合も同じ症状です。
vim のコンパイルオプションが関係しているのかと、vim --version で確認しましたが、
vi互換性やキーコードに関係していそうなオプションは見あたりませんでした。
もともと、矢印キーなどへ伸びる手を矯正しようと Nop に設定したので、
意図しない挙動であっても実質的には問題ないのですが、
やはり理由、原因は気になります。
vi互換性を切っても出るこの症状は何が原因なのでしょうか。
-
- 657
- 629
- 2017/12/04(月) 23:05:49.96
-
話がそれますが
Git for Windows も 260 を超えるパスは扱えませんでした
cygwin の git は扱えました
このページを共有する