[HN Gopher] Bat: Cat with syntax highlighting
___________________________________________________________________
Bat: Cat with syntax highlighting
Author : Olshansky
Score : 139 points
Date : 2025-10-05 22:21 UTC (2 days ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| iefbr14 wrote:
| cat <whatever> | highlight --force -O xterm256 | less -SRNI
|
| works fine for me.
| b_e_n_t_o_n wrote:
| and rsync works fine for people too, I guess that's why nobody
| uses Dropbox
| yjftsjthsd-h wrote:
| Dropbox and rsync do different things. It looks like this
| does essentially the same thing.
| tclancy wrote:
| Assuming perfect memory and you never make typos they are
| exactly the same. For most installs. Or distros. Probably.
| GodelNumbering wrote:
| You don't need to memorize
|
| alias bat='f(){ cat "$1" | highlight --force -O xterm256
| | less -SRNI; }; f'
| lynndotpy wrote:
| For all the other issues people have pointed out, this
| assumes you have `highlight` installed.
| yjftsjthsd-h wrote:
| > Assuming perfect memory and you never make typos they
| are exactly the same.
|
| You can make an alias.
|
| > For most installs. Or distros. Probably.
|
| Comparing https://repology.org/project/bat-cat/packages
| vs https://repology.org/project/highlight/packages
| appears to show them with approximately equal
| availability. (Unless you're trying some other point, in
| which case I don't follow.)
| inopinatus wrote:
| I don't know if it still uses librsync but for a long time
| Dropbox was based directly upon it.
|
| Whether this proves or disproves anything in re syntax
| highlighting utilities I leave as an exercise.
| b_e_n_t_o_n wrote:
| It's a reference to this:
|
| https://news.ycombinator.com/item?id=8863
| spookie wrote:
| I call cat when I need to pipe or copy something, and just bat
| if I wanna read it myself. I find this as a good compromise, I
| like how bat formats things.
|
| Your solution would be ok with an alias as well, so thanks.
| Might try it just so I dont need yet another program lying
| around
| seedie wrote:
| You can still pipe bat output as it falls back to unformated
| output when it detects a non-interactive terminal.
| https://github.com/sharkdp/bat?tab=readme-ov-file#file-
| conca...
| postepowanieadm wrote:
| But it's not in rust.
| MangoToupe wrote:
| I don't seem to have "highlight" on my system.
| JdeBP wrote:
| That's because it is in ports rather than in base. (-:
|
| * https://freshports.org/textproc/highlight/
|
| * https://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/textproc/h
| i...
|
| * http://ports.su/textproc/highlight
|
| * https://ports.macports.org/port/highlight/
| MangoToupe wrote:
| Why not just install `bat` at that point?
| freddie_mercury wrote:
| That has git integration, like bat does? That shows non-
| printable characters like bat does? That allows you to
| concatenate and page multiple files at once like bat does? That
| supports the --line-range option like bat does? You can pipe
| the output of tail -f through your alias?
|
| I guess if all you did was read the headline of the post you
| could assume your alias does all the same things as bat.
| feelamee wrote:
| looks like you are right, but... I almost never used all of
| this features with bat. Maybe tail -f sometimes. Do you
| really need this in daily workflow?
| freddie_mercury wrote:
| I use the syntax highlighting of manpages, fd, ripgrep, and
| git pretty regularly.
|
| I also use the fzf previewer with --range-limited pretty
| frequently.
| petepete wrote:
| It's clearly a joke in the vein of being able to recreate
| Dropbox with an FTP account, curlftpfs, and SVN/CVS.
| hnlmorg wrote:
| Not the GP and I do like bat, but to answer your questions:
|
| > That shows non-printable characters like bat does?
|
| cat does actually support that via the flags with -v (you can
| also use -t and -e to view tab and line endings too)
|
| > That allows you to concatenate and page multiple files at
| once like bat does?
|
| cat is literally called "cat" because it's intended purpose
| is concatenation.
|
| It's not a pager though the GPs example did pipe to less
| anyway.
|
| > That supports the --line-range option like bat does?
|
| 'tail' and 'head' would be muscle memory to a lot of people
| and not that different in terms of number of keystrokes.
|
| But I do take your point that it's nice to have that built
| into your pager.
|
| > You can pipe the output of tail -f through your alias?
|
| I couldn't see why not. tail -f isn't doing anything weird
| with the fd.
|
| ------
|
| I'm not arguing against using bat though. I have it aliased
| to cat on my own machines, so I clearly and would recommend
| bat. But I do think some people might be surprised how far
| you can get with coreutils if bat wasn't available
| em-bee wrote:
| highlight is not part of coreutils either. at least not on
| fedora.
| MisterTea wrote:
| You don't need cat: highlight --force -O
| xterm256 < whatever | less -SRNI
| dicytea wrote:
| Sadly does not work on fish because the developers does not
| believe that users are intelligent enough to understand the
| obvious and intuitive outcome of flipping ">" (a valid
| operator in fish).
| em-bee wrote:
| i tried that: cat .bashrc | highlight
| --force -O xterm256 | less -SRNI
|
| everything is green, except line numbers are black (which comes
| from less), but bat .bashrc
|
| shows actual syntax highlighting.
|
| so apparently, no, it doesn't work.
|
| to be fair, this is how it works: cat .bashrc
| | highlight --syntax shellscript -O ansi | less -R
|
| to avoid getting caught by the _useless use of cat_ police,
| this does too: highlight --syntax shellscript
| -O ansi .bashrc | less -R
|
| however, i have to tell it which syntax to use
|
| but to its credit, highlight even has support for pike, which
| bat doesn't (yet) (fixed that for myself, at least)
|
| so overall, bat wins.
| b_e_n_t_o_n wrote:
| This is super nice!
| perihelions wrote:
| Other threads about (IMHO very nice) tools by this developer (fd,
| hexyl, and hyperfine),
|
| https://news.ycombinator.com/from?site=github.com/sharkdp
| JamesCoyne wrote:
| Also "numbat". A favorite of mine
| seemaze wrote:
| shardkp makes my terminal a home. Thanks sharkdp!
| Crespyl wrote:
| I've been using bat for several years and it's been a really nice
| drop-in replacement for cat/less/etc.
|
| Like rg, it's one of those "rewrite it in rust" projects that
| turned out to actually be quite well thought through.
| oncallthrow wrote:
| "rewrite it in rust" gets a lot of hate, but generally the
| people rewriting things in Rust actually give a shit, which
| tends to pay dividends. I say this as someone who doesn't use
| Rust and doesn't particularly like it or its community.
| ajkjk wrote:
| does... it... get a lot of hate? I've only ever heard of it
| positively.
| DonaldPShimoda wrote:
| If you hang around certain spaces of the internet (here,
| Reddit, etc), any sufficiently popular post about a Rust-
| related project is bound to accrue some comments along the
| lines of "Rust is actually not that great", "rewriting is
| bound to gain new bugs that won't be caught", "the borrow
| checker is practically byzantine and not worth the
| trouble", "C is perfectly adequate", "more advanced type
| systems are less useful than writing more tests", etc. I
| would even say that comments of this nature constituted a
| good chunk of the discussion around the US government's
| C-to-Rust initiative (a very popular post with a lot of
| comments).
| nine_k wrote:
| It's often framed as useless monkey business, rewriting
| working software to produce a copy of it but in another
| language, for questionable benefits.
|
| I'd say that rewriting anything in any language (even in
| the same language) would remove large amounts of cruft, and
| add long-missing neat things that are easier to add when
| you build from scratch, and with a good understanding which
| the original authors lacked. Often it also can afford using
| a better architecture, see rg vs grep: grep has many
| brilliant technical solutions, but making it multithreaded
| would be a major rewrite anyway.
| pityJuke wrote:
| Along with everything else mentioned, there is a certain
| group of people who consider the language "woke". Usually
| that's not the critique you see on HN, but be wary of it.
| hnlmorg wrote:
| People who wrote the coreutils give a shit too.
|
| The reason "rewrite in Rust" gets a lot of hate is because
| it's often a poorer replica in that it supports a subset of
| features and sometimes so littered with unsafe blocks that
| it's barely any safer than their C counterparts.
|
| Ripgrep and bat are the exceptions in that they're
| modernisations in every sense of the term. They're safer,
| have more modern features, and better defaults. Even if you
| don't give a crap about memory safety, there's a reason to
| use ripgrep and bat.
|
| Personally I really don't see the benefit in rewriting stuff
| unless you're bringing other modernisations to the table too.
| But I suspect for some people, it's more of an exercise to
| learn Rust than it is an ambition to displace a particular
| coreutil.
| sureglymop wrote:
| I have no issue with rewriting the coreutils in rust
| technically but I also don't think it's that interesting.
| They work just fine as they are.
|
| However what I truly don't understand is using a different
| license. For something so fundamental, please just let that
| be the same.
|
| But I think there are a lot more great examples. I have
| used pandas and I like polars. I have used latex but I like
| typst. People are creating generally valuable tools that
| bring something new to the table. More competition and
| diversity is rarely a bad thing.
| tetris11 wrote:
| I use it on and off, but for the life of me can't get over the
| issue that line wrapping is the default behaviour with no easy
| switch
| rascul wrote:
| the --wrap options don't do it for you?
| tetris11 wrote:
| oh yeah `--wrap never`, I guess I should setup an alias --
| thanks
| stephenlf wrote:
| I don't even think you need an alias. There's a bat
| config file (`bat --config-file` to find it). You can
| probably drop `--wrap never` there. I include a few
| different `--map-syntax` declarations there.
| baby wrote:
| Check exa
| KerrAvon wrote:
| yeah, exa is a very convincing argument
|
| it replaces default `ls` in interactive shells on some
| distros, which is where I encountered it
| stouset wrote:
| The original author appears to have abandoned exa, but it has
| continued life as eza.
| Olshansky wrote:
| 100%. I'd add fd to the list as well.
| layer8 wrote:
| As a more general-purpose tool, there is also GNU Source-
| highlight [0] which comes in most distributions. For example to
| use with less: https://www.gnu.org/software/src-highlite/source-
| highlight.h...
|
| [0] https://www.gnu.org/software/src-highlite/
| binaryturtle wrote:
| In Safari I get "Too Many Requests" error; in Firefox ESR I get
| a straight "403 Forbidden". What the heck is going on with
| gnu.org?
|
| Edit, with cURL it's OK... 200.
|
| That makes no sense.
| oxguy3 wrote:
| Neat! One of those tools that I would never have thought to look
| for, but I'm sure I'll be glad I have.
| arjie wrote:
| Very cool tool. It's perfect for the "take a quick look" use-
| case.
|
| I just downloaded it on MacOS and when I ran it the first time it
| took a really long time on a one-line JSON which disappointed me
| but then any subsequent run on anything was fast. I'd completely
| forgotten about MacOS doing that thing on first run.
|
| Uses the pager for large files automatically etc. Very nice.
| steezeburger wrote:
| What thing does MacOS do on first run?
| cobbal wrote:
| It phones home to apple malware servers, among other things:
| https://lapcatsoftware.com/articles/2024/2/3.html
| dang wrote:
| Related. Others?
|
| _bat: A cat(1) Clone with Wings_ -
| https://news.ycombinator.com/item?id=33382307 - Oct 2022 (2
| comments)
|
| _bat, a cat(1) clone with syntax highlighting, Git integration
| written in Rust_ - https://news.ycombinator.com/item?id=24850244
| - Oct 2020 (6 comments)
|
| _Bat: A cat(1) clone with wings_ -
| https://news.ycombinator.com/item?id=17887819 - Aug 2018 (12
| comments)
|
| _Bat: A cat(1) clone with wings_ -
| https://news.ycombinator.com/item?id=17849535 - Aug 2018 (1
| comment)
|
| _Bat: cat(1) clone with syntax highlighting and Git integration_
| - https://news.ycombinator.com/item?id=16968755 - May 2018 (1
| comment)
___________________________________________________________________
(page generated 2025-10-07 23:00 UTC)