Использование цикла for для вставки слов с индексом, добавленным в vim

#vim

Вопрос:

Не раз мне приходилось вставлять некоторые варианты слов в список на python, например:

 intf = ["eno1", "eno2", "eno3", "eno4", "eno5", "eno6", "eno7", "eno8", "eno9", "eno10"]
 

Возможно, есть простой способ вставить эти слова с помощью цикла for?
Я нашел это:
https://renenyffenegger.ch/notes/development/vim/commands/put
что очень близко к тому, что я хочу сделать.
Так, например, я могу сделать:

 :for i in range(1,10) | put ='"eno'.i.'", ' | endfor
 

что дает мне:

 "eno1",
"eno2",
...
 

Единственная разница в том, что он вставляет каждое слово в новую строку.
Возможно, есть вариант этого, который вставляет слова все в одну строку?

Ответ №1:

  1. Сначала добавьте все значения в переменную, а затем вызовите put.
 :let a="" | for i in range(1,10) | let a.='"eof'.i.'", ' | endfor | put =a
 
  1. Чтобы удалить окончание « , , мы также можем добавить значения в список, а затем вызвать join
 :let a=[] | for i in range(1,10) | call add(a,'"eof'.i.'"') | endfor | put =join(a, ', ')
 

Ответ №2:

Почему бы вам просто не сгенерировать этот список непосредственно в своем коде?

 intf = []
for i in range(1, 11):
    intf.append('eno'   str(i))
 

Если вы настаиваете на том, чтобы сделать это в Vim с функциями Vim:

 intf = <C-r>=range(1,10)->map('"eno" . v:val')->string()<CR>
 

См :help i_ctrl-r ., :help "= , :help range() , :help map() , :help string() , и :help method .

Комментарии:

1. Спасибо, смысл был в том, чтобы больше изучить функции vim. Аналогичный пример может появиться в формате json или любом другом формате только для данных.

2. Что ж, мой ответ содержит довольно чистое решение для Vim.

3. Хорошо, теперь я немного лучше понимаю ваше решение. Его просто нужно немного подправить. «intf =» был частью строкового литерала, поэтому мне не нужно создавать переменную vim с таким именем. Возможно, самый чистый способ использовать ваше решение-установить регистр в вашей функции, а затем использовать put с этим регистром. :пусть @i = «intf = <C-r>=диапазон(1,10)-<C-r>>карта(‘»eno» . v:val’)-<C-r>>>строка()<C-r>>><CR>» :поместите i Кстати, диапазон vim, кажется, включает.

4. Ответ исправлен. Идея состоит в том, чтобы напрямую ввести предоставленный фрагмент в режиме вставки. Нет необходимости в промежуточных регистрах или :put . Вы вводите intf = <C-r>=... текст в режиме вставки и получаете именно желаемый результат.

Ответ №3:

 let intf = ["eno1", "eno2", "eno3", "eno4", "eno5", "eno6", "eno7", "eno8", "eno9", "eno10"]

for i in intf

  echo i

endfor

q
 

Вы имели в виду создать функцию для ввода входных данных в новый массив?