Я не знаю то, что могло сделать это, sed, энергию, безотносительно. Позволяет говорят, что у меня есть 30 функций, для хранения этого простым, я покажу 3
#first function
AddOne = [
a+1==b, b+1==c
]
# second function
AddTwo = [
a+1==b, b+1==c
]
# third function
MultiplyByTwo = [
a+1==b, b+1==c, c+1==d
]
#Fourth Function
MultiplyByThree [
a+1==b, b+1==c, c+1==d
]
Этот небольшой пример, шоу, что я создал свои функции, способ, которым я хотел, они подобны первой функции, таким образом, я копирую вставляемый и изменил их имя и немного параметров. все, что я хочу сделать, должно заменить 1 на 2 дюйма AddTwo
функция и замена плюс питанием в третьей функции и той 2, и треть функционируют также и заменяют 1 на 3.
В основном у меня есть большой файл, полный функций, я хочу отредактировать эти функции на лету, заставить их сделать то, что я хочу, чтобы они сделали
это не должно быть полностью автоматическое решение. то, что я ищу, является некоторым плагином к некоторому текстовому редактору, который позволил бы мне выбирать текст и использовать поиск и инструмент замены на той определенной функции, все редакторы имеют поиск и заменяют инструменты, но они ищут весь файл, я хочу искать раздел кода, я выбираю использование мыши
Две возможности в энергии:
поиск и замена в визуальном выборе: выберите визуальный выбор (v
от нормального режима), и затем используйте:
:'<,'>s/1/3/g
Вы заметите это, если Вы нажмете ":" от визуального режима эти :'<,'>
появится автоматически, таким образом, необходимо только ввести команда замены и поиск;
(мой предпочтительный) редактируют в энергии, и когда на числе в нормальном режиме, CTRL-A увеличит его, CTRL-X постепенно уменьшит его---, это - один из самого полезного ярлыка в энергии...
Не уверенный, если это - то, что Вы ищете.
Ниже сценария с с Вами может изменить имя, цифра и оператор функций их индексом (0 = сначала функционируют).
В заголовке сценария Вы устанавливаете список кортежей с желаемыми настройками, как:
[(index, ("NewName"), ("digit"), ("operator")), (index, ("NewName"), ("digit"), ("operator"))]
Можно выбрать любой индекс, который требуется изменить. Если один или несколько свойств не должен быть изменен, оставляет кортеж пустым.
Пример: только изменить имя функции с индексом 2 (третья функция, с тех пор 0 = первое):
[(2, ("NewName"), (), ())]
Изменить первые две функции:
changes = [(0, ("FuncName1"), ("2"), ("+")), (1, ("FuncName2"), ("2"), ("**"))]
Этот сценарий мог главным образом иметь применение, если Вы сохраняете различные наборы функциональных свойств путем сохранения отличающимися changes =
строки, и комментирующий все кроме того Вам в настоящее время нужно, например.
Скопируйте сценарий ниже в пустой файл, установите желаемые параметры для функций, чтобы измениться, путь к файлу, сохранить его как script.py и выполнить его:
python3 /path/to/script.py
Сценарий:
#!/usr/bin/env python3
# function / name / digit / operator
# (example)
changes = [(0, ("Name1"), (), ()), (1, ("Name2"), ("2"), ("**"))]
subject_file = "/path/to/file_withfunctions"
operators = ["+", "-", "*"] # ** has been taken care of in the script, you can use it in the "changes" line
with open(subject_file) as sample:
lines = [line for line in sample.readlines()]
def first_occurrence(index, string, lines):
area = lines[index:]
func_line = [[i, area[i]] for i in range(len(area))if string in area[i]][0]
func_line[0] = func_line[0]+index
return func_line
functiondata = [[[i, lines[i]],first_occurrence(i, "==", lines)] for i in range(len(lines)) if "[" in lines[i]]
for item in changes:
subject = functiondata[item[0]]
if len(item[1]) != 0: # name
name = subject[0][1].split()[0]
newname = item[1]
lines[subject[0][0]] = lines[subject[0][0]].replace(name, newname)
if len(item[2]) != 0: # digit
or_line = subject[1][1]
character = [ch for ch in or_line if ch.isdigit()][0]
new_line = or_line.replace(character, item[2])
lines[subject[1][0]] = new_line
if len(item[3]) != 0: # operator
or_line = new_line
if "**" in or_line:
new_line = or_line.replace("**", item[3])
else:
character = [ch for ch in operators if ch in or_line][0]
lines[subject[1][0]] = new_line
new_line = or_line.replace(character, item[3])
lines[subject[1][0]] = new_line
with open(subject_file, "wt") as sample:
for line in lines:
sample.write(line)
Emacs имеет средство, которое Вы могли бы найти полезным. Это называют Счетчиком Макроса Клавиатуры.
, Например, при вводе следующей последовательности при определении макроса
C-x C-k C-i C-x C-k C-i C-u C-x C-k C-i C-x C-k C-i
текст вЂ0112’ вставляется в буфер, и для первого и второго выполнения макроса вЂ3445’, и вЂ6778’ вставляются.
Read больше на страница EmacsWiki о Счетчиках Макроса Клавиатуры .
, Если Вы никогда не использовали emacs макросы клавиатуры для выполнения интерактивной работы поиска/замены, Вы также захотите считать основное страница о макросах клавиатуры .