Anchor match (specifically the "suffix-exact-match") doesn't seems to be working as expected!
Checklist
- [X] I have read through the manual page (
man fzf) - [X] I have searched through the existing issues
- [X] For bug reports, I have checked if the bug is reproducible in the latest version of fzf
Output of fzf --version
0.55.0 (fc69308)
OS
- [X] Linux
- [ ] macOS
- [ ] Windows
- [ ] Etc.
Shell
- [X] bash
- [ ] zsh
- [ ] fish
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
- Searching with
^works as expected. - Command ran -
cat jj | fzf --delimiter=":" --nth=2 --height 40%
Example-1:
Example-2:
Using $ search syntax
- However, searching with
$doesn't seems to be working as expected. - Command ran -
cat jj | fzf --delimiter=":" --nth=2 --height 20%
Example-1:
Example:-2:
I hope I am not missing anything.
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.
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
Ok, thanks for the clarification