Сделайте так, чтобы функция VIM возвращала текст без отступа - PullRequest
1 голос
/ 14 ноября 2011

Полагаю, этот вопрос можно решить двумя способами ...

  1. (универсальный) - есть ли способ указать «локальные» настройки функции (setlocal изменения кажутся постоянными после вызова функции) ...

  2. (Определенно) - у меня есть функция, которая вызывается из отображения imap (который принимает пользовательский ввод для передачи в функцию. Функция отлично работает, если я запускаю set paste или set noai | set nosi либо непосредственно перед запуском моего ярлыка или добавлением в саму функцию. Проблема в том, каким образом я это делаю, эти настройки сохраняются после вызова моей функции.

По сути, мой рабочий процесс:

  1. В режиме вставки введите ////, после чего мне будет предложено ввести текст, который я ввожу, и нажмите клавишу ввода.
  2. Функция вызывается с моего ввода. Мне нужна функция для отключения отступов, возврата строки и повторного включения предыдущих настроек. Строка будет просто комментарием к PHP-блоку:

    /**
     * Blah {INPUT TEXT}
     */
    

Любые предложения приветствуются. Мой сценарий в настоящее время выглядит так:

function CommentInjector(txt)
  return "\/**" ."\<CR>"
  \    . " * foo " . a:txt . " bar " . "\<CR>"
  \    . " */"
endfunction
imap <silent> //// <C-R>=CommentInjector(input("Enter some text:"))<CR>

UPDATE

Удалось по крайней мере понять, как создать комментарий ... Хотелось бы узнать, как получить / восстановить настройки ...

function! CommentInjector(txt)
  set paste

  exe "normal! i/**\<CR>"
  \          . " * fooo " . a:txt . " bar\<CR>"
  \          . " */\<Esc>"

  set nopaste
endfunction

map <C-C><C-C><C-C> :call CommentInjector(input("Enter some text:"))<CR>

Используя это, вы можете просто нажать Ctrl + C 3 раза, ввести текст при появлении запроса и получить хороший комментарий. Он предполагает, что перед запуском вы отключили «set paste» ...

1 Ответ

1 голос
/ 14 ноября 2011

Поскольку вы опубликовали обновление и действительно просто смотрите, как сохранить / восстановить настройки, я дам общее решение.

  • В начале вашей функции сохраните начальное значение настройки: let save_paste = &paste
  • Внесите любые изменения в paste, которые вы хотите сделать
  • Восстановите его в конце: let &paste = save_paste

Пример этого можно найти в документации к :help use-cpo-save, где говорится о сохранении и восстановлении значения cpoptions.

...