Vim Part28
■ このスレッドは過去ログ倉庫に格納されています
spacevimってspacemacsの劣化だろ
そんなもん参考に載せるな まだVim歴2週間やけどすっげー
WSLの恩恵もあってか感無量やわ いまからVim(特にVim 8.1以降)を使うなら,できるだけ既定のプラグイン以外に頼らないほうがいい。
昔は内部端末やらファイルマネージャやら非同期処理やらパッケージ管理やらが最初から可能だからね。 質問です。
1: Mac でペーストするときに <b0> が入ることがあります。これを避ける方法はないでしょうか?
2: ペーストで <b0> が入ってしまうと、それ以降、すべての入力が文字として扱われてしまい編集ができなくなります。esc や ctrl-c で抜け出ることもできません。この状況でノーマルモードに戻るにはどうしたらいいでしょうか?
環境:
Mac high siera
Vim 8.1 (ターミナル版, not MacVim。homebrew でインスコ)
関連する設定
set clipboard=unnamed
再現方法:
chrome で開いたウェッブページの適当な文字をコピーして cmd+v でペースト。
すべてのケースで <b0> が混入する訳じゃないんですが稀に発生します。その場合は同じ箇所をコピーするとペースト時に必ず再現します。
解決するために調べたこと(試行):
1: register * が変更されたタイミングを検知して不要な文字を削除できないか。
au TextYankPost で試したけど、変更が検知できませんでした。
2: cmd+v を検知してどうにかできないか。
cmd+v は MacVim GUI版なら <D- で拾えるっぽいのはわかった。でも、ターミナル版では使えない模様。
試行2はまだ充分に試してはいないので、これから再度試してみます。 vim7だけどプラグインはpathogenとヘルプの日本語化しかしてないな
まだ置換検索テキストオブジェクトしか使えてないがこれだけでも十分便利
骨董品でもそれなりに利用価値はあるんだねぇ 試行2 の件
MacVim で <D- で Command キーの入力が拾えるのは確認できました。
が、システムでショートカットが設定されているのは拾えないらしく <M-v>, <M-a>, <M-h> は拾えませんでした。
残念。
それと、再現可能なページが見つかりました。
このページの「Setting」のサンプルコード[*1]を、1行目 let g:nodejs... 〜 4行目の } のところまでをコピー(cmd+v)して、terminal版の vim に cmd+v で貼り付けると末尾に <b0> が付与されてその後操作不能なになります。
https://github.com/myhere/vim-nodejs-complete#settings
*1 ↓この部分
> let g:nodejs_complete_config = {
> \ 'js_compl_fn': 'jscomplete#CompleteJS',
> \ 'max_node_compl_len': 15
> \}
ただし、現象はterminal版では再現しますが、GUI版(MacVim)では再現しません。
わかりにくかったらすみません。
環境情報(追加):
MacVim: 8.0 (2016 Sep 12, compiled Apr 17 2018 10:25:37)
vim: 8.1 (2018 May 17, compiled May 18 2018 13:18:41) > <M-v>, <M-a>, <M-h>
<D-v>, <D-a>, <D-h>の間違いです
> 1行目 let g:nodejs... 〜 4行目の }
波線が数値文字参照になってしまいました 連投すみません。
neovim でも再現しないですね。 vimの貼り付けはpだと思ってた
vimを初期化しても起きるのか
MacVimでも起きるのか
別のブラウザでも起きるのか
一旦テキストエディタを経由しても起きるのか >>9
普通のSierra + Terminal + Vim 8.1 (Homevrew) で Chrome からコード4行コピーしてみたけどゴミ文字も入らないし、普通に編集続けられるな
他のブラウザからのコピー、vimの類じゃない他のエディタへのペースト時はどうなの
Cmd-V でターミナルにペーストしたときはどうだろう
$ echo “<Cmd-V>” | hexdump -C とかでゴミが見えないか
<b0>が何のコードかしらないけど、実際の特殊文字のコードなのか、表示がバグって結果とし<b0>と表示されるのか
もし実際にあるコードなら ~/.vim 以下で
$ ag “<b0>”
とかで <b0> を何かゴニョゴニョやってるプラグインが見つからないかな >14
ご指摘ありがとうございます。
チェックしました。
> vimを初期化しても起きるのか
起きなかった。
> MacVimでも起きるのか
起きなかった。
> 別のブラウザでも起きるのか
再現する。
Safari, Firefox からペーストしても発生した。
> 一旦テキストエディタを経由しても起きるのか
発生する
Mac に標準で入っている Notes を経由しましたが発生しました。 >>14
確認ありがとうございます。
> 他のブラウザからのコピー、vimの類じゃない他のエディタへのペースト時はどうなの
他だと発生したことはないですね。
> Cmd-V でターミナルにペーストしたときはどうだろう
> $ echo “<Cmd-V>” | hexdump -C とかでゴミが見えないか
普通のターミナルだったり、 :term した時は発生しないですね。
> <b0>が何のコードかしらないけど、実際の特殊文字のコードなのか、表示がバグって結果とし<b0>と表示されるのか
> もし実際にあるコードなら ~/.vim 以下で
> $ ag “<b0>”
> とかで <b0> を何かゴニョゴニョやってるプラグインが見つからないかな
ありませんでした。 原因がわかりました。
showmatch オプションを設定していると現象が発生しますね。
> :set showmatch
vim のソース を見て見たけど、残念ながら私には原因が追求できなさそうです。
たぶんここですよね。
https://github.com/vim/vim/blob/master/src/search.c#L2608 ソースからコンパイルした vim だと再現しないっぽいですね。
もしかしたら brew 経由の vim 固有の現象かもです。
トライしたコンパイル手順:
> cd /tmp
> git clone git@github.com:vim/vim.git
> cd vim
> make
> ./src/vim
ちなみに vim をデバッグする時に使えるログ出力関数ってあるのかな?
こんな感じの。。。
> #include "logging"
> void foo() { log->debug("xxx"); }
※問題は解決したので名前を外しました >>18
自分の.vimrcもset showmatchあるな Vimのterminalにエスケープシーケンスを通したいんだけど、どうすればいいでしょうか。
例えばTmuxだと\<Esc>Ptmux;\<Esc><ES>\<Esc>\\とやれば元の端末に<ES>が渡りますが、
Vimのterminalで同じことをしたいです。 Vimでさぁ シェルみたいに/usr/share/vim81とかいうディレクトリを補完できる方法ない?
なるべく簡単な方法がいいんだけども。 >>24
標準の機能なら
:help i_CTRL-X_CTRL-F
この辺を補助する補完プラグインも結構あると思う >>25
まさにそれ!
プラグインでそういうのもありそうだなとは思ってたけど、なるべく汎用性を求めてたから助かった。
ありがとうございます。 知り合いから教えてもらったパソコン一台でお金持ちになれるやり方
時間がある方はみてもいいかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
BWWBI 5分後に回答してくれたのにもっと早く教えろというクソがわいてると聞いて >>31 >>24-25の問答は>>23の解決になんにも寄与してねーよ >>34
内容までは見てなかったわ
「もっと早く教えてくれよ」ってことは本人は解決したと思ったんだろ
ならその返しはないんじゃないのって話
「解決策になってねーよ」なら妥当 改めて読み返すと >>24 と >>27 が同一人物で、 >>29 は別人っぽいな
>>27 はちゃんとお礼言ってる
>>29 はもっと早く知りたかったと言いたかっただけ
何の問題もなかったすまん 最初見たときは >>29 しかレスついてないように見えたんだ
勘違いすまん <C-g>すると現在のカラムとラインが一時的に強調表示されるようにするマップを教えてください。
nnoremap <C-g> :set cursorline cursorcolumn<CR>
とやると<C-g>を押した後ずーと強調表示されっぱなしになります。 >>41
nnoremap <C-g> :set cursorline cursorcolumn<CR>
autocmd CursorMoved * if &cursorline + &cursorcolumn > 0 | set nocursorline nocursorcolumn | endif
autocmd InsertEnter * if &cursorline + &cursorcolumn > 0 | set nocursorline nocursorcolumn | endif
カーソル移動したときと挿入モードに遷移したとき無効化
if 文を入れてあるのは、移動時に毎回 set nocursorline nocursorcolumn すると遅くなるから >>42
autocmd のイベントってカンマ区切で複数書けたんだった
まとめて1行でおk
autocmd CursorMoved,InsertEnter * if &cursorline + &cursorcolumn > 0 | set nocursorline nocursorcolumn | endif >>44
重ねて感謝します。
ところで再現する条件を精査するまでもない些事なのですが、
最後のendifだけシンタックスハイライトされなくないですか?
ほんとにどうでもいいことですが……。 :versionの出力をフィルタリングする良い方法ある?
具体的にはさ
:versionで出力される“Compiled by XXX”のXXXの値によって場合分けする処理をvimrcに書きたい。 >>46
redir => でコマンドの出力を変数に代入
あとは正規表現で如何様にでも
let version_string = ""
redir => version_string
silent version
redir end
let compiled_by = matchlist(version_string, '\nCompiled by \([^\n]\+\)')
echo get(compiled_by, 1, "Unknown") Neovim(0.3.0-dev)でambiwidth=singleにして欧文のアクセント記号を含むファイルを表示すると、表示が乱れませんか?
Vim8では問題ない。 windows版のgvimだとaltキーの組み合わせで特殊な文字を打てたりしたけど
windows版以外で同じようにできませんか?
例えば alt+\ でUの上に点々が付いた文字
alt+shift+\ だと小文字uの上に点々の文字
こういうのできませんか? VimINFOファイルって変数を指定できないんですかね。
let MYVIMINFO = /some/file
set viminfo='2000,<2000,s2000,h,nMYVIMINFO
とするとカレントディレクトリにMYVIMINFOという名前のファイルができてしまいます。
環境変数にすればいいのですが、できれば無用な環境変数は作りたくありません。 >>50
call exec(“set viminfo='2000,<2000,s2000,h,n” . MYVIMINFO)
とかすればいいんじゃなイカ >>51
おお! ありがとうございます。思った通りの挙動になりました! >>8
> 既定のプラグイン以外
ってどういう事? >>53
Netwmとかzipとかじゃない?
あれはもともと組込まれてるプラグインでしょ。 $VIM や $VIMRUNTIME が環境変数として引き継がれるする利点てなんだろ。
vim から場所やバージョンの違う vim を実行するときミスマッチが起きて思ったんだけど、
シェル変数(not環境変数)みたいに実行中のvimのみ参照するようには出来ないんだろうか。 Vimが起動する前に$VIMが設定できない仕様だと
ユーザーが好きな起動ディレクトリを設定できないからじゃないの? ■ このスレッドは過去ログ倉庫に格納されています