This is probably concealing.
The first thing you'll have to do is to identify the syntax group of the character you want to transform.
As an example, let's take this typescript code:
/**
* This function makes the sum of its arguments.
*
* @param nums The list of numbers to add together
*
* @return The sum of the given numbers
*/
function add(...nums: number[]) {
return nums.reduce((acc, num) => acc + num, 0);
}
And let's say I want to transform the @param
and @return
to ⦿
and ↩
.
First, I can Identify the syntax group using this vimscript function:
function! GetGroupName()
if !exists("*synstack") | return | endif
echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name" )')
endfunction
You can use it by typing :echo GetGroupName()
when your cursor is on the word/character to transform.
Once you have the group , in my case typescriptDocComment
, I simply need to enter:
syntax match typeScriptDocTags "@param" conceal cchar=⦿
syntax match typeScriptDocTags "@return" conceal cchar=↩
And the end result:

'conceallevel'
and a'concealcursor'
options that you can tweak to control the behavior of when to conceal and what to do when the cursor is near. Conceal is typically programmed through the syntax engine, so you might look for specific custom Markdown setup among this person's plug-ins to see if they're using something other than what's shipped with Vim.