diff --git a/README.md b/README.md
index 5063d0f..98f70a6 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,7 @@ Doc View
 - 支持在 Controller 内右键唤出菜单, 显示 Controller 内的接口文档。
 - 支持在 Controller 的方法内右键唤出菜单, 显示该方法内的接口文档。
 - 支持复制为 Markdown 到剪贴板。
+- 支持导出 Markdown 文件。
 - 其他一些小功能点。
 
 **注:因 API 问题,新插件仅支持 2020.1 和 2020.2 版本 。**
@@ -36,9 +37,10 @@ Doc View
 更新
 ----
 
-## [v1.0.1](https://github.com/liuzhihang/doc-view/releases/tag/v1.0.1) (2020-11-03)
+## [v1.0.2](https://github.com/liuzhihang/doc-view/releases/tag/v1.0.2) (2020-11-15)
 
-- 修复请求路径拼装错误
+- 新增配置页面(依旧不支持配置)
+- 新增导出单个为 Markdown 格式文件
 
 
 [查看更多历史更新记录](./doc/ChangeNotes.md)
diff --git a/doc/ChangeNotes.md b/doc/ChangeNotes.md
index 7f0fdc3..b06d787 100644
--- a/doc/ChangeNotes.md
+++ b/doc/ChangeNotes.md
@@ -1,5 +1,17 @@
 # ChangeNotes
 
+## [v1.0.2](https://github.com/liuzhihang/doc-view/releases/tag/v1.0.2) (2020-11-15)
+
+- 新增配置页面(依旧不支持配置)
+- 新增导出单个为 Markdown 格式文件
+
+
+## [v1.0.1](https://github.com/liuzhihang/doc-view/releases/tag/v1.0.1) (2020-11-03)
+
+- 去除支持 2020.3
+- 发布到插件仓库
+- 修复请求路径错误问题
+
 
 ## [v1.0.0](https://github.com/liuzhihang/doc-view/releases/tag/v1.0.0) (2020-11-01)
 
diff --git a/parts/changeNotes.html b/parts/changeNotes.html
index e38149f..b43a0d3 100644
--- a/parts/changeNotes.html
+++ b/parts/changeNotes.html
@@ -3,19 +3,18 @@
 
 <h4>English introduction</h4>
 <ul>
-    <li>1.0.1
+    <li>1.0.2
         <ol>
-            <li>Repair request path assembly error</li>
-
+            <li>Support exporting as Markdown file.</li>
         </ol>
     </li>
     <li><a href="https://github.com/liuzhihang/doc-view/blob/master/doc/ChangeNotes.md">More records</a></li>
 </ul>
 <h4>中文介绍</h4>
 <ul>
-    <li>1.0.1
+    <li>1.0.2
         <ol>
-            <li>修复请求路径拼装错误</li>
+            <li>支持导出为 Markdown 文件。</li>
         </ol>
     </li>
     <li><a href="https://github.com/liuzhihang/doc-view/blob/master/doc/ChangeNotes.md">更多记录</a></li>
diff --git a/parts/pluginDescription.html b/parts/pluginDescription.html
index 3e0da9f..d29f299 100644
--- a/parts/pluginDescription.html
+++ b/parts/pluginDescription.html
@@ -29,8 +29,7 @@ <h1>An IntelliJ IDEA plug-in that can directly generate Markdown documents throu
         the method.
     </li>
     <li>Support copying as Markdown to clipboard.</li>
-    <li>Some other small features.</li>
-
+    <li>Support exporting as Markdown file.</li>
 </ul>
 <br/>
 
@@ -46,7 +45,7 @@ <h1>An IntelliJ IDEA plug-in that can directly generate Markdown documents throu
     <li>支持在 Controller 内右键唤出菜单, 显示 Controller 内的接口文档。</li>
     <li>支持在 Controller 的方法内右键唤出菜单, 显示该方法内的接口文档。</li>
     <li>支持复制为 Markdown 到剪贴板。</li>
