2017-02-16 7 views
1

Например, предположим, что я хочу реализовать плагин, который рисует линию поля в 80 столбцах с использованием пользовательских символов (предположим, что я хочу, чтобы строка была сделана из столбца * символов).В Vim/NeoVim, как рисовать внутри текстового буфера без изменения содержимого

Как это можно сделать в Vim или Neovim?

Но более универсально, есть ли способ нарисовать материал над текстовым буфером, не затрагивая текстовое содержимое?

Например, как я могу нарисовать внутренний прямоугольник внутри окна, который я могу сделать ярким, чтобы показать активное окно? Эффект будет заключаться в том, что первая строка видимой строки того, что в настоящее время является текстовым буфером, будет заполнена символами ---, правый столбец того, что в настоящее время является текстовым буфером, будет заполнен |. Это будет внутри окна, отдельно от линий состояния или вертикальных разделенных линий.

И т.д. Как это сделать?

Некоторые плагины, которые в настоящее время рисовать поверх текстового буфера по-разному:

+0

Будет ли вместо этого 'colorcolumn = 80'' работать? См. ': H 'cc'' –

ответ

2

EasyMotion не перетянуть текст, я не думаю, что это возможно , Что она делает определяется в следующих функции (sourcecode):

function! EasyMotion#helper#VarReset(var, ...) "{{{ 
if ! exists('s:var_reset') 
    let s:var_reset = {} 
endif 

if a:0 == 0 && has_key(s:var_reset, a:var) 
    " Reset var to original value 
    " setbufvar(or bufname): '' or '%' can be used for the current buffer 
    call setbufvar('%', a:var, s:var_reset[a:var]) 
elseif a:0 == 1 
    " Save original value and set new var value 

    let new_value = a:0 == 1 ? a:1 : '' 

    " Store original value 
    let s:var_reset[a:var] = getbufvar("", a:var) 

    " Set new var value 
    call setbufvar('%', a:var, new_value) 
endif 
endfunction "}}} 

Так что сохраняет каждый символ заменяется и восстанавливает их после этого. Я не смотрел на indentLine, но он, вероятно, делает интеллектуальные списки, поскольку текст под indentchar отсутствует.

В любом случае, это не так, как если бы я был экспертом по одному из плагинов или vim в целом. Я просто пишу этот ответ, потому что думаю, что есть более простой способ добиться того, чего вы хотите. Например, вы можете выделить граничные линии с определенным цветом или изменить фон для активного разделения. Существует также плагин для затемнения неактивных расщеплений: https://github.com/blueyed/vim-diminactive

+0

Я думаю, мне нравится vim, но хотелось бы, чтобы это было как-то более современно с возможностями рисования GUI. Может быть, у нас это будет как через 20 лет. – trusktr

+0

Мне очень нравится отвлекающее внимание на vim. Я думаю, что большую часть времени я желаю для некоторых возможностей графического интерфейса, потому что я использую vim неправильно (я не хочу сказать, что имеет место в вашем вопросе), и это занимает много времени, чтобы привыкнуть к нему , и мне еще предстоит пройти долгий путь =). Но причина в том, что мы привыкли к большому количеству текстовых редакторов, которые делают вещи «неправильно/не vim». Если бы мы начали с vim, это было бы прекрасно. –

+0

Правда, но есть основной стиль пользовательского интерфейса, что текстовый интерфейс просто не может быть достигнут. В графическом интерфейсе очень легко нарисовать полезные вещи, такие как направляющие отступов (плагины vim - это хаки, которые не работают хорошо), мини-карты с полезной раскраской и символами и другие вещи, которые невозможны в текстовом интерфейсе , и это не обязательно является недостатком того, как используется Vim. Даже если вы являетесь мастером Vim, что-то вроде мини-карты может по-прежнему быть полезным для тех людей, которые очень визуальны. – trusktr