以只读模式在vim的选项卡中打开文件

时间:2010-10-28 14:06:04

标签: vim tabs readonly

我知道使用vim -R从shell以只读模式打开文件,但是如何以只读模式在单独的选项卡(:tabe <filename>)中从vim内部打开文件?

感谢您的时间。

7 个答案:

答案 0 :(得分:71)

要在新标签页中以只读模式打开文件,请使用

tab sview /path/to/file

要在同一窗格中打开文件(不使用新窗口或标签页),请使用

view /path/to/file

请注意,tab view /path/to/file 不会打开新标签页。

答案 1 :(得分:31)

您可以从vim内部以只读模式打开文件:

:view /path/to/file

或从命令行:

$ vim -M /path/to/file

答案 2 :(得分:19)

vim -M filename以只读模式打开文件。

答案 3 :(得分:14)

使用:tabe <filename>打开文件,然后输入:view。它将自动切换到只读模式。

答案 4 :(得分:4)

尝试:tabedit +set\ noma|set\ ro FILE;这将在FILE关闭且modifiable打开的新标签页中打开readonly,从而阻止您修改或编写文件。如果您只想readonly,请省略noma集。可能很方便将其重新映射到另一个命令。

答案 5 :(得分:3)

vim -R /path/to/file
vim -m /path/to/file

只读模式。 允许修改文本但不能写(不保存)。

vim -M /path/to/file

不允许修改文本。

答案 6 :(得分:1)

对我有用的东西:

(SELECT MAX(e.idcolumn) FROM #tExplode E WHERE e.fcomponent = b.fparent AND e.fcomprev = b.fparentrev AND e.cfacilityid = b.pfacilityid AND e.idcolumn > 0 ) As parentkey

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'M2M_Std_BOM_Explosion' AND type = 'P')
       DROP PROCEDURE M2M_Std_BOM_Explosion
    GO


CREATE Procedure [dbo].[M2M_Std_BOM_Explosion] 
@pcPartNo CHAR(25), 
@pcPartRev CHAR(3), 
@pcFac CHAR(20), 
@plIndent Bit

As
Begin
    set nocount on

if object_id('tempdb..#tExplode') is not null drop table #tExplode

declare @sql as varchar(max) = ''

