我正在尝试使用Sublime“在文件中查找”将多个单词替换为多个文件中的另一个单词,例如:
Dog -> Cat
Hat -> Shoe
Farm -> City
在记事本++中,我可以使用以下查找和替换条件来执行此操作:
Find: (Dog)|(Hat)|(Farm)
Replace: (?1Cat)(?2Shoe)(?3City)
答案 0 :(得分:0)
此解决方案在Mac上,但我确定PC的解决方案是相同的。如果您在Sublime中拖放或打开目录:
在Mac上,它是快捷键 shift + cmd + f ,它位于Find -> Find in Files...
下,但输入您的查找并替换:
单击“替换”,系统将提示您:
点击替换按钮后,应将foo
替换为bar
。
对于单个实例中的多个查找和替换,我不记得Sublime开箱即用,但有一个Gist可以参考,可以实现您正在做的事情:
# This script allows you to do multiple find/replace operations in one pass. The find/replace
# pairs are defined in a file (defaults to ~/.st2_multiple_find_replace) using the format
#
# find <separator> replace
# By default, the separator is the hash-pointer (=>), but it can be changed if
# necessary (see below). To use multiple find and replace, save this code to a file in
# your Packages/User folder using whatever name you like. I use multiple_find_replace.py.
# Edit your user key bindings and pick whatever key combinations you want to trigger
# these operations. On Mac OS X, I chose COMMAND+OPTION+M E to edit and COMMAND+OPTION+M R
# to replace. The actual key bindings are:
#
# { "keys": ["super+alt+m", "f"], "command": "multiple_find_replace", "args": {"operation": "find"} },
# { "keys": ["super+alt+m", "r"], "command": "multiple_find_replace", "args": {"operation": "replace"} }
#
# When you issue the multiple_find_replace command, if the file does not exist, it will
# be created and opened for editing. If the file does exist, it will be parsed for
# find/replace pairs and the current file will be the operation's subject. In order to
# edit your find/replace pairs, issue the edit_multiple_find_replace command, which
# will either open or activate the search term file.
#
# To change the separator used in the search term file, include a comment at the top of
# the file like this:
#
# separator: ==
#
# changing the double equal to whatever ever separator you want to use. The script will
# then use that separator to split the line when parsing the find/replace pairs.
#
# All find/replace operations are done in a single edit, so a single undo returns the
# subject text to its original state. Also of importance is the pairs are processed
# in the order they appear in the file.
#
# At present, the find/replace operations work against the entire buffer. A future
# enhancement would be to operate against a selection only.
import sublime, sublime_plugin
import os
class MultipleFindReplaceCommand(sublime_plugin.WindowCommand):
def run(self, operation):
self.file_name = os.path.expanduser('~/.st2_multiple_find_replace')
self.separator_key = 'separator:'
self.separator = '=>'
self.lines = None
self.ensure_multiple_find_replace_file()
if operation == 'find':
self.find()
else:
self.replace()
def ensure_multiple_find_replace_file(self):
if not os.path.exists(self.file_name):
contents = "# Put one find/replace pair on each line, separated by a separator. For example:\n"
contents += "\n"
contents += "ReplaceThis => WithThis\n"
contents += "\n"
contents += "# The default separator is =>. To change it, put the following line at the top\n"
contents += "# of this file, replacing the double equal with whatever you want the separator\n"
contents += "# to be:\n"
contents += "\n"
contents += "# separator: ==\n"
with open(self.file_name, 'a') as the_file:
the_file.write(contents)
def find(self):
self.window.open_file(self.file_name)
def replace(self):
self.load_file()
view = self.window.active_view()
edit = view.begin_edit()
for line in self.lines:
if line.startswith('#'):
continue
try:
find, replace = line.split(self.separator)
except:
continue
find = find.strip()
replace = replace.strip()
matches = view.find_all(find)
matches.reverse()
for region in matches:
view.replace(edit, region, replace)
view.end_edit(edit)
def load_file(self):
input_file = open(self.file_name, 'r')
self.lines = input_file.readlines()
input_file.close()
for line in self.lines:
if line.startswith('#'):
pos = line.find(self.separator_key)
if pos > 0:
junk, separator = line.split(self.separator_key)
self.separator = separator.strip()
break
答案 1 :(得分:0)
看看RegReplace。这是一个simple guide,它描述了配置和使用此包的步骤。