#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:
- Сначала добавьте все значения в переменную, а затем вызовите put.
:let a="" | for i in range(1,10) | let a.='"eof'.i.'", ' | endfor | put =a
: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
Вы имели в виду создать функцию для ввода входных данных в новый массив?