create table #tExplode
    (
        ID int not null,
        lvl int not null,
        CompPath varchar(8000),
        ItmPath varchar(8000),
        display varchar(100),
        fcomponent varchar(25),
        cfacilityid varchar(20),
        fcomprev varchar(3),
        fparent varchar(25),
        fparentrev varchar(3),
        pfacilityid varchar(20),
        fitem varchar(6),
        fqty numeric(15,5), 
        fsumqty numeric(15,5), 
        fst_ef_dt datetime, 
        fend_ef_dt datetime, 
        bomid int,
        fnoperno int,
        fltooling bit,
        fbommemo varchar(8000),
        fprodcl varchar(20),
        flfssvc bit,
        idcolumn Integer,
        timestamp_column timestamp,
        flextend bit, 
        fcompudrev varchar(3),
        fcparudrev varchar(3),
        forder int
    )

    Insert into  #tExplode( ID,lvl,CompPath,ItmPath,display,fcomponent,cfacilityid,fcomprev,
                            fparent,fparentrev,pfacilityid,fitem,fqty,fsumqty,fst_ef_dt, 
                            fend_ef_dt,bomid,fnoperno,fltooling,fbommemo,flfssvc,flextend,
                            fcompudrev,fcparudrev,forder,idcolumn)
                            SELECT 1,
                                   0,
                                   Cast(Rtrim(ltrim(@pcFac))+rtrim(ltrim(@pcPartNo))+rtrim(ltrim(@pcPartRev)) as varchar(8000)),
                                   Cast(rtrim(ltrim(@pcFac))+rtrim(ltrim(@pcPartNo))+rtrim(ltrim(@pcPartRev)) as Varchar(8000)),
                                   cast(1 AS varchar(100)),
                                   @pcPartNo,
                                   @pcFac,
                                   @pcPartRev,
                                   '',
                                   '',
                                   '',
                                   '',
                                   1,
                                   1, 
                                   {d '1900-01-01'}, 
                                   {d '1900-01-01'}, 
                                   0,
                                   '',
                                   0,
                                   '',
                                   0,
                                   0,
                                   '',
                                   '',
                                    0,
                                    0
                            FROM (SELECT @pcFac fac,
                                                @pcPartNo fpartno,
                                                         @pcPartRev frev) x
                            LEFT JOIN inrtgc i On i.fac=x.fac And i.fpartno=x.fpartno And i.fcpartrev=x.frev

                           ; WITH t AS (
                           select ID,lvl,CompPath,ItmPath,display,fcomponent,cfacilityid,fcomprev,
                                  fparent,fparentrev,pfacilityid,fitem,fqty,fsumqty,fst_ef_dt, 
                                     fend_ef_dt,
                                     bomid,
                                     fnoperno,
                                     fltooling,
                                     fbommemo,
                                     flfssvc,
                                     flextend,
                                     fcompudrev,
                                     fcparudrev,
                                     forder
                                     from #tExplode

                            UNION ALL

                             SELECT    b.identity_column,
                                       t.lvl+1, 
                                 rtrim(ltrim(t.CompPath)) + '!' + rtrim(ltrim(b.pfacilityid)) + rtrim(ltrim(b.fcomponent)) + Replicate(' ',25-Len(rtrim(ltrim(b.fcomponent))))+ rtrim(ltrim(b.fcomprev + '!')),
                                 rtrim(ltrim(t.ItmPath)) + '!' + rtrim(ltrim(b.fitem)),
                                 Cast(replicate(' ',2*t.lvl) + b.fcomponent as Varchar(100)),
                                 Cast(b.fcomponent as Varchar(25)),
                                 Cast(b.cfacilityid as Varchar(20)),
                                 Cast(b.fcomprev as Varchar(3)),
                                 Cast(b.fparent as Varchar(25)),
                                 Cast(b.fparentrev as Varchar(3)),
                                 Cast(b.pfacilityid as Varchar(20)),
                                 Cast(b.fitem as varchar(6)),
                                 b.fqty,
                                 Cast(CASE
                                     WHEN b.flextend = 1 THEN b.fqty * ISNULL(t.fsumqty, cast(1 AS numeric(15,5)))
                                     ELSE b.fqty
                                 END as Numeric(15,5)),
                                 b.fst_ef_dt,
                                 b.fend_ef_dt,
                                 b.identity_column,
                                 ISNULL(b.fnoperno,cast(0 AS int)),
                                 b.fltooling,
                                 Cast(b.fbommemo as Varchar(8000)),
                                 b.flfssvc,
                                 b.flextend,
                                 Cast(b.fcompudrev as Varchar(3)),
                                 Cast(b.fcparudrev as Varchar(3)),
                                 0
                                FROM inboms b
                                inner join t ON b.pFacilityID = t.cFacilityID
                                AND b.fparent = t.fcomponent
                                AND b.fparentrev = t.fcomprev
                                )


                    insert into #tExplode 
                    (ID,lvl,CompPath,ItmPath,display,fcomponent,cfacilityid,fcomprev,
                     fparent,fparentrev,pfacilityid,fitem,fqty,fsumqty,fst_ef_dt, 
                             fend_ef_dt,
                             bomid,
                             fnoperno,
                             fltooling,fbommemo,flfssvc,
                             flextend,
                             fcompudrev,fcparudrev,forder,idcolumn)
                    select  ID,lvl,CompPath,ItmPath,display,fcomponent,cfacilityid,fcomprev,
                            fparent,fparentrev,pfacilityid,fitem,fqty,fsumqty,fst_ef_dt, 
                             fend_ef_dt,
                             bomid,
                             fnoperno,
                             fltooling,fbommemo,
                             flfssvc,
                             flextend,
                             fcompudrev,fcparudrev,forder,row_number() over (order by lvl,comppath,cfacilityid,fcomponent,fcomprev,forder) from t


                    Set @sql = 'select b.idcolumn,b.lvl, 
                            b.comppath,
                            b.itmpath,
                            b.display, 
                            CASE WHEN m.fluseudrev = 1 THEN b.fcompudrev ELSE b.fcomprev END as disprev, 
                            b.fitem, 
                            fsource, 
                            b.fqty, 
                            CASE when b.flextend = 1 then b.fsumqty ELSE ((b.fqty * ISNULL(b.fsumqty, cast(1 AS numeric(15,5))))/Isnull(i.fSpq,1)) END as fsumqty, 
                            fmeasure,
                            b.fnoperno, 
                            CASE WHEN inbomm.fpartno IS NULL THEN SPACE(1)        ELSE ''*'' END as isparent, --Working
                            b.fst_ef_dt, 
                            b.fend_ef_dt, 
                            b.bomid,
                            b.fcomponent,
                            b.cfacilityid,
                            b.fcomprev,
                            m.fdescript as fdesc, 
                            b.fparent,
                            b.fparentrev,
                            b.pfacilityid,
                            ISNULL(m.identity_column, CAST(0 As Int)) as partid, 
                            fidims, 
                            Case When m.fcstscode=''O'' Then ''Obsolete''
                                    Else
                                        CASE WHEN NOT ((b.fst_ef_dt IS NULL) OR (b.fst_ef_dt={d ''1900-01-01''})) AND 
                                                DATEDIFF(day,b.fst_ef_dt, GetDate()) < 0 
                                                THEN ''Future'' 
                                            WHEN NOT ((b.fend_ef_dt IS NULL) OR (b.fend_ef_dt={d ''1900-01-01''})) AND 
                                                DATEDIFF(day,b.fEnd_ef_dt, GETDATE()) > 0 
                                            THEN ''Expired''
                                            ELSE ''Current''
                                        END
                                    End as effectivity, 
                            b.fltooling,
                            b.fbommemo,
                            m.fprodcl,
                            fllotreqd,
                            b.flfssvc,
                            b.timestamp_column,
                            (SELECT MAX(e.idcolumn) FROM #tExplode E WHERE             e.fcomponent = b.fparent AND e.fcomprev = b.fparentrev AND e.cfacilityid = b.pfacilityid AND e.idcolumn > 0 ) As parentkey,
                            b.flextend,
                            m.fluseudrev,  
                            b.fcompudrev,
                            b.fcparudrev,
                            b.forder  
                        from #tExplode b LEFT OUTER JOIN inmastx m ON
                                        b.cFacilityID = m.fac AND
                                        b.fcomponent = m.fpartno AND
                                        b.fcomprev = m.frev

                            LEFT OUTER JOIN inbomm ON
                                        b.pfacilityid = inbomm.facilityid AND
                                        b.fComponent = InBomm.fPartno AND
                                        b.fCompRev   = InBomm.fcPartRev
                            LEFT OUTER JOIN inrtgc i ON
                                        b.pfacilityid = i.fac AND
                                        b.fComponent = i.fPartno AND
                                        b.fCompRev   = i.fcPartRev
                        where ' + case when @plIndent= 1 then  'b.lvl >= 1' else 'b.lvl = 1' end + '
                        order by ' + case when @plIndent= 1 then  'b.comppath,b.cfacilityid,b.fcomponent,b.fcomprev,b.forder'  else 'b.comppath,b.forder' end + ''

                        Exec(@sql)

                        drop table #tExplode

end
--How to get "parentkey" in the stored procedure perfectly??
--The procedure furnishes wrong results if more than 1 same parent is addded in --same/different level of bom. The results shows one parent for all childs.

打开文件后,给出查看命令:

:vnew path/to/file