junegunn / fzf

:cherry_blossom: A command-line fuzzy finder
https://junegunn.github.io/fzf/
MIT License
65.25k stars 2.4k forks source link

Anchor match (specifically the "suffix-exact-match") doesn't seems to be working as expected! #3983

Open CodesOfRishi opened 2 months ago

CodesOfRishi commented 2 months ago

Checklist

Output of fzf --version

0.55.0 (fc69308)

OS

Shell

Problem / Steps to reproduce

Suppose I have a file named jj containing the below data.

1725128905:/home/rishi:33:3.5262450218
1725129754:/home/rishi/testing:25:3.2580965380
1725116690:/home/rishi/.config/kitty:20:3.0429883472
1725120058:/home/rishi/.bashrc.d:12:2.5639900558
1725105557:/home/rishi/dotfiles:8:2.1951743677
1725128911:/etc:4:1.6093855692
1725105539:/home/rishi/dotfiles/Git:3:1.3849998610
1725093469:/home/rishi/Downloads:3:1.3843550671
1725115026:/home/rishi/testing/ddd:1:.6927534393

Considering : as a delimiter here, the directory paths in the file should be the 2nd column.

Using ^ search syntax

Example-1:

image

Example-2:

image

Using $ search syntax

Example-1:

image

Example:-2:

image

I hope I am not missing anything.

CodesOfRishi commented 2 months ago

Also, I don't use FZF on shells or operating systems other than Bash and Linux. Therefore, I'm unsure if it behaves the same way on other platforms or not.

junegunn commented 2 months ago

Each token keeps its trailing non-whitespace delimiter. It was an early decision to make --with-nth work better with tabular data, but admittedly it doesn't work well with anchored matches with --nth as you have noticed. We may change this in the future, but for now, it is how it is, and you have to include the delimiter in your search term. i.e. kitty:$

fzf --delimiter=":" --nth=2 --query 'kitty:$' << EOF
1725128905:/home/rishi:33:3.5262450218
1725129754:/home/rishi/testing:25:3.2580965380
1725116690:/home/rishi/.config/kitty:20:3.0429883472
1725120058:/home/rishi/.bashrc.d:12:2.5639900558
1725105557:/home/rishi/dotfiles:8:2.1951743677
1725128911:/etc:4:1.6093855692
1725105539:/home/rishi/dotfiles/Git:3:1.3849998610
1725093469:/home/rishi/Downloads:3:1.3843550671
1725115026:/home/rishi/testing/ddd:1:.6927534393
EOF

However, fzf does ignore whitespace delimiters when matching so this should work as expected.

tr ':' ' ' << EOF | column -t | fzf --nth=2 --query 'kitty$'
1725128905:/home/rishi:33:3.5262450218
1725129754:/home/rishi/testing:25:3.2580965380
1725116690:/home/rishi/.config/kitty:20:3.0429883472
1725120058:/home/rishi/.bashrc.d:12:2.5639900558
1725105557:/home/rishi/dotfiles:8:2.1951743677
1725128911:/etc:4:1.6093855692
1725105539:/home/rishi/dotfiles/Git:3:1.3849998610
1725093469:/home/rishi/Downloads:3:1.3843550671
1725115026:/home/rishi/testing/ddd:1:.6927534393
EOF
CodesOfRishi commented 2 months ago

Ok, thanks for the clarification