vim как быстро создать сообщение отладки - PullRequest
1 голос
/ 27 июня 2010

Я использую ruby ​​на рельсах, но это не имеет большого значения для этого вопроса.Допустим, у меня есть следующее утверждениепоработайте слева от левой части =, а затем создайте еще одну строку вместе с шаблоном, показанным выше.

Я использую mvim на MacЛюбой указатель с точки зрения того, где я должен начать искать то, что я хочу.

Ответы [ 4 ]

3 голосов
/ 28 июня 2010

Я записал простой макрос, который делает ваш образец. Для записи макроса введите q , за которым следует регистр, в который вы хотите вставить макрос (условные обозначения q q ). Для воспроизведения макроса наберите @ , затем регистр макроса. Вы можете просмотреть это на :help recording

Чтобы написать макрос, используйте следующие команды (и вот как это должно выглядеть в регистре)

^yEoputs "error = #{^Op.inspect}"^[

^ перемещается к первому непробельному символу строки

yE переводит слово в конец пробела.

o Переводит вас в режим вставки на следующей строке

puts "error = #{ - это текст, который вы вводите

^O - это ctrl + O (заглавная буква o) - это позволяет следующей и только следующей команде выполняться в командном режиме, который ...

p Помещает восстановленное слово, после выполнения этой команды вы все еще находитесь в режиме вставки

.inspect}" - это текст, который вы вводите и, наконец, ...

^[ is Esc

3 голосов
/ 27 июня 2010

Попробуйте снипмат: http://www.vim.org/scripts/script.php?script_id=2540

0 голосов
/ 28 июня 2010

Если вы делаете это на лету, фрагмент кода может выглядеть следующим образом:

${1:error} = '${2:error message here}'
puts "error = #{$1.inspect}"

Если, с другой стороны, вы просто хотите вывести ранее существующие переменные для целей отладки,Макрос Ника-Канцонери может быть более полезным.

0 голосов
/ 28 июня 2010

Я бы пошел на:

nnoremap µ :s/^\s*\(\k\+\)\s*=.*/&\rputs "\1 = #{\1.inspect}"/<cr>

:s представляет преимущество выполнения работы плюс соответствие назначенной переменной, если таковая имеется.Делать то же самое с классическими командами, такими как yw, p и т. Д., Было бы более громоздким.

Если шаблон становится более сложным, мы можем положиться на расширители файла шаблона, если они легко позволяютвызовите функцию viml, например matchstr().Конечно, в этом случае я бы использовал mu-template со следующим файлом-шаблоном:

VimL:" $Id: {rtp}/template/ruby/inspect.template
VimL: let s:value_start  = '¡'
VimL: let s:value_end    = '¡'
VimL: let s:reindent     = 1
VimL: let s:marker_open  = '<+'
VimL: let s:marker_close = '+>'
VimL: let s:varname = matchstr(getline(line('.')-1), '^\s*\zs\k\+\ze\s*=')
VimL: if empty(s:varname) |throw "the previous line don't assign any variable" |endif
puts "¡s:varname¡ = #{¡s:varname¡.inspect}"<++>
VimL:"vim: encoding=utf-8
...