Vimスクリプト(filter)

filterを使います。

前回は:lsの結果をmapを2回繰り返して、buffer-listのファイル名を取得しましたが、
もう少し簡単に抽出してみます。

/tmp $ touch test_{1..5}.txt
/tmp $ vim test_*.txt
:let arr=split(execute('ls'),'"')
:echo arr

あとは、配列の奇数番目を抽出すれば良いですね。

:let i=0
:while i < len(arr)
:  if i % 2 == 1
:    echo arr[i]
:    endif
:  let i=i+1
:  endwhile

これをfilterを使って、もっとシンプルにしてみます。

filterのヘルプを確認。

 
:h filter(
 
filter({expr1}, {expr2})                                *filter()*
                {expr1} must be a |List| or a |Dictionary|.
                For each item in {expr1} evaluate {expr2} and when the result
                is zero remove the item from the |List| or |Dictionary|.
                {expr2} must be a |string| or |Funcref|.

〜省略〜

                Example that keeps the odd items of a list:
                        func Odd(idx, val)
                          return a:idx % 2 == 1
                        endfunc
                        call filter(mylist, function('Odd'))
                It is shorter when using a |lambda|:
                        call filter(myList, {idx, val -> idx * val <= 42})
                If you do not use "val" you can leave it out:
                        call filter(myList, {idx -> idx % 2 == 1})

ちょうど奇数抽出のことがExampleで述べられています。
これを使ってみます。

:let a=filter(arr,{idx -> idx % 2 == 1})
:echo a

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA