LINUX.ORG.RU

Vim + Markdown.

 ,


0

2

Доброго времени!
Как «научить» Vim корректно понимать разметку файлов Markdown (*md)?
Т.е. объясню «на пальцах». На данный момент, к примеру, заголовки в тексте файлов .md, которые выделены «#» отображаются в Vim следующим образом.

# Заголовок 1 - нормально.
## Заголовок 2 - нормально.
### Заголовок 3 - курсив!!!
#### Заголовок 4 - курсив!!!
##### Заголовок 5 - курсив!!!
###### Заголовок 6 - курсив!!!

Хотя курсива там быть не должно.
Вот наглядный пример.

https://b.radikal.ru/b39/2004/4b/54634e206ee3.png

Так же хотелось бы, чтобы Vim «научился» обображать не только курсивный шрифт, но и жирный. Про зачеркнутый (я так думаю) речь заводить не стоит, ибо вряд ли он поддерживает его отображение.

Должно, не должно – определяется цветовой схемой и плагином.

Плюс поддержкой болда терминалом (не все поддерживают, да).

Если терминалом поддерживается, а схема делает не так как тебе надо, все можно переопределить: https://imgur.com/yeRQCs7

Ну и пример для вимрц:


func! ChangeMDHeaders() abort
    hi markdownH1 gui=Bold guifg=#ff0000
    hi markdownH2 gui=Bold guifg=#00cc00
    hi markdownH3 gui=Bold guifg=#0000ff
    hi markdownH4 gui=Bold guifg=#00ffff
    hi markdownH5 gui=Bold guifg=#ff00ff
    hi markdownH6 gui=Bold guifg=#ff80ff
endfunc

augroup markdown_headers | au!
    au ColorScheme * call ChangeMDHeaders()
augroup end

colorscheme harlequin

habamax ★★ ()
Ответ на: комментарий от habamax

Отображение заголовков стало так как и должно быть.
А на счет отображения курсива, жирного, курсива+жирного и зачеркнутого шрифтов я имел ввиду не для конкретного случая с заголовками, а в общем понимании.
Т.е. как хотелось бы… к примеру, я редактирую файл *md в Vim’е. Если мне нужно сделать текст жирным, то я его заключаю в **двойные звездочки**.
Ну так вот, хотелось бы, чтобы при заключении текста в эти самые «звездочки» он становился жирным в самом Vim’е в том числе.
Как сейчас видно, что с курсивом все в порядке

https://d.radikal.ru/d17/2004/00/6a0f0654cedf.png

а вот жирный и зачеркнутый не поддерживаются.
Как бы это реализовать?
Эмулятор терминал установлен Konsole. Жирный судя по тому, что заголовки стали «жирными» поддерживается.

parnyagan ()
Ответ на: комментарий от parnyagan

а вот жирный и зачеркнутый не поддерживаются. Как бы это реализовать? Эмулятор терминал установлен Konsole. Жирный судя по тому, что заголовки стали «жирными» поддерживается.

Оно вообще-то из коробки должно быть https://imgur.com/xyeds9O

Покажи выхлоп :verbose hi markdownBold

habamax ★★ ()
Ответ на: комментарий от parnyagan

Похоже что-то с твоим вимом не так.

Покажи выхлоп

set filetype?

Проверь есть ли синтакс файл:

:e $VIMRUNTIME/syntax/markdown.vim

у меня один из последних:

" Vim syntax file
" Language:     Markdown
" Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
" Filenames:    *.markdown
" Last Change:  2020 Jan 14

habamax ★★ ()
Ответ на: комментарий от habamax

На set filetype? вывод filetype=.
На :e $VIMRUNTIME/syntax/markdown.vim
Вывод

" Vim syntax file
" Language:     Markdown
" Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
" Filenames:    *.markdown
" Last Change:  2016 Aug 29

там еще много чего, просто указал в соответситвии с Вашим примером.
Если судить по дате, то мой файл уже явно протух.
И да, может у меня версия Vim какая-то не полная? Я читал, что есть разные версии Vim’а. «Из коробки» у меня шел Vim-tiny. Я его снес и поставил Vim, если память не изменяет, командой sudo apt install vim. Я думал это и есть полная версия Vim’а.

parnyagan ()
Ответ на: комментарий от parnyagan

:set filetype=markdown

похоже тип файла не определяется

как паллиатив добавь в конфиг

au bufread,bufnew *.md set ft=markdown

по хорошему надо по другому решать, но я с телефона

habamax ★★ ()
Последнее исправление: habamax (всего исправлений: 1)
Ответ на: комментарий от habamax

На команду :set filetype=markdown ничего не произошло. В строке состояния отображается введенная команда :set filetype=markdown и все.

parnyagan ()
Ответ на: комментарий от habamax
"Сочетания клавиш
map  <C-o>  :NERDTreeToggle<CR>
map  <C-m>  :InstantMarkdownPreview<CR>
nnoremap <C-L> :nohl<CR><C-L>    "отключить подсветку поиска

"Настройка TAB'ов
set expandtab    "пробелы вместо TAB
set tabstop=4    "4 пробела в TAB'е
set shiftwidth=4
set smarttab
set softtabstop=4
retab    "заменить все существующие TAB'ы в соответситвии с текущими параметрами

"Оформление
syntax on    "подсветка синтаксиса
filetype indent plugin on    "автоматическое определение типа файлов
set hlsearch    "подсветка результатов поиска
set incsearch    "подсветка результатов поиска по мере набора текста
"set termguicolors

"Colorscheme
func! ChangeMDHeaders() abort
    hi markdownH1 gui=Bold guifg=#ff0000
    hi markdownH2 gui=Bold guifg=#00cc00
    hi markdownH3 gui=Bold guifg=#0000ff
    hi markdownH4 gui=Bold guifg=#00ffff
    hi markdownH5 gui=Bold guifg=#ff00ff
    hi markdownH6 gui=Bold guifg=#ff80ff
endfunc

colorscheme harlequin    "цветовая схема
set background=dark    "цвет фона

"Разное
set ruler    "положение курсора в документе
set autoindent    "автоотступ
"set number    "нумерация строк

"Мышь
set mousehide    "прятать курсор мыши при наборе текста
"set mouse=a    "поддержка мыши

"Кодировка текста
set termencoding=utf-8    "кодировка терминала
set encoding=utf-8    "кодировка файлов по умолчанию
set fileencodings=utf8,cp1251

"Отключить .swp и ~ (резервные) файлы
set nobackup
set noswapfile
set clipboard=unnamed

"Vim-plug
call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree', { 'on':  'NERDTreeToggle' }    "NERDTree
Plug 'suan/vim-instant-markdown', { 'for':  'markdown' }    "vim-instant-markdown
Plug 'jiangmiao/auto-pairs'    "Auto Pairs
Plug 'nielsmadan/harlequin'    "harlequin
call plug#end()

"vim-instant-markdown
let g:instant_markdown_browser = "firefox --new-window"    "открыть предпросмотр в новом окне браузера
let g:instant_markdown_autostart = 0    "отключить автозапуск окна предпросмотра
"let g:instant_markdown_slow = 1    "отключить обновление экрана в режиме Real-Time
"let g:instant_markdown_open_to_the_world = 1    "по умолчанию сервер слушает только на localhost, чтобы сделать сервер доступным для всех в сети, включить данную опцию
"let g:instant_markdown_allow_unsafe_content = 1    "разрешить выполнение скриптов
"let g:instant_markdown_allow_external_content = 0    "заблокировать внешние ресурсы, такие как изображения, таблицы стилей, рамок и плагинов
"let g:instant_markdown_mathjax = 1
"let g:instant_markdown_logfile = '/tmp/instant_markdown.log'
"let g:instant_markdown_autoscroll = 0    "автопереход к местоположению курсора
"let g:instant_markdown_port = 8888    "выбрать другой порт, а не 8090
"let g:instant_markdown_python = 1
parnyagan ()
Ответ на: комментарий от parnyagan

На первый взгляд – выглядит норм, но есть странности.

  1. Говоришь что заголовки маркдауна у тебя работают и даже функция из предыдущего топика есть, но автокоманды, которая ее вызывает – нет.

  2. Странно то, что у тебя set filetype=markdown не имеет никакого эффекта. Открой свой вимрс (подсветка синтаксиса там есть?) и покажи выхлоп :verbose set filetype?

  3. Проверь существует ли :e $VIMRUNTIME/ftplugin/markdown.vim

  4. Если существует, открой свой маркдаун файл, сделай set filetype=markdown и покажи выхлоп hi markdownBold и hi htmlBold

PS, :version тоже покажи

habamax ★★ ()
Ответ на: комментарий от parnyagan

И да, на всякий случай добавь в начало своего конфига:

set nocp

В «новых» версиях вима это делать необязательно, если у тебя есть вимрц. В «старых» версиях это нужно делать, иначе он в совместимом с ви состоянии, где много чего не работает.

habamax ★★ ()
Последнее исправление: habamax (всего исправлений: 1)
Ответ на: комментарий от parnyagan

Поменяй местами:

filetype indent plugin on    "автоматическое определение типа файлов
syntax on    "подсветка синтаксиса
habamax ★★ ()
Ответ на: комментарий от habamax
 version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Mar 18 2020 18:29:15)
Заплатки: 1-1453
С изменениями, внесёнными pkg-vim-maintainers@lists.alioth.debian.org
Скомпилирован  pkg-vim-maintainers@lists.alioth.debian.org
Огромная версия без графического интерфейса.
  Включённые (+) и отключённые (-) особенности:
+acl               +cursorshape       +job               -mouse_sysmouse    +scrollbind        +virtualedit
+arabic            +dialog_con        +jumplist          +mouse_urxvt       +signs             +visual
+autocmd           +diff              +keymap            +mouse_xterm       +smartindent       +visualextra
-autoservername    +digraphs          +lambda            +multi_byte        +startuptime       +viminfo
-balloon_eval      -dnd               +langmap           +multi_lang        +statusline        +vreplace
+balloon_eval_term -ebcdic            +libcall           -mzscheme          -sun_workshop      +wildignore
-browse            +emacs_tags        +linebreak         +netbeans_intg     +syntax            +wildmenu
++builtin_terms    +eval              +lispindent        +num64             +tag_binary        +windows
+byte_offset       +ex_extra          +listcmds          +packages          +tag_old_static    +writebackup
+channel           +extra_search      +localmap          +path_extra        -tag_any_white     -X11
+cindent           +farsi             -lua               -perl              -tcl               -xfontset
-clientserver      +file_in_path      +menu              +persistent_undo   +termguicolors     -xim
-clipboard         +find_in_path      +mksession         +postscript        +terminal          -xpm
+cmdline_compl     +float             +modify_fname      +printer           +terminfo          -xsmp
+cmdline_hist      +folding           +mouse             +profile           +termresponse      -xterm_clipboard
+cmdline_info      -footer            -mouseshape        -python            +textobjects       -xterm_save
+comments          +fork()            +mouse_dec         +python3           +timers
+conceal           +gettext           +mouse_gpm         +quickfix          +title
+cryptv            -hangul_input      -mouse_jsbterm     +reltime           -toolbar
+cscope            +iconv             +mouse_netterm     +rightleft         +user_commands
+cursorbind        +insert_expand     +mouse_sgr         -ruby              +vertsplit
            общесистемный файл vimrc: "$VIM/vimrc"
         пользовательский файл vimrc: "$HOME/.vimrc"
  второй пользовательский файл vimrc: "~/.vim/vimrc"
          пользовательский файл exrc: "$HOME/.exrc"
       defaults file: "$VIMRUNTIME/defaults.vim"
          значение $VIM по умолчанию: "/usr/share/vim"
Параметры компиляции: gcc -c -I. -Iproto -DHAVE_CONFIG_H   -Wdate-time  -g -O2 -fdebug-prefix-map=/build/vim-dfCUyu/vim-8.0.1
453=. -fstack-protector-strong -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Сборка: gcc   -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim        -lm -ltinfo -lnsl  -lselinux  -l
acl -lattr -lgpm -ldl     -L/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu -lpython3.6m -lpthread -ldl -lutil -lm
parnyagan ()
Ответ на: комментарий от parnyagan

Версия не совсем мамонт и все нужные фичи для подсветки синтаксиса есть.

Еще что можно посмотреть (после всех предыдущих выхлопов):

  1. открой vim
  2. сразу :set filetype=markdown
  3. выхлоп :scriptnames
habamax ★★ ()
Ответ на: комментарий от habamax

Открой свой вимрс (подсветка синтаксиса там есть?)

https://d.radikal.ru/d37/2004/04/1ea538e56c74.png

покажи выхлоп :verbose set filetype?

filetype=markdown
        В последний раз опция изменена в /usr/share/vim/vim80/filetype.vim

На команду :set filetype=markdown в командной строке Vim’а так и остается set filetype=markdown.

Проверь существует ли :e $VIMRUNTIME/ftplugin/markdown.vim

" Vim filetype plugin
" Language:     Markdown
" Maintainer:       Tim Pope <vimNOSPAM@tpope.org>
" Last Change:      2016 Aug 29

сделай set filetype=markdown

:set filetype=markdown

покажи выхлоп hi markdownBold

:hi markdownBold
markdownBold   xxx links to htmlBold

и hi htmlBold

:hi htmlBold
htmlBold       xxx term=bold cterm=bold gui=bold
parnyagan ()
Ответ на: комментарий от habamax

сразу :set filetype=markdown

:set filetype=markdown

выхлоп :scriptnames

1: /usr/share/vim/vimrc
  2: /usr/share/vim/vim80/debian.vim
  3: /usr/share/vim/vim80/syntax/syntax.vim
  4: /usr/share/vim/vim80/syntax/synload.vim
  5: /usr/share/vim/vim80/syntax/syncolor.vim
  6: /usr/share/vim/vim80/filetype.vim
  7: ~/.vimrc
  8: /usr/share/vim/vim80/syntax/nosyntax.vim
  9: /usr/share/vim/vim80/ftplugin.vim
 10: /usr/share/vim/vim80/indent.vim
 11: ~/.vim/colors/harlequin.vim
 12: ~/.vim/autoload/plug.vim
 13: /usr/share/vim/vim80/ftoff.vim
 14: ~/.vim/plugged/auto-pairs/plugin/auto-pairs.vim
 15: /usr/share/vim/vim80/plugin/getscriptPlugin.vim
 16: /usr/share/vim/vim80/plugin/gzip.vim
 17: /usr/share/vim/vim80/plugin/logiPat.vim
 18: /usr/share/vim/vim80/plugin/manpager.vim
 19: /usr/share/vim/vim80/plugin/matchparen.vim
 20: /usr/share/vim/vim80/plugin/netrwPlugin.vim
 21: /usr/share/vim/vim80/plugin/rrhelper.vim
 22: /usr/share/vim/vim80/plugin/spellfile.vim
 23: /usr/share/vim/vim80/plugin/tarPlugin.vim
 24: /usr/share/vim/vim80/plugin/tohtml.vim
 25: /usr/share/vim/vim80/plugin/vimballPlugin.vim
 26: /usr/share/vim/vim80/plugin/zipPlugin.vim
parnyagan ()
Ответ на: комментарий от parnyagan

В общем твой плагин менеджер выключает filetype.

хз почему, пока.

Попробуй без плагинов запустить – закомменть все plug#begin и до plug#end

habamax ★★ ()
Последнее исправление: habamax (всего исправлений: 1)
Ответ на: комментарий от parnyagan

А судя по этому все нормально и болд должен показываться.

Т.е. у тебя вся подсветка маркдауна есть и только болд не показывается?

:set ft=markdown
:syntax on

?

habamax ★★ ()
Ответ на: комментарий от parnyagan

Ну и, собственно, с чего надо было начинать:

vim --clean
:set ft=markdown

написать текст:

**hello world**
habamax ★★ ()
Ответ на: комментарий от habamax

Уже что только не перепробовал - нет эффекта.
Текст при вводе **hello world** жирным НЕ становится!
Это может быть из-за системных шрифтов или из-за шрифта, который выбран в Konsole - Настройка профиля - Внешний вид - Шрифт?
Может не в ту сторону копаем?

parnyagan ()
Ответ на: комментарий от parnyagan

Попробуй другой эмулятор терминала - рекомендую Alacrtitty - он простой, но быстрый и по KISS.

peregrine ★★★★★ ()
Ответ на: комментарий от parnyagan

Сложно сказать.

Если у тебя жирный шрифт работает для заголовков, то должен работать и для всего остального.

поставь графический вим, проверь в нем. Если в нем заработает, то значит проблема в эмуляторе терминала и надо копать туда. Если там не заработает – проблема в установленном виме.

habamax ★★ ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей