## 事象
[[render-markdown.nvim]]に`fat_tables`オプションがある。
<div class="link-card">
<div class="link-card-header">
<img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/>
<span class="link-card-site-name">GitHub</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">GitHub - MeanderingProgrammer/markdown.nvim: Plugin to improve viewing Markdown files in Neovim</p>
<p class="link-card-description">Plugin to improve viewing Markdown files in Neovim - Meander ... </p>
</div>
<img src="https://opengraph.githubassets.com/6c6fd4230a327e2176e984890bb68d3b24b1fa48e00a446383e1458fa6e4db73/MeanderingProgrammer/markdown.nvim" class="link-card-image" />
</div>
<a href="https://github.com/MeanderingProgrammer/markdown.nvim?tab=readme-ov-file#setup"></a>
</div>
> -- Add a line above and below tables to complete look, ends up like a window
このオプションを有効にすると、テーブルが以下のように表示される。
![[Pasted image 20240507103535.png]]
しかし、日本語を含むと、以下のように線が表示されなくなる。
![[Pasted image 20240507103659.png]]
正確には最後の行に日本語が含まれる場合のみっぽい。(途中行は問題ない)
## 原因
テーブルの先頭行と末尾行の長さが異なると判定され、その場合は線が表示されないから。これは長さをbyte数で判定しているから。
`handler/markdown.lua`より一部抜粋
```lua
elseif capture == 'table' then
if state.config.fat_tables then
local lines = vim.api.nvim_buf_get_lines(0, start_row, end_row, false)
local table_head = list.first(lines)
local table_tail = list.last(lines)
if #table_head == #table_tail then
local headings = vim.split(table_head, '|', { plain = true, trimempty = true })
```
たとえば以下のケース。
```
| id | name |
|----|------|
| 1 | ああ |
| 2 | iい |
```
`| id | name |`は13byteだが、`| 2 | iい |`は14byteとなるため一致しない。
## 回避策
ソースコードを変更し、エンコーディングと文字幅を考慮した条件分岐にするか、条件を外してしまうかのどちらか。
## 解決策
[[GitHub]] Issuesに起票するのがよいかと。(未実施)