-    <li>其他一些小功能点。</li>
+    <li>支持导出为 Markdown 文件。</li>
 </ul>
 <br/>
 
diff --git a/src/main/java/com/liuzhihang/doc/view/action/EditorPreviewAction.java b/src/main/java/com/liuzhihang/doc/view/action/EditorPreviewAction.java
index d1d264b..6395d7c 100644
--- a/src/main/java/com/liuzhihang/doc/view/action/EditorPreviewAction.java
+++ b/src/main/java/com/liuzhihang/doc/view/action/EditorPreviewAction.java
@@ -5,22 +5,16 @@
 import com.intellij.openapi.actionSystem.AnActionEvent;
 import com.intellij.openapi.actionSystem.CommonDataKeys;
 import com.intellij.openapi.actionSystem.PlatformDataKeys;
-import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.editor.Editor;
 import com.intellij.openapi.project.Project;
-import com.intellij.openapi.ui.DialogWrapper;
 import com.intellij.psi.PsiClass;
 import com.intellij.psi.PsiFile;
 import com.intellij.psi.PsiMethod;
 import com.liuzhihang.doc.view.component.Settings;
-import com.liuzhihang.doc.view.dto.DocView;
-import com.liuzhihang.doc.view.service.DocViewService;
-import com.liuzhihang.doc.view.ui.PreviewForm;
+import com.liuzhihang.doc.view.service.SpringDocViewService;
 import com.liuzhihang.doc.view.utils.CustomPsiUtils;
 import com.liuzhihang.doc.view.utils.NotificationUtils;
 
-import java.util.Map;
-
 /**
  * @author liuzhihang
  * @date 2020/2/26 21:57
@@ -58,26 +52,21 @@ public void actionPerformed(AnActionEvent e) {
 
         Settings settings = project.getService(Settings.class);
 
-        // 不是接口 且不包含指定的注解
-        if (!targetClass.isInterface() && !AnnotationUtil.isAnnotated(targetClass, settings.getContainClassAnnotationName(), 0)) {
-            NotificationUtils.errorNotify("The current class is not an interface and has no Spring annotations", project);
+
+        if (targetClass.isInterface()) {
+            NotificationUtils.errorNotify("The current version does not support the interface", project);
             return;
         }
 
-        // 当前方法
-        PsiMethod targetMethod = CustomPsiUtils.getTargetMethod(editor, psiFile);
+        // Spring
+        if (AnnotationUtil.isAnnotated(targetClass, settings.getContainClassAnnotationName(), 0)) {
 
-        // 生成文档列表
-        Map<String, DocView> docMap = DocViewService.getInstance().buildDocView(settings, targetClass, targetMethod);
+            SpringDocViewService.getInstance().doPreview(project, psiFile, editor, targetClass);
 
-        if (docMap == null || docMap.size() == 0) {
-            NotificationUtils.errorNotify("There is no public modification method in the class", project);
             return;
         }
 
-
-        DialogWrapper dialog = new PreviewForm(project, psiFile, editor, targetClass, docMap);
-        dialog.show();
+        NotificationUtils.errorNotify("Document generation is not supported here", project);
     }
 
 
diff --git a/src/main/java/com/liuzhihang/doc/view/service/DocViewService.java b/src/main/java/com/liuzhihang/doc/view/service/SpringDocViewService.java
similarity index 67%
rename from src/main/java/com/liuzhihang/doc/view/service/DocViewService.java
rename to src/main/java/com/liuzhihang/doc/view/service/SpringDocViewService.java
index 4edf4ee..158f4b9 100644
--- a/src/main/java/com/liuzhihang/doc/view/service/DocViewService.java
+++ b/src/main/java/com/liuzhihang/doc/view/service/SpringDocViewService.java
@@ -2,12 +2,16 @@
 
 import com.intellij.codeInsight.AnnotationUtil;
 import com.intellij.openapi.components.ServiceManager;
+import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.ui.DialogWrapper;
 import com.intellij.psi.*;
 import com.liuzhihang.doc.view.component.Settings;
 import com.liuzhihang.doc.view.dto.Body;
 import com.liuzhihang.doc.view.dto.DocView;
 import com.liuzhihang.doc.view.dto.Header;
 import com.liuzhihang.doc.view.dto.Param;
+import com.liuzhihang.doc.view.ui.PreviewForm;
 import com.liuzhihang.doc.view.utils.*;
 import org.apache.commons.lang3.StringUtils;
 import org.jetbrains.annotations.NotNull;
@@ -21,35 +25,45 @@
  * @author liuzhihang
  * @date 2020/3/3 13:32
  */
-public class DocViewService {
+public class SpringDocViewService {
 
 
-    public static DocViewService getInstance() {
-        return ServiceManager.getService(DocViewService.class);
+    public static SpringDocViewService getInstance() {
+        return ServiceManager.getService(SpringDocViewService.class);
     }
 
-    public Map<String, DocView> buildDocView(@NotNull Settings settings, @NotNull PsiClass psiClass, PsiMethod psiMethod) {
 
+    public void doPreview(@NotNull Project project, PsiFile psiFile, Editor editor, PsiClass targetClass) {
 
-        if (psiClass.isInterface()) {
-            // 接口按照dubbo接口生成
+        Settings settings = project.getService(Settings.class);
 
-        } else {
+        // 当前方法
+        PsiMethod targetMethod = CustomPsiUtils.getTargetMethod(editor, psiFile);
 
-            if (psiMethod != null) {
-                // 单个方法
-                DocView docView = buildClassMethodDoc(settings, psiClass, psiMethod);
-                Map<String, DocView> docMap = new HashMap<>(2);
-                if (docView != null) {
-                    docMap.put(docView.getName(), docView);
-                }
-                return docMap;
-            } else {
-                // 单个类 的所有方法
-                return buildClassDoc(settings, psiClass);
+        Map<String, DocView> docMap = new HashMap<>();
+
+        if (targetMethod != null) {
+
+            if (checkMethod(settings, targetMethod)) {
+                NotificationUtils.errorNotify("The method does not meet the conditions", project);
+                return;
+            }
+
+            DocView docView = buildClassMethodDoc(settings, targetClass, targetMethod);
+            docMap.put(docView.getName(), docView);
+
+        } else {
+            // 生成文档列表
+            docMap = buildClassDoc(settings, targetClass);
+            if (docMap.size() == 0) {
+                NotificationUtils.errorNotify("There is no public modification method in the class", project);
+                return;
             }
         }
-        return null;
+
+        DialogWrapper dialog = new PreviewForm(project, psiFile, editor, targetClass, docMap);
+        dialog.show();
+
     }
 
     @NotNull
@@ -58,29 +72,21 @@ private Map<String, DocView> buildClassDoc(Settings settings, @NotNull PsiClass
         Map<String, DocView> docMap = new HashMap<>(32);
 
         for (PsiMethod method : psiClass.getMethods()) {
-            DocView docView = buildClassMethodDoc(settings, psiClass, method);
-            if (docView != null) {
-                docMap.put(docView.getName(), docView);
+
+            if (checkMethod(settings, method)) {
+                continue;
             }
+
+            DocView docView = buildClassMethodDoc(settings, psiClass, method);
+            docMap.put(docView.getName(), docView);
         }
 
         return docMap;
     }
 
-    private DocView buildClassMethodDoc(Settings settings, PsiClass psiClass, @NotNull PsiMethod psiMethod) {
+    @NotNull
+    public DocView buildClassMethodDoc(Settings settings, PsiClass psiClass, @NotNull PsiMethod psiMethod) {
 
-        if (!CustomPsiModifierUtils.hasModifierProperty(psiMethod, PsiModifier.PUBLIC)) {
-            return null;
-        }
-        if (CustomPsiModifierUtils.hasModifierProperty(psiMethod, PsiModifier.STATIC)) {
-            return null;
-        }
-        if (psiMethod.isConstructor()) {
-            return null;
-        }
-        if (!AnnotationUtil.isAnnotated(psiMethod, settings.getContainMethodAnnotationName(), 0)) {
-            return null;
-        }
         // 请求路径
         String path = CustomPsiAnnotationUtils.getPath(psiClass, psiMethod);
 
@@ -157,4 +163,27 @@ private DocView buildClassMethodDoc(Settings settings, PsiClass psiClass, @NotNu
         return docView;
     }
 
+    /**
+     * 检查方法是否满足条件
+     *
+     * @param settings
+     * @param psiMethod
+     * @return true 不满足条件
+     */
+    private boolean checkMethod(Settings settings, @NotNull PsiMethod psiMethod) {
+        if (!CustomPsiModifierUtils.hasModifierProperty(psiMethod, PsiModifier.PUBLIC)) {
+            return true;
+        }
+        if (CustomPsiModifierUtils.hasModifierProperty(psiMethod, PsiModifier.STATIC)) {
+            return true;
+        }
+        if (psiMethod.isConstructor()) {
+            return true;
+        }
+        if (!AnnotationUtil.isAnnotated(psiMethod, settings.getContainMethodAnnotationName(), 0)) {
+            return true;
+        }
+        return false;
+    }
+
 }
diff --git a/src/main/java/com/liuzhihang/doc/view/ui/Preview.form b/src/main/java/com/liuzhihang/doc/view/ui/Preview.form
index 48dbf0f..0489f09 100644
--- a/src/main/java/com/liuzhihang/doc/view/ui/Preview.form
+++ b/src/main/java/com/liuzhihang/doc/view/ui/Preview.form
@@ -13,82 +13,72 @@
     </properties>
     <border type="none"/>
     <children>
-      <grid id="fc2fd" binding="viewPanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
-        <margin top="0" left="0" bottom="0" right="0"/>
+      <splitpane id="91f69" binding="viewSplitPane">
         <constraints>
-          <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+          <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false">
+            <preferred-size width="200" height="200"/>
+          </grid>
         </constraints>
-        <properties/>
+        <properties>
+          <continuousLayout value="true"/>
+          <dividerLocation value="150"/>
+          <dividerSize value="-1"/>
+          <doubleBuffered value="false"/>
+          <enabled value="true"/>
+          <focusCycleRoot value="false"/>
+          <lastDividerLocation value="200"/>
+        </properties>
         <border type="none"/>
         <children>
-          <splitpane id="91f69" binding="viewSplitPane">
+          <scrollpane id="4cd8a" binding="leftScrollPane">
             <constraints>
-              <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false">
-                <preferred-size width="200" height="200"/>
-              </grid>
+              <splitpane position="left"/>
             </constraints>
             <properties>
-              <continuousLayout value="true"/>
-              <dividerLocation value="150"/>
-              <dividerSize value="-1"/>
-              <doubleBuffered value="false"/>
-              <enabled value="true"/>
-              <focusCycleRoot value="false"/>
-              <lastDividerLocation value="200"/>
+              <minimumSize width="100" height="-1"/>
+              <preferredSize width="150" height="-1"/>
             </properties>
             <border type="none"/>
             <children>
-              <scrollpane id="4cd8a" binding="leftScrollPane">
-                <constraints>
-                  <splitpane position="left"/>
-                </constraints>
+              <component id="b4f56" class="javax.swing.JList" binding="catalogList">
+                <constraints/>
                 <properties>
-                  <minimumSize width="100" height="-1"/>
-                  <preferredSize width="150" height="-1"/>
+                  <model/>
+                  <requestFocusEnabled value="true"/>
+                  <selectionBackground color="-11434241"/>
                 </properties>
-                <border type="none"/>
-                <children>
-                  <component id="b4f56" class="javax.swing.JList" binding="catalogList">
-                    <constraints/>
-                    <properties>
-                      <model/>
-                      <requestFocusEnabled value="true"/>
-                      <selectionBackground color="-11434241"/>
-                    </properties>
-                  </component>
-                </children>
-              </scrollpane>
-              <scrollpane id="a695f" binding="rightScrollPane">
-                <constraints>
-                  <splitpane position="right"/>
-                </constraints>
+              </component>
+            </children>
+          </scrollpane>
+          <scrollpane id="a695f" binding="rightScrollPane">
+            <constraints>
+              <splitpane position="right"/>
+            </constraints>
+            <properties>
+              <minimumSize width="100" height="-1"/>
+              <preferredSize width="-1" height="-1"/>
+            </properties>
+            <border type="empty"/>
+            <children>
+              <component id="4611d" class="javax.swing.JTextPane" binding="textPane">
+                <constraints/>
                 <properties>
-                  <minimumSize width="100" height="-1"/>
-                  <preferredSize width="-1" height="-1"/>
+                  <contentType value="text/html"/>
+                  <editable value="false"/>
+                  <enabled value="true"/>
+                  <selectionColor color="-13670966"/>
+                  <text value="&lt;!DOCTYPE html&gt; &lt;html lang=&quot;en&quot;&gt; &lt;head&gt;     &lt;meta charset=&quot;UTF-8&quot;&gt;     &lt;title&gt;Doc View&lt;/title&gt;     &lt;style&gt;           body ul {             padding-left: 0 !important;         }          body table {             margin: 0;             border-bottom: 1px solid #dddddd;             border-right: 1px solid #dddddd;             border-collapse: collapse;             border-spacing: 0;         }          table tr th {             margin: 0;             border-top: 1px solid #dddddd; /*内部边框样式*/             border-left: 1px solid #dddddd; /*内部边框样式*/             padding: 5px 5px; /*内边距*/             border-collapse: collapse;         }          table tr td {             margin: 0;             border-top: 1px solid #dddddd; /*内部边框样式*/             border-left: 1px solid #dddddd; /*内部边框样式*/             padding: 5px 5px; /*内边距*/         }       &lt;/style&gt; &lt;/head&gt; &lt;body&gt;   &lt;/body&gt; &lt;/html&gt;" noi18n="true"/>
                 </properties>
-                <border type="empty"/>
-                <children>
-                  <component id="4611d" class="javax.swing.JTextPane" binding="textPane">
-                    <constraints/>
-                    <properties>
-                      <contentType value="text/html"/>
-                      <editable value="false"/>
-                      <enabled value="true"/>
-                      <selectionColor color="-12286721"/>
-                      <text value="&lt;!DOCTYPE html&gt; &lt;html lang=&quot;en&quot;&gt; &lt;head&gt;     &lt;meta charset=&quot;UTF-8&quot;&gt;     &lt;title&gt;Doc View&lt;/title&gt;     &lt;style&gt;           body ul {             padding-left: 0 !important;         }          body table {             margin: 0;             border-bottom: 1px solid #dddddd;             border-right: 1px solid #dddddd;             border-collapse: collapse;             border-spacing: 0;         }          table tr th {             margin: 0;             border-top: 1px solid #dddddd; /*内部边框样式*/             border-left: 1px solid #dddddd; /*内部边框样式*/             padding: 5px 5px; /*内边距*/             border-collapse: collapse;         }          table tr td {             margin: 0;             border-top: 1px solid #dddddd; /*内部边框样式*/             border-left: 1px solid #dddddd; /*内部边框样式*/             padding: 5px 5px; /*内边距*/         }       &lt;/style&gt; &lt;/head&gt; &lt;body&gt;   &lt;/body&gt; &lt;/html&gt;" noi18n="true"/>
-                    </properties>
-                    <clientProperties>
-                      <JEditorPane.honorDisplayProperties class="java.lang.Boolean" value="true"/>
-                      <JEditorPane.w3cLengthUnits class="java.lang.Boolean" value="false"/>
-                      <html.disable class="java.lang.Boolean" value="false"/>
-                    </clientProperties>
-                  </component>
-                </children>
-              </scrollpane>
+                <clientProperties>
+                  <JEditorPane.honorDisplayProperties class="java.lang.Boolean" value="true"/>
+                  <JEditorPane.w3cLengthUnits class="java.lang.Boolean" value="false"/>
+                  <html.disable class="java.lang.Boolean" value="false"/>
+                </clientProperties>
+              </component>
             </children>
-          </splitpane>
+          </scrollpane>
         </children>
-      </grid>
+      </splitpane>
     </children>
   </grid>
 </form>
diff --git a/src/main/java/com/liuzhihang/doc/view/ui/PreviewForm.java b/src/main/java/com/liuzhihang/doc/view/ui/PreviewForm.java
index 566bd81..a571d60 100644
--- a/src/main/java/com/liuzhihang/doc/view/ui/PreviewForm.java
+++ b/src/main/java/com/liuzhihang/doc/view/ui/PreviewForm.java
@@ -2,13 +2,8 @@
 
 import com.intellij.ide.BrowserUtil;
 import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.fileChooser.FileChooser;
-import com.intellij.openapi.fileChooser.FileChooserDescriptor;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.ui.DialogWrapper;
-import com.intellij.openapi.ui.popup.util.PopupUtil;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.psi.PsiClass;
 import com.intellij.psi.PsiFile;
 import com.intellij.ui.GuiUtils;
@@ -16,6 +11,7 @@
 import com.intellij.util.ui.UIUtil;
 import com.liuzhihang.doc.view.dto.DocView;
 import com.liuzhihang.doc.view.utils.DocViewUtils;
+import com.liuzhihang.doc.view.utils.ExportUtils;
 import com.liuzhihang.doc.view.utils.NotificationUtils;
 import org.intellij.plugins.markdown.ui.preview.MarkdownUtil;
 import org.jetbrains.annotations.NotNull;
@@ -26,8 +22,6 @@
 import java.awt.datatransfer.Clipboard;
 import java.awt.datatransfer.StringSelection;
 import java.awt.event.ActionEvent;
-import java.io.File;
-import java.io.IOException;
 import java.util.Map;
 import java.util.Vector;
 
@@ -37,7 +31,6 @@
  */
 public class PreviewForm extends DialogWrapper {
     private JPanel rootJPanel;
-    private JPanel viewPanel;
     private JSplitPane viewSplitPane;
     private JScrollPane leftScrollPane;
     private JScrollPane rightScrollPane;
@@ -78,7 +71,7 @@ public PreviewForm(@Nullable Project project, PsiFile psiFile, Editor editor, Ps
     private void initUI() {
         setTitle("Doc View");
 
-        GuiUtils.replaceJSplitPaneWithIDEASplitter(viewPanel, true);
+        GuiUtils.replaceJSplitPaneWithIDEASplitter(rootJPanel, true);
 
         // 边框
         leftScrollPane.setBorder(null);
@@ -91,8 +84,8 @@ private void initUI() {
         UIUtil.applyStyle(UIUtil.ComponentStyle.SMALL, textPane);
 
         textPane.setBorder(JBUI.Borders.emptyLeft(7));
+
         catalogList.setBackground(UIUtil.getTextFieldBackground());
-        textPane.setBackground(UIUtil.getTextFieldBackground());
 
     }
 
@@ -156,7 +149,7 @@ protected JComponent createCenterPanel() {
     @Override
     protected void doHelpAction() {
 
-        BrowserUtil.browse("https://doc-view.liuzhihang.com/");
+        BrowserUtil.browse("https://docview.liuzhihang.com");
 
     }
 
@@ -194,28 +187,7 @@ protected ExportAction() {
         @Override
         protected void doAction(ActionEvent e) {
 
-            // 选择路径
-            FileChooserDescriptor fileChooserDescriptor = new FileChooserDescriptor(false, true, false, false, false, false);
-            VirtualFile chooser = FileChooser.chooseFile(fileChooserDescriptor, project, null);
-            if (chooser != null) {
-                String path = chooser.getPath();
-
-                File file = new File(path + "/" + currentDocView.getName() + ".md");
-
-                if (file.exists()) {
-                    // 文件已存在
-                    NotificationUtils.errorNotify("文件已存在, 导出 Markdown 失败!", project);
-                    return;
-                }
-                try {
-                    FileUtil.writeToFile(file, currentMarkdownText);
-                } catch (IOException ioException) {
-                    NotificationUtils.errorNotify("导出 Markdown 失败!", project);
-                }
-
-            }
-
-            NotificationUtils.infoNotify("导出 Markdown 成功!", project);
+            ExportUtils.exportMarkdown(project, currentDocView.getName(), currentMarkdownText);
         }
     }
 
diff --git a/src/main/java/com/liuzhihang/doc/view/ui/SettingsForm.java b/src/main/java/com/liuzhihang/doc/view/ui/SettingsForm.java
index 8952f4d..d337ba5 100644
--- a/src/main/java/com/liuzhihang/doc/view/ui/SettingsForm.java
+++ b/src/main/java/com/liuzhihang/doc/view/ui/SettingsForm.java
@@ -3,7 +3,6 @@
 import com.intellij.icons.AllIcons;
 import com.intellij.openapi.ui.DialogWrapper;
 import com.intellij.ui.IdeBorderFactory;
-import com.intellij.ui.TitledSeparator;
 import com.intellij.ui.components.labels.LinkLabel;
 import com.intellij.util.ui.JBUI;
 import org.jetbrains.annotations.Nullable;
@@ -31,6 +30,8 @@ public SettingsForm() {
         supportLinkLabel.setListener((source, data) -> new SupportForm().show(), null);
 
 
+        domainPanel.setBorder(IdeBorderFactory.createTitledBorder("当前版本不支持配置!"));
+
     }
 
     @Nullable
@@ -41,6 +42,6 @@ public JComponent createCenterPanel() {
 
     private void createUIComponents() {
         // place custom component creation code here
-        domainPanel.setBorder(IdeBorderFactory.createTitledBorder("Domain"));
+
     }
 }
diff --git a/src/main/java/com/liuzhihang/doc/view/ui/SupportForm.form b/src/main/java/com/liuzhihang/doc/view/ui/SupportForm.form
index 778f314..09cb46a 100644
--- a/src/main/java/com/liuzhihang/doc/view/ui/SupportForm.form
+++ b/src/main/java/com/liuzhihang/doc/view/ui/SupportForm.form
@@ -6,8 +6,8 @@
       <xy x="29" y="20" width="735" height="704"/>
     </constraints>
     <properties>
-      <maximumSize width="450" height="500"/>
-      <minimumSize width="450" height="500"/>
+      <maximumSize width="400" height="450"/>
+      <minimumSize width="400" height="450"/>
     </properties>
     <border type="none"/>
     <children>
@@ -203,12 +203,12 @@
               <text value="6."/>
             </properties>
           </component>
-          <component id="8a505" class="javax.swing.JLabel">
+          <component id="8a505" class="com.intellij.ui.components.labels.LinkLabel" binding="websiteLinkLabel">
             <constraints>
               <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
             </constraints>
             <properties>
-              <text value="参与相关活动"/>
+              <text value="通过网站了解本项目"/>
             </properties>
           </component>
           <hspacer id="3c7bc">
diff --git a/src/main/java/com/liuzhihang/doc/view/ui/SupportForm.java b/src/main/java/com/liuzhihang/doc/view/ui/SupportForm.java
index dd6c867..e85f84d 100644
--- a/src/main/java/com/liuzhihang/doc/view/ui/SupportForm.java
+++ b/src/main/java/com/liuzhihang/doc/view/ui/SupportForm.java
@@ -20,6 +20,7 @@ public class SupportForm extends DialogWrapper {
     private LinkLabel<String> ideaLinkLabel;
     private LinkLabel<String> prLinkLabel;
     private LinkLabel<String> shareLinkLabel;
+    private LinkLabel<String> websiteLinkLabel;
 
     public SupportForm() {
         super(null);
@@ -31,6 +32,7 @@ public SupportForm() {
         ideaLinkLabel.setIcon(null);
         prLinkLabel.setIcon(null);
         shareLinkLabel.setIcon(null);
+        websiteLinkLabel.setIcon(null);
 
         rootPanel.setBorder(JBUI.Borders.empty(12, 15));
         rootPanel.setBackground(UIManager.getColor("TextArea.background"));
@@ -38,6 +40,7 @@ public SupportForm() {
         reportLinkLabel.setListener((source, data) -> BrowserUtil.browse(data), "https://github.com/liuzhihang/doc-view/issues");
         ideaLinkLabel.setListener((source, data) -> BrowserUtil.browse(data), "https://plugins.jetbrains.com/plugin/15305-doc-view");
         prLinkLabel.setListener((source, data) -> BrowserUtil.browse(data), "https://github.com/liuzhihang/doc-view/pulls");
+        prLinkLabel.setListener((source, data) -> BrowserUtil.browse(data), "https://docview.liuzhihang.com");
     }
 
     @Nullable
diff --git a/src/main/java/com/liuzhihang/doc/view/utils/ExportUtils.java b/src/main/java/com/liuzhihang/doc/view/utils/ExportUtils.java
new file mode 100644
index 0000000..a29d271
--- /dev/null
+++ b/src/main/java/com/liuzhihang/doc/view/utils/ExportUtils.java
@@ -0,0 +1,46 @@
+package com.liuzhihang.doc.view.utils;
+
+import com.intellij.openapi.fileChooser.FileChooser;
+import com.intellij.openapi.fileChooser.FileChooserDescriptor;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.io.FileUtil;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.liuzhihang.doc.view.dto.DocView;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @author liuzhihang
+ * @date 2020/11/15 14:58
+ */
+public class ExportUtils {
+
+    public static void exportMarkdown(Project project, String fileName, String markdownText) {
+
+        // 选择路径
+        FileChooserDescriptor fileChooserDescriptor = new FileChooserDescriptor(false, true, false, false, false, false);
+        VirtualFile chooser = FileChooser.chooseFile(fileChooserDescriptor, project, null);
+        if (chooser != null) {
+            String path = chooser.getPath();
+
+            File file = new File(path + "/" + fileName + ".md");
+
+            if (file.exists()) {
+                // 文件已存在
+                NotificationUtils.errorNotify("文件已存在, 导出 Markdown 失败!", project);
+                return;
+            }
+            try {
+                FileUtil.writeToFile(file, markdownText);
+            } catch (IOException ioException) {
+                NotificationUtils.errorNotify("导出 Markdown 失败!", project);
+            }
+
+        }
+
+        NotificationUtils.infoNotify("导出 Markdown 成功!", project);
+
+    }
+
+}
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index e1b15c7..25eb762 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -21,7 +21,7 @@
         <projectService serviceImplementation="com.liuzhihang.doc.view.component.Settings"/>
 
         <!-- app 等级 -->
-        <applicationService serviceImplementation="com.liuzhihang.doc.view.service.DocViewService"/>
+        <applicationService serviceImplementation="com.liuzhihang.doc.view.service.SpringDocViewService"/>
 
         <applicationConfigurable instance="com.liuzhihang.doc.view.component.SettingsConfigurable"
                                  id="liuzhihang.api.doc.SettingsConfigurable"