精华内容
下载资源
问答
  • VS好用就不用多说了,尽管VS很人性化,但是针对具体我们想实现功能时,会力不从心,也许会很多现成插件,但是作为一名程序员,我还是喜欢自己去写一些东西,因为这样能随心所欲想做什么就做什么。...

       相比其它开发环境,VS的好用就不用多说了,尽管VS很人性化,但是针对具体的我们想实现的功能时,会力不从心,也许会有很多现成的插件,但是作为一名程序员,我还是喜欢自己去写一些东西,因为这样能随心所欲的想做什么就做什么。

      开始做事之前,我们不得不做很多的准备工作,比如说VS sp1我们得安装,理解vs插件有哪些,我们也都查不少文章,看很多哪些令人讨厌的msdn, 这些都不重要,重要的是,结果我们总会做出一个vs插件,哪些只是在磨刀而已。为什么我们会选VSPackge插件,而不是宏命令,或者addin。我们如何快速建立一个工程,我们的会花费不少时间去解决这些疑问。

      下面是我参考的文章,希望对大家有所帮助。这里就不具体的一步步写那些疑问步骤了。

    http://www.cnblogs.com/default/archive/2010/07/17/1779563.html

      好吧,今天的主题就是开发一个简单的文本编辑器插件。没有视觉的文章看起来总是让人头疼,尤其是看了几十页的文字最终不知道到底说什么。来看下做编辑器最少需要做什么。

      做VS的编辑器,我们得建立一个Package,这个向导会帮我们生成的,另外,我们要做的就是建立一个EditFactory,再建立一个Editor即可。当然从图上可以看到,我们可以在一个Package里面建立多个Editor。为了将共性的东西放在一起,我对Factory与Editor都建立了基类,这样Factory与Editor里的东西就会少不少,于是就有了下图的结构。

    大体上结构有了,我们的目标明确了,下一步,为了和VS交互我们不得不继承一些接口。

     

    这些接口都是干什么的,我们得简单的介绍下,更详细的我已经把msdn的地址粘贴的下面了,方便大家访问

    IVsEditorFactory 接口,编辑器工厂类的接口,用于创建编辑器实例。


     名称说明
    公共方法 Close 释放所有缓存的接口指针,所有事件接收的注销。
    公共方法 CreateEditorInstance 用于使编辑工厂体系结构创建支持数据/视图分开的编辑器。
    公共方法 MapLogicalView 映射逻辑视图到一个物理视图。
    公共方法 SetSite 在环境中初始化的编辑器。
    msdn:地址

     

    IVsPersistDocData 接口 文档处理接口


     名称说明
    公共方法 Close 关闭 IVsPersistDocData 对象。
    公共方法 GetGuidEditorType 返回创建 IVsPersistDocData 编辑对象工厂的唯一标识符。
    公共方法 IsDocDataDirty 确定文档是否已更改,因为次保存。
    公共方法 IsDocDataReloadable 确定文档是否可重新加载。
    公共方法 LoadDocData 从给定 MkDocument 将文档加载数据。
    公共方法 OnRegisterDocData 调用通过运行文档表 (RDT),则注册在 RDT 的文档数据。
    公共方法 ReloadDocData 重新加载文档数据,并在此过程中确定是否忽略一个后续文件更改。
    公共方法 RenameDocData 将文档数据重命名。
    公共方法 SaveDocData 将文档保存数据。
    公共方法 SetUntitledDocPath 设置初始名称 (或路径) 未保存的,新创建文档数据。
    msdn:地址
     
     

    IOleCommandTarget 接口 命令处理接口


     名称说明
    公共方法 Exec 执行指定的命令。
    公共方法 QueryStatus 查询该对象以获得由用户界面事件生成的一个或多个命令的状态。
    msdn:地址
     

    IPersistFileFormat 接口 文件处理接口


     名称说明
    公共方法 GetClassID(Guid) (继承自 IPersist。)
    公共方法 GetClassID(Guid)  
    公共方法 GetCurFile 返回路径到对象的当前工作文件,或者,如果没有一种当前工作文件,对象的默认文件名提示。
    公共方法 GetFormatList 提供该调用方提供必要的信息委托对象打开标准常见 保存 对话框 (使用 GetSaveFileNameViaDlg 函数)。
    公共方法 InitNew 在没有权限的状态指示对象初始化自身。
    公共方法 IsDirty 确定对象是否以保存更改为其当前文件。
    公共方法 Load 打开已指定的文件并初始化从文件内容的对象。
    公共方法 Save 将该对象的副本保存到指定文件。
    公共方法 SaveCompleted 通知对象可以推断保存事务,并且对象可以写入它的文件。
    msdn:地址
     
     
     在正式开始之前,我们还得有些东西需要了解下,那就是我们使用什么窗体。
     
      有了这些,还不足以令我们对做一个插件编辑器有很好的理解,不管做什么事情总有一些东西需要我们值得注意,比如骑摩托上坡时,到顶的时候要减油门。vs编辑器也是,我们还需要注意的是,在package上面要声明一些特性,还需要在初始化的时候注册我们的工厂类。
     
       [PackageRegistration(UseManagedResourcesOnly = true)]
        [ProvideEditorFactory(typeof(ContextEditorFactory), 200, TrustLevel = __VSEDITORTRUSTLEVEL.ETL_AlwaysTrusted)]
        [ProvideEditorExtension(typeof(ContextEditorFactory), ".cs", 50, DefaultName = "file")]
        [ProvideEditorLogicalView(typeof(ContextEditorFactory), GuidList.GuidGL_IDE_VSPackageEditorFactoryString)]
        [Guid(GuidList.guidGL_IDE_VSPackagePkgString)]
        public sealed class GL_IDE_VSPackagePackage : Package
        {
            public GL_IDE_VSPackagePackage()
            {
    
            }
    
            #region Package Members
    
            protected override void Initialize()
            {
                base.Initialize();
                RegisterEditorFactory(new ContextEditorFactory(this));
            }
            #endregion
        }


      这里又引出一些新的东西,对于新鲜的事物,小的时候我们总是充满了好奇,现在的我们却对新的东西失去了兴趣,甚至有时拒绝去理解。是什么时候我们改变了,已经记不起。

    关于这些特性介绍,就是注册编辑器工厂类,编辑器扩展文件名,编辑器视图什么的,这里有篇文章大家可以参考。

    http://www.cnblogs.com/default/archive/2011/06/11/2078501.html

    更多的特性有兴趣的可以查msdn。

    下面看下我们工厂基类的实现:

     public abstract class EditorFactoryBase<TEditorPane> : IVsEditorFactory, IDisposable
            where TEditorPane : WindowPane, IOleCommandTarget, IVsPersistDocData, IPersistFileFormat, new()
        {
    
            private ServiceProvider _ServiceProvider;
    
            public int Close()
            {
                return VSConstants.S_OK;
            }
    
            public int CreateEditorInstance(uint grfCreateDoc, string pszMkDocument, string pszPhysicalView, IVsHierarchy pvHier, uint itemid, IntPtr punkDocDataExisting, 
                out IntPtr ppunkDocView, out IntPtr ppunkDocData, out string pbstrEditorCaption, out Guid pguidCmdUI, out int pgrfCDW)
            {
                ppunkDocView = IntPtr.Zero;
                ppunkDocData = IntPtr.Zero;
                pbstrEditorCaption = null;
                pguidCmdUI = GetType().GUID;
                pgrfCDW = 0;
    
                // --- Validate inputs  
                if ((grfCreateDoc & (VSConstants.CEF_OPENFILE | VSConstants.CEF_SILENT)) == 0)
                {
                    return VSConstants.E_INVALIDARG;
                }
                if (punkDocDataExisting != IntPtr.Zero)
                {
                    return VSConstants.VS_E_INCOMPATIBLEDOCDATA;
                }
                // --- Create the Document (editor)  
                TEditorPane newEditor = new TEditorPane();
                ppunkDocView = Marshal.GetIUnknownForObject(newEditor);
                ppunkDocData = Marshal.GetIUnknownForObject(newEditor);
                pbstrEditorCaption = "";
    
                return VSConstants.S_OK;
            }
    
            public int MapLogicalView(ref Guid rguidLogicalView, out string pbstrPhysicalView)
            {
                pbstrPhysicalView = null;
                if (VSConstants.LOGVIEWID_Primary == rguidLogicalView)
                {
                    return VSConstants.S_OK;
                }
                else
                {
                    return VSConstants.E_NOTIMPL;
                }
            }
    
            public int SetSite(Microsoft.VisualStudio.OLE.Interop.IServiceProvider psp)
            {
                _ServiceProvider = new ServiceProvider(psp);
                return VSConstants.S_OK;
            }
    
            public void Dispose()
            {
                if (_ServiceProvider != null)
                {
                    _ServiceProvider.Dispose();
                }
            }
    
    
            public object GetService(Type serviceType) 
            { 
                return _ServiceProvider.GetService(serviceType); 
            }
        }

    接下来就是编辑器基类的实现:有很多功能还未实现,但这已经足够我们简单编辑器的功能了

     public abstract class EditorPaneBase<TFactory, TUIControl> : WindowPane, IOleCommandTarget, IVsPersistDocData, IPersistFileFormat
            where TFactory : IVsEditorFactory
            where TUIControl : Control, ISimpleEditor, new()
        {
            private Guid _factoryGuid = typeof(TFactory).GUID;
    
            private IVsUIShell _vsUiShell = null;
    
            private TUIControl _editor = null;
    
            private const char endline = '\n';
    
            private const uint FormatIndex = 0;
    
            private string FileName { get; set; }
    
            public EditorPaneBase()
            {
                _vsUiShell = ServiceProvider.GlobalProvider.GetService(typeof(SVsUIShell)) as IVsUIShell;
            }
    
            #region IVsPersistDocData
    
            public int Close()
            {
                return VSConstants.S_OK;
            }
    
            public int GetGuidEditorType(out Guid pClassID)
            {
                pClassID = _factoryGuid; 
                return VSConstants.S_OK;
            }
    
            public int IsDocDataDirty(out int pfDirty)
            {
                pfDirty = 0; 
                return VSConstants.S_OK;
            }
    
            public int IsDocDataReloadable(out int pfReloadable)
            {
                pfReloadable = 1;
                return VSConstants.S_OK;
            }
    
            public int LoadDocData(string pszMkDocument)
            {
                _editor.LoadDocData(pszMkDocument);
                this.FileName = pszMkDocument;
                return VSConstants.S_OK;
            }
    
            public int OnRegisterDocData(uint docCookie, IVsHierarchy pHierNew, uint itemidNew)
            {
                _editor = this.Content as TUIControl;
                return VSConstants.S_OK;
            }
    
            public int ReloadDocData(uint grfFlags)
            {
                return VSConstants.S_OK;
            }
    
            public int RenameDocData(uint grfAttribs, IVsHierarchy pHierNew, uint itemidNew, string pszMkDocumentNew)
            {
                return VSConstants.S_OK;
            }
    
            public int SaveDocData(VSSAVEFLAGS dwSave, out string pbstrMkDocumentNew, out int pfSaveCanceled)
            {
                pbstrMkDocumentNew = null;
                pfSaveCanceled = 0; 
                return VSConstants.S_OK;
            }
    
            public int SetUntitledDocPath(string pszDocDataPath)
            {
                return VSConstants.S_OK;
            }
    
            #endregion IVsPersistDocData
    
            #region IPersistFileFormat
    
            public int GetClassID(out Guid pClassID)
            {
                pClassID = typeof(TFactory).GUID;
                return VSConstants.S_OK;
            }
    
            public int GetCurFile(out string ppszFilename, out uint pnFormatIndex)
            {
                pnFormatIndex = FormatIndex;
                ppszFilename = FileName;
                return VSConstants.S_OK;
            }
    
            public int GetFormatList(out string ppszFormatList)
            {
    
                var formatList = string.Format(CultureInfo.InvariantCulture, "My Editor (*{0}){1}*{0}{1}{1}", ".cs", endline);
                ppszFormatList = formatList;
    
                return VSConstants.S_OK;
            }
    
            public int InitNew(uint nFormatIndex)
            {
                if (nFormatIndex != FormatIndex)
                {
                    return VSConstants.E_INVALIDARG;
                }
                _editor.IsDirty = false;
                return VSConstants.S_OK;
            }
    
            public int IsDirty(out int pfIsDirty)
            {
                pfIsDirty = _editor.IsDirty ? 1 : 0;
                return VSConstants.S_OK;
            }
    
            public int Load(string pszFilename, uint grfMode, int fReadOnly)
            {
                if (pszFilename == null)
                {
                    return VSConstants.E_INVALIDARG;
                }
                _vsUiShell.SetWaitCursor();
    
                throw new NotImplementedException();
            }
    
            public int Save(string pszFilename, int fRemember, uint nFormatIndex)
            {
                _editor.Save();
                return VSConstants.S_OK;
            }
    
            public int SaveCompleted(string pszFilename)
            {
                //TODO:Editor SaveCompleted
                return VSConstants.S_OK;
            }
    
            #endregion IPersistFileFormat
    
            #region IEditorCommonCommand
    
            public void DoSelectAll(object sender, EventArgs e)
            {
                _editor.DoSelectAll();
            }
    
            public void DoCopy(object sender, EventArgs e)
            {
                _editor.DoCopy();
            }
    
            public void DoCut(object sender, EventArgs e)
            {
                _editor.DoCut();
            }
    
            public void DoPaste(object sender, EventArgs e)
            {
                _editor.DoPaste();
            }
    
            public void DoRedo(object sender, EventArgs e)
            {
                _editor.DoRedo();
            }
    
            public void DoUndo(object sender, EventArgs e)
            {
                _editor.DoUndo();
            }
    
            public void OnSelectAll(object sender, EventArgs e)
            {
                var command = (OleMenuCommand)sender;
                command.Enabled = _editor.SupportsSelectAll;
            }
    
            public void OnCopy(object sender, EventArgs e)
            {
                var command = (OleMenuCommand)sender;
                command.Enabled = _editor.SupportsCopy;
            }
    
            public void OnCut(object sender, EventArgs e)
            {
                var command = (OleMenuCommand)sender;
                command.Enabled = _editor.SupportsCut;
            }
    
            public void OnPaste(object sender, EventArgs e)
            {
                var command = (OleMenuCommand)sender;
                command.Enabled = _editor.SupportsPaste;
            }
    
            public void OnUndo(object sender, EventArgs e)
            {
                var command = (OleMenuCommand)sender;
                command.Enabled = _editor.SupportsUndo;
            }
    
            public void OnRedo(object sender, EventArgs e)
            {
                var command = (OleMenuCommand)sender;
                command.Enabled = _editor.SupportsRedo;
            }
    
            #endregion IEditorCommonCommand
        }

     下面就是Editor的实现

        [ComVisible(true)]
        [Guid("f0cdb6b8-ed9f-4cb5-9b4d-e8afc6a177a3")]
        public class MyEditPane :EditorPaneBase<ContextEditorFactory, MyControl>
        {
            public MyEditPane()
            {
                base.Content = new MyControl();
            }
        }

    这里又得说一下,那个Guid的事情,与VS交互使用的是COM,所以GUID哪些事,你懂得。

    其中MyControl就是一个UserControl,就是我们编辑器的主界面了:

    public partial class MyControl : UserControl ,ISimpleEditor
        {
            public MyControl()
            {
                InitializeComponent();
            }
    
    
            public bool SupportsSelectAll { get { return true; } }
    
            public bool SupportsCopy { get { return true; } }
    
            public bool SupportsCut { get { return true; } }
    
            public bool SupportsPaste { get { return true; } }
    
            public bool SupportsRedo { get { return true; } }
    
            public bool SupportsUndo { get { return true; } }
    
            public void DoSelectAll()
            {
                content.SelectAll();
            }
    
            public void DoCopy()
            {
                content.Copy();
            }
    
            public void DoCut()
            {
                content.Cut();
            }
    
            public void DoPaste()
            {
                content.Paste();
            }
    
            public void DoRedo()
            {
                content.Redo();
            }
    
            public void DoUndo()
            {
                content.Undo();
            }
    
            public bool IsDirty { get; set; }
    
    
            public void SetInstanceContext(IEditorContext context)
            {
                throw new NotImplementedException();
            }
    
            public bool CanSave()
            {
                throw new NotImplementedException();
            }
    
            public void Save()
            {
                throw new NotImplementedException();
            }
    
            public void SaveAs(string fileName)
            {
                throw new NotImplementedException();
            }
    
            public void OnSaveCompleted(string fileName)
            {
                throw new NotImplementedException();
            }
    
            public void OnClose()
            {
                throw new NotImplementedException();
            }
    
            public void LoadDocData(string fileName)
            {
                if (File.Exists(fileName))
                {
                    content.Text = File.ReadAllText(fileName);
                }
            }
    
            private void content_TextChanged(object sender, TextChangedEventArgs e)
            {
                this.IsDirty = true;
            }
        }

    前台界面,很简单,就是一个TextBox

    <UserControl x:Class="Company.GL_IDE_VSPackage.MyControl"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 xmlns:vsfx="clr-namespace:Microsoft.VisualStudio.Shell;assembly=Microsoft.VisualStudio.Shell.10.0"
                 mc:Ignorable="d" 
                 d:DesignHeight="300" d:DesignWidth="300"
                 Name="MyToolWindow"
                 Background="{DynamicResource {x:Static vsfx:VsBrushes.ToolWindowBackgroundKey}}">
        <Grid>
            <ScrollViewer>
                <TextBox Name="content" TextChanged="content_TextChanged" AcceptsReturn="True">
                
                </TextBox>
            </ScrollViewer>
        </Grid>
    </UserControl>

     

     好吧,我承认我比较懒惰,文字不多,希望大家有所掌握。有什么么疑问的可以发留言给我,今天就到这里了。

    转载于:https://www.cnblogs.com/guanglin/p/3148621.html

    展开全文
  • 所以本文就来介绍vim以及它常用命令,Vim是从vi发展出来一个文本编辑器。代码补全、编译及错误跳转等方便编程功能特别丰富,在程序员中被广泛使用 vim键盘图中文版: tips:在linux环境下,可以在命令行输入...
  • 前言作为开发者,两个顶级编辑器,即使你不用,你也一定要知道它们是什么——·编辑器之神——Vim·神编辑器——Emacs所以本文就来介绍vim以及它常用命令,Vim是从vi发展出来一个文本编辑器。代码补全、编译...

    前言

    作为开发者,有两个顶级编辑器,即使你不用,你也一定要知道它们是什么——

    ·编辑器之神——Vim

    ·神的编辑器——Emacs

    所以本文就来介绍vim以及它的常用命令,Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用

    vim键盘图中文版:

    tips:在linux环境下,可以在命令行输入vimtutor命令学习使用vim,当然前提是你安装上了vim

    模式

    共有三种模式,分别是命令模式、插入模式和底线命令模式.这三种模式的作用分别是:

    命令模式:

    用户刚刚启动vim编辑文件时,便进入了命令模式

    此状态下敲击键盘动作会被Vim识别为命令,而非输入字符

    输入模式:

    在命令模式下按下i、a、o就进入了输入模式

    在输入模式中,可以使用以下按键:

    字符按键以及Shift组合 //输入字符

    Enter//换行

    Back Space //删除光标前一个字符

    Del //删除光标后一个字符

    方向键 //在文本中移动光标

    Home/End //移动光标到行首/行尾

    Page Up/Page Down //上/下翻页

    Insert //切换光标为输入/替换模式,光标将变成竖线/下划线

    Esc //退出输入模式,切换到命令模式

    底线命令模式:

    在命令模式下按下:就进入了底线命令模式

    按Esc键退出底线命令模式

    简单的说,可以用下图来更直观展示:

    插入

    i //光标前插入

    I //光标所在行首插入

    o //光标所在行下面新建一行

    O //光标所在行上面新建一行

    a //光标后插入

    A //光标所在行尾部插入

    查找

    /search_str //向光标之下查找值为search_str的字符串

    ?search_str //向光标之上查找值为search_str的字符串

    n //重复前一个搜寻的动作

    N //反向进行前一个搜寻动作

    替换

    %s/old/new/ //用old替换new,替换所有行的第一个匹配

    %s/old/new/g //用old替换new,替换整个文件的所有匹配,g表示全局

    s/old/new/ //用old替换new,替换当前行的第一个匹配

    s/old/new/g //用old替换new,替换当前行所有匹配,g表示全局

    删除、拷贝、粘贴

    x,X //x为向后删除一个字符,X为向前删除一个字符

    nx //连续向后删除n个字符

    dd //删除光标所在行(常用)

    ndd //删除光标所在行开始n行

    d1G //删除光标所在行到第一行

    dG //删除光标所在行到尾行

    yy //拷贝光标所在行(常用)

    nyy //拷贝光标所在行开始n行

    d1G //拷贝光标所在行到第一行

    dG //拷贝光标所在行到尾行

    p,P //p为将已复制的内容粘贴在光标下一行,P则为粘贴在光标上一行

    u //复原前一个工作

    ctrl+r //重做上一个动作

    . //重复前一个动作

    显示/隐藏行号

    :set nu //显示行号

    :set nonu //隐藏行号

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    展开全文
  • Reflexil是一个.NET程序集编辑器,方便开发人员对.NET程序进行修改;可以作为一个Reflector插件修改程序集IL并保存到磁盘文件,也可以在自己.NET程序中调用进行更为灵活.NET程序集修改。Reflexil使用Mono....
  • 6.如下图,在mydlg.ui 中拖入一个Push Button,将其上的文本改为“进入主 窗口”,在其属性窗口中将其objectName 改为enterBtn,在下面的Signals and slots editor 中进行信号和槽的关联,其中,Sender 设为enterBtn...
  • 平时在网上下课件资料什么的基本上都是PDF格式,只要是我们想要进行编辑就得转成word文档格式了,那么没有什么办法能让我们将PDF格式转成word文档格式呢? pdf转换word是最普遍转换方法,所以很...
    平时在网上下的课件资料什么的基本上都是PDF格式的,只要是我们想要进行编辑就得转成word文档的格式了,那么有没有什么好的办法能让我们将PDF格式转成word文档格式呢?
    
    pdf转换word是最普遍的转换方法,所以很简单,先安装一个pdf格式转换器(文件不超过2m可以不用下载,用在线pdf转换成word就可以转换完成),安装完成之后打开使用;

    第一步先选择要转换的文件格式“文件转word";
    然后将要转换的pdf文件添加进来,软甲可以批量添加,所以文件多也不怕;

    文件添加完成之后设置一下文件的保存路径,软件默认将转换好的文件保存在原文件夹内,单击自定义可以自己设置;
    最后单击开始转换按钮,等待一会转换就能完成了。
    最后可以打开文件来看看。

    展开全文
  • 手机 pdf 阅读

    2009-02-12 23:00:29
    增加了编辑功能(尽管没有限制文件大小,但请别编辑过大文件,另外,为了提高速度,不进行全文排版,时候表现可能会有些不习惯),以后会进一步完善 启动时,会自动识别NOKIA、SONYERICSSON、MOTO手机,不再要求...
  • 编辑器和IDE...................................................112 调试器....................................115 小结...................................................115 推荐阅读........................
  • vim使用

    2019-01-31 19:26:37
    说明你Linux系统vim文本编辑器。 如果没有输入下面指令进行安装: -&amp;gt;sudo yum install vim 安装完成后再在命令行里输入“vim”如果还没有上图显示,恭喜你,你没有安装上。这篇文章你不用读了,...

    vim的使用

    查看你的Linux系统是否有vim:

    命令行输入"vim"后显示如下:
    在这里插入图片描述
    说明你的Linux系统有vim文本编辑器。
    如果没有输入下面的指令进行安装:
    ->sudo yum install vim
    安装完成后再在命令行里输入“vim”如果还没有上图的显示,恭喜你,你没有安装上。这篇文章你不用读了,帮不了你什么。

    需要对vim有的基本认识

    vim 分为两种状态,即命令状态和编辑状态,在命令状态下,所键
    入的字符系统均作命令来处理,如:q 代表退出,而编辑状态则是用
    来编辑文本资料的。当你进入 vim 时,会首先进入命令状态。在命令
    状态下,按”i”(插入)或”a”(添加)可以进入编辑状态,在编辑状态,按 ESC 键进入命令状态。在命令状态下,有如下一些常用命令:
    新增:
    a 从光标后面开始添加文本
    A 从光标所在行的末尾开始添加文本
    插入:
    i 从光标前面开始插入文本
    I 从光标所在行的开始处插入文本
    删除与修改:
    x 删除光标处的字符
    dd 删除光标所在的整行
    [n]dd 删除光标所在行以及下面的n-1行(n必须是数字)
    D 删除光标到行尾的文本,常用于删除注释语句 (d$)
    光标移动:
    ^ 光标移动到行首
    $ 光标移动到行尾
    Ctrl+d 向下翻半页
    Ctrl+f 向下翻一页
    Ctrl+u 向上翻半页
    Ctrl+b 向上翻一页
    gg 光标定位到文档头
    G 光标定位到文档尾
    H 光标定位到当前页首
    L 光标定位到当前页的最后一行的行首
    w 光标往后移一个字
    b 光标往前移一个字
    [n]+ 光标向后移动 n 行,[n]表示一个整数 10+
    [n]- 光标向前移动 n 行,[n]表示一个整数 10
    [n]G 光标定位到第 n 行行首,[n]表示一个整数 20G
    查找与替换:
    /[str] 查找字符串 str,[str]表示要查找的字符串
    回车后会加亮显示所有找到的字符串,接着
    命令 n 移动到下一个找到的字符串,命令 N 移动到
    上一个找到的字符串 例如: /hello
    部分替换 (只能替换光标所在的行)
    : s/[src]/[dst] /i忽略大小写 /g全部匹配 例如 : s/hello/world/ig 替换一行
    :3,6s/[src]/[dst]/ig(3-6 行中找) 例如 :3,6s/hello/world全部替换
    :%s/[src]/[dst]/g 将文档中所有 src 的字符串替换为 dst 字符串
    :%s/^ //g 将文档每一行的行首的空格去掉
    块操作:
    v 可视化块选择状态,选中块之后,可以对块进行删除(d),
    复制(y),剪切(x)
    yy 复制光标所在的整行
    [n]yy 从光标开始往下复制 n 行,[n]表示一个整数
    p 将复制后的文本粘贴到光标处
    u 撤销上次操作
    结束编辑:
    :q 在未修改文档的情况下退出
    :q! 放弃文档的修改,强行退出
    :w 文档存盘
    :wq 文档存盘退出
    其他:
    :help 命令 查看该命令的帮助提示
    :%!xxd十六进制模式
    :%!xxd –r 返回文本模式 中间有一个空格的
    如果在编辑过程中不小心按了 Ctrl+s,vim 会处于僵死状态,按
    Ctrl+q 可以恢复。
    执行 vim +3main.c //表示定位到 main.c 的第 3 行
    执行 vim +/printf main.c //表示定位到第一个 printf 处
    在命令模式下输入:new 2.c //表示再打开(新建)一个2.c文件,并在 vim中打开,vim是被上下横向分开的; 用vnew 2.c 表示纵向分屏,两个窗口之间进行切换的方式:Ctrl+w,w
    在命令模式中输入 gg=G 可以自动对齐
    sed: 管道查找替换程序
    cat a.txt| sed’s/aa/bb/’ >b.txt //将 a.txt 中的 aa 替换成 bb 并重定向
    输出到 b.txt 中。

    升级vim

    升级后的vim将多了以下三个功能:

    1. 自动补全

    2. 编译检错

    3. 文档检索
      实现上面的三项功能可以按照以下步骤来做:

    4. 安装vundle
      方式一:
      $ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
      方式二(我使用的这个方案,因为我没有找到.vim文件):
      在这个链接中下载已经编译好的压缩包(该压缩包适用于64为的Linux系统),并且将这几个文件全部放到Linux用户主目录下。作如下操作:
      $ cd ~
      $ mkdir -p ~/.vim/bundle/
      $ tar xzvf Vundle.vim.tar.gz -C ~/.vim/bundle/

    5. 配置.vimrc文件
      $ cp .vimrc .vimrc.bak 注释:备份原来的.vimrc文件
      $ mv vimrc .vimrc

    6. 解压缩插件
      $ cd ~
      $ tar xzvf ctrlp.vim.tar.gz -C ~/.vim/bundle/
      $ tar xzvf YouCompleteMe.tar.gz -C ~/.vim/bundle/

    7. 编译配置YCM

    $ sudo apt-get install build-essential cmake

    $ sudo apt-get install python-dev python3-dev

    $ cd ~/.vim/bundle/YouCompleteMe

    $ ./install.py --clang-completer

    • 对.vimrc的日志内容修改
      使用vim新建一个test.cc文件后,会有以下的信息提示:
      在这里插入图片描述
      第3行为作者信息(姓名和邮箱),该信息需要修改为自己的信息,修改步骤如下:
      打开.vimrc文件 ->找到第112行->将对应的作者信息改为自己的信息->保存退出
    • 使用与测试
      新建一个test.cc文件,在该文件中进行相应的使用:
    • 自动补全功能:在test.cc文件中输入某些关键字的前几个字母,会提示出全部关键字,然后按↑↓键选择对应的关键字即可
    • 编辑检错功能:在test.cc文件中故意写错会在文件的右侧出错行上显示红色
    • 文档检索功能:双击”,”(就是ctrl+p的操作)的作用:
      打开ctrlp:连续按两次逗号“,”;
      关闭ctrlp:按esc;
      选择要打开的文件ctrl + g,ctrl+k
      打开文件:选中后按enter
      在一个新选项卡中打开一个文件:ctrl+t
      在选项卡中进行切换:g+t(向前切换)
      g+T(向后切换)
      从vim中切回到终端: :sh
      从终端切回到vim: exit(或者Ctrl+d)

    日后对vim的学习

    需要进一步的熟练指令,优化自己的操作。

    展开全文
  • 我假定你一些HTML(或者HTML编辑器基本知识和一些编程思想。 1.简介 PHP是能让你生成动态网页工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML常规方法编写PHP。 PHP...
  • PHP基础教程

    2019-09-18 22:05:55
    首先先下载一个WAMP集成环境还有编辑器(你不用啦),环境必须显示绿色,红色和黄色都没安装成功 自己百度一下 我要是写了(了解)话就是不太常用 什么是PHP? a.超文本(html)预处理器(动态生成html) B.服务器端...
  • flash shiti

    2014-03-14 10:32:41
    3. FListBox.addItem 和FListBox.addItemAt 有什么用 □ A. 添加列表框 □ B. 使用Value(值)对话框添加项目 □ C. 添加下拉菜单 □ D. 给组合框添加项目 4. Library 中有一元件Symbol 1,舞台上有一个该元件实例...
  • 方便知识点重新归类、分类移动和文件关联到其它知识点 知识点列表自定义显示字段:基于分类,让每个人知识管理梦想,得到更好发挥 字段映射到分类:让专业知识库制作和使用更针对性 全面改进操作导航...
  • PowerShadow(影子系统)

    2008-10-25 07:53:32
    虽然笔者想不到记录网址有什么好处, 不过这技巧或者在某种情况下是有用途. 如果不是使用Shadow Mode, 平时我们亦可以在流览完网页后, 一次过将IE网页址记录清除(这个我觉得只是为求方便)  很多人都会在电脑中...
  • 五.Linux操作系统上有什么应用?.....................................................................................4 六.在那里可以找到讨论区?..........................................................
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    C#--微软.NET第一语言 本书着重介绍语言本身,比较少涉及应用,不错入门书,从头讲起,不怕不明白。 <<page 1>> page begin==================== 目 ...1.1.1 什么是.NET 2000 年 6 月 ...
  • 最后,我们只需要将内容复制下来就可以,粘贴到WORD等文本编辑器里,就可以保存下来了。 百度快照:任意搜一个东西,每一条信息最后会一项是–百度快照,就是它。 这个方法我一亲自试了一下,发现如果没有百度...
  • asp.net知识库

    2015-06-18 08:45:45
    asp.net 2.0下嵌套masterpage页可视化编辑 C# 2.0与泛型 动态调用对象属性和方法——性能和灵活性兼备方法 泛型技巧系列:用泛型打造可复用抽象工厂 泛型技巧系列:如何提供类型参数之间转换 .NET 2.0 ...
  • C#微软培训资料

    2014-01-22 14:10:17
    <<page 1>> page begin==================== 目 ...1.1.1 什么是.NET 2000 年 6 月 22 日 不论对 Microsoft 还是对整个 IT 业界都将成为值得纪念一天 这一天 微软公司正式推出了其下一代...
  • CruiseYoung提供详细书签电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《C语言入门经典(第4版)》源代码及课后练习答案 对应书籍资料见: C语言入门经典(第4版) 基本...
  • CruiseYoung提供详细书签电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 C语言入门经典(第4版) 基本信息 原书名: Beginning C: From Novice to Professional, Fourth Edition 原...
  • 还具备富文本编辑器里输入和显示。再也不用考虑eot是如何制作。 智能翻译繁体中文、维吾尔拉丁文和维吾尔西里尔文 AliCMS里只需几个设置就生成整个网站繁体中文、维吾尔拉丁文和维吾尔西里尔文版本。 ...
  • 400个DreamWeaver插件

    2013-03-28 15:30:13
    mxp/用来在Dreamweaver环境下编辑安装目录下Extensions.txt文件,此文件记录文件扩展名和文件类型关系 mxp/加入一个指向邮件地址连接,并可以自定义信件标题和信件内容 mxp/由MyComputer.com提供一套网站...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    一个新安装的Linux系统允许用户使用“Alt+F1”到“Alt+F6”键来访问前六个虚拟控制台。虚拟控制台最有用的是,当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作,关闭这个程序。 shutdown 1.作用 ...
  • 还具备富文本编辑器里输入和显示。再也不用考虑eot是如何制作。   智能翻译繁体中文、维吾尔拉丁文和维吾尔西里尔文 AliCMS里只需几个设置就生成整个网站繁体中文、维吾尔拉丁文和维吾尔西里尔文版本。   ...
  • 3.6 用vi编辑器编写文件 46 3.6.1 利用vi创建和修改文件 46 3.6.2 用head和tail命令移动 47 3.7 文本的提取和排序 48 3.7.1 使用grep匹配模式 48 3.7.2 剪切、粘贴和联结文本 49 3.8 shell脚本 50 ...
  • 还具备富文本编辑器里输入和显示。再也不用考虑eot是如何制作。 智能翻译繁体中文、维吾尔拉丁文和维吾尔西里尔文 AliCMS里只需几个设置就生成整个网站繁体中文、维吾尔拉丁文和维吾尔西里尔文版本。 完全面向...
  •  现象:在许多有关Windows XP安装的介绍文章中都提到:“如果在DOS下 安装Windows XP非常慢,肯定是安装前未运行Smartdrv.exe。我想问这个 Smartdrv.exe文件有什么饔?具体如何使用?  Smartdrv.exe这个文件对于...
  • PERL语言编程

    2007-06-24 11:55:48
    从 Perl 最早的文本处理语言开始,它已经发展成为一种非常复杂的,通用的编程语言,以及完整的开发环境,包括调试器,调节器,交叉引用,编译器,库,语法提示编辑器,以及所有其它“真正”的编程语言所具有的所有...
  • 25.5.2 编写编辑器脚本 25.5.3 编写保存脚本 25.5.4 运行编辑器 25.6 进一步探索 第26 章 项目 7:自建公告板 26.1 问题描述 26.2 有用工具 26.3 准备工作 26.4 初次实现 26.5 再次实现 26.5.1 编写脚本 main.cgi ...

空空如也

空空如也

1 2 3 4
收藏数 66
精华内容 26
关键字:

有什么不用安装的文本编辑器