惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
小众软件
小众软件
MongoDB | Blog
MongoDB | Blog
Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
大猫的无限游戏
大猫的无限游戏
量子位
A
About on SuperTechFans
G
Google Developers Blog
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Vercel News
Vercel News
V
Visual Studio Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
U
Unit 42
Apple Machine Learning Research
Apple Machine Learning Research

jdhao's digital space

Conversion between base64 and OpenCV or PIL Image 腾讯云对象存储博客图床开启 CDN 加速(不需要购买额外域名) Search and Replace in Multiple Files in Vim/Neovim Change Table Column Width in LaTeX Image or Table Side by Side in LaTeX LaTeX 并排显示图像或表格 Firenvim: Neovim inside Your Browser Content inside HTML tags missing in Latest Hugo? Creating Markdown Front Matter with Ultisnips Labelme JSON 标注格式转 voc XML 格式 Nifty Nvim Techniques That Make My Life Easier -- Series 6 macOS 下如何为视频制作字幕 Running Command Asynchronously inside Neovim Resolving Merge Conflict after Git Stash Pop Pylint: command not found? A Hands-on Experience with Neovim's Built-in LSP Support How to Convert PDF to Images with Imagemagick 互联网上常用缩略语集锦 File Backup in Neovim Converting PDF Pages to Images with Poppler Nifty Nvim Techniques That Make My Life Easier -- Series 5 Neovim Configuration for System-wide Use How to sort a list of tuple or list in Python -- lambda or itemgetter? Building A Vim Statusline from Scratch 人类第一颗原子弹爆炸始末 Distributed Training in PyTorch with Horovod Learning Expect Programming Essential Knowledge about SSH Nifty LaTeX Techniques -- Series 1 更改 Adsense 邮寄地址,重新寄送 PIN
Set up Inverse Search for LaTeX with VimTeX and Neovim
2021-02-20 · via jdhao's digital space

2022-01-19: With the release of VimTeX v2.8, all the hack here may not be needed anymore.

Update log
  • 2021-10-22: Update the script to write server name.
  • 2021-10-10: Fix typo and minor tweak.

Since --remote option hasn’t been restored by Neovim, it is actually not very straightforward to set up inverse search for PDF files when we are editing large LaTeX files with the help of VimTeX.

I spend some time figuring out how to do it on both Windows and macOS and succeed. I thought it would be helpful for people looking for the solution.

First step#

Although Neovim removed the --remote option, it has a complete RPC api by which a client can talk to it and controls its behavior. When Neovim starts, it always starts a server1. The neovim-remote project utilizes the RPC api of neovim to mimic the --remote behavior and its friends. First, we need to install this package:

pip install neovim-remote

It comes with an executable named nvr. To connect to a running Neovim instance and run a command, we can use the following command:

nvr --servername server_address -c "echo 'hello'"

Option --servername specifies a valid Neovim server address (i.e., the value v:servername). Option -c means to run a command in the specified Neovim instance.

Second step#

Each time we start a new neovim instance, the server address changes. It is cumbersome to copy this address when we want to communicate with this Neovim instance. We can write the server address to a temporary file and read the server address from that file when running the nvr command.

Add the following setting to nvim config:

function! s:write_server_name() abort
  let nvim_server_file = (has('win32') ? $TEMP : '/tmp') . '/vimtexserver.txt'
  call writefile([v:servername], nvim_server_file)
endfunction

augroup vimtex_common
  autocmd!
  autocmd FileType tex call s:write_server_name()
augroup END

When we open a LaTeX source file, the server name will be written to vimtexserver.txt so that we can later read it easily.

Third step#

Now we need to set up the corresponding PDF viewer to do inverse search. The setup differs based on your system and PDF viewer.

Skim on macOS#

Open Skim PDF viewer, open the Preferences menu (shortcut: Command+,) and go to Sync page. Set up the section PDF-Tex Sync support, use the following settings:

  • Preset: Custom
  • Command: nvr
  • Arguments: --servername `cat /tmp/vimtexserver.txt` +"%line" "%file"

To start inverse search, press Shift and Command, then click the text you want to inv-search.

Sumatra PDF on Windows#

Open Sumatra PDF, go to Settings --> Options, in the bottom part, there is a section Set inverse search command-line, put the following command there:

cmd /c for /F %i in ('type C:\Users\ADMINI~1\AppData\Local\Temp\vimtexserver.txt') do nvr --servername %i -c "normal! zzzv" +"%l" "%f"

The meaning of %f and %l:

  • %f: tex source file path corresponding to current pdf.
  • %l: line in the original tex file.

I know the above command is complicated and looks super weird, but it’s the only way that works out of the numerous other ways I have tried. Note that cmd /c is needed, without which, Sumatra PDF will complain that the inverse search command is wrong:

Can not start inverse search command. Please check the command line in the settings.

Double click somewhere in the PDF file, your cursor in nvim/nvim-qt should go to the corresponding line in the file buffer.

I have also posted this setup on VimTeX repo, check this issue.

Conclusion#

In this post, I give a summary on how to set up inverse search for Neovim on different platforms. After all these setup, inverse search should work out of the box without any manual labor.

References#