異なる引数に対して同じウィンドウ番号が返されるケース #990

Closed
pocari opened this Issue Nov 29, 2016 · 5 comments

Projects

None yet

4 participants

@pocari
pocari commented Nov 29, 2016

質問・報告の内容

下記のようなオペレーションを行うと別の名前で作成しているバッファに対してbufwinnrが同じ値を返すのですが、これは何故なんでしょうか?

  • vimを起動
% pwd
/tmp

% /Applications/MacVim.app/Contents/MacOS/Vim -u NONE
  • vim内で下記を実行
:e aaa.bbb
:echo bufwinnr('/tmp/aaa.bbb')
=> 1が返ってくる
:echo bufwinnr('/tmp/aaa')
=> これも1が返ってくる
:echo bufwinnr('/tmp/ccc')
=> これは-1が返ってくる

上記のオペレーションでのecho bufwinnr('/tmp/aaa')1が返ってくる理由がわからないので質問させて頂きました。

Vimのバージョン

VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Nov 20 2016 09:29:19)
MacOS X (unix) 版
適用済パッチ: 1-94
Compiled by travis@Traviss-Mac-592.local
Huge 版 with MacVim GUI.  機能の一覧 有効(+)/無効(-)
+acl             +float           +mouse_sgr       +tag_old_static
+arabic          +folding         -mouse_sysmouse  -tag_any_white
+autocmd         -footer          +mouse_urxvt     -tcl
+balloon_eval    +fork()          +mouse_xterm     +termguicolors
+browse          +fullscreen      +multi_byte      +terminfo
++builtin_terms  +gettext         +multi_lang      +termresponse
+byte_offset     +guess_encode    -mzscheme        +textobjects
+channel         -hangul_input    +netbeans_intg   +timers
+cindent         +iconv           +num64           +title
+clientserver    +insert_expand   +odbeditor       +toolbar
+clipboard       +job             +packages        +transparency
+cmdline_compl   +jumplist        +path_extra      +user_commands
+cmdline_hist    +kaoriya         +perl/dyn        +vertsplit
+cmdline_info    +keymap          +persistent_undo +virtualedit
+comments        +lambda          +postscript      +visual
+conceal         +langmap         +printer         +visualextra
+cryptv          +libcall         +profile         +viminfo
+cscope          +linebreak       +python/dyn      +vreplace
+cursorbind      +lispindent      +python3/dyn     +wildignore
+cursorshape     +listcmds        +quickfix        +wildmenu
+dialog_con_gui  +localmap        +reltime         +windows
+diff            +lua/dyn         +rightleft       +writebackup
+digraphs        +menu            +ruby/dyn        -X11
+dnd             +migemo          +ruby19/dyn      -xfontset
-ebcdic          +mksession       +scrollbind      +xim
+emacs_tags      +modify_fname    +signs           -xpm
+eval            +mouse           +smartindent     -xsmp
+ex_extra        +mouseshape      +startuptime     -xterm_clipboard
+extra_search    +mouse_dec       +statusline      -xterm_save
+farsi           -mouse_gpm       -sun_workshop    
+file_in_path    -mouse_jsbterm   +syntax          
+find_in_path    +mouse_netterm   +tag_binary      
      システム vimrc: "$VIM/vimrc"
      ユーザー vimrc: "$HOME/.vimrc"
   第2ユーザー vimrc: "~/.vim/vimrc"
       ユーザー exrc: "$HOME/.exrc"
     システム gvimrc: "$VIM/gvimrc"
     ユーザー gvimrc: "$HOME/.gvimrc"
  第2ユーザー gvimrc: "~/.vim/gvimrc"
  デフォルトファイル: "$VIMRUNTIME/defaults.vim"
    システムメニュー: "$VIMRUNTIME/menu.vim"
       省略時の $VIM: "
/usr/local/Cellar/macvim-kaoriya/HEAD-d2aef0e/MacVim.app/Contents/Resources/vim
"
コンパイル: clang -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_MACVIM -Wall -Wno-unknown-pragmas -pipe  -DMACOS_X_UNIX  -mmacosx-version-min=10.9 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       
リンク: clang   -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/readline/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/readline/lib -L. -L/usr/local/lib -L. -L/usr/local/lib -mmacosx-version-min=10.9 -headerpad_max_install_names -L/usr/local/lib -o Vim -framework Cocoa -framework Carbon       -lm  -lncurses -liconv -lintl -lmigemo -framework Cocoa   -pagezero_size 10000 -image_base 100000000  -fstack-protector  -L/System/Library/Perl/5.16/darwin-thread-multi-2level/CORE 

OSの種類/ディストリ/バージョン

  • macOS El Capitan

使用している or 関係していそうなプラグイン

なし

その他

neovim(NVIM v0.2.0-1-g9956bee)でも同じ挙動でした。

@rbtnn
rbtnn commented Nov 29, 2016

bufwinnr関数の第一引数は完全一致の文字列を指定するのではなく、ファイルパターンを指定するからですね。

:help file-patternを見るとファイルパターンとはどういうものなのかわかります。

@thinca
Member
thinca commented Nov 29, 2016

(長々書いてたら先を越されたけど気にせず投下)

ドキュメントを参照してみましょう。(以下では日本語 help を参照しています)

:help bufwinnr() によると、

{expr}の使い方は前述の|bufname()|を参照。

となっています。:help bufname() を見てみると、

{expr}が文字列ならば、バッファ名に対してファイル名マッチング |file-pattern| を行うパターンとなる。
...
完全マッチのものが優先され、完全マッチがなければ、バッファ名の先頭でのマッチ、末尾でのマッチ、中間でのマッチが探される。

というわけで、bufwinnr('/tmp/aaa') は、先頭でのマッチによって /tmp/aaa.bbb にマッチしたため、そのバッファ番号の 1 が返ってたということです。

@pocari
pocari commented Nov 29, 2016

@rbtnn @thinca ご丁寧にありがとうございます!よくわかりました。
完全一致で見ることもできるんですね。

解決した場合はこのissueは私がcloseすれば良いのでしょうか?

@rbtnn
rbtnn commented Nov 29, 2016

解決した場合はこのissueは私がcloseすれば良いのでしょうか?

はい。

@thinca
Member
thinca commented Nov 29, 2016

解決した場合はこのissueは私がcloseすれば良いのでしょうか?

閉じてもらって大丈夫です!

@pocari pocari closed this Nov 29, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment