PyCharm 里,这个跳转行的定位操作,热键如何操作会比较爽?(在当前文件跳到,函数是从什么文件 import 的哪一行。而不是直接跳到那个函数的完整实现的地方),或者你们是怎么快捷操作的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
uti6770werty

PyCharm 里,这个跳转行的定位操作,热键如何操作会比较爽?(在当前文件跳到,函数是从什么文件 import 的哪一行。而不是直接跳到那个函数的完整实现的地方),或者你们是怎么快捷操作的?

  •  
  •   uti6770werty Feb 15, 2021 2547 views
    This topic created in 1898 days ago, the information mentioned may be changed or developed.

    譬如:

    #one.py 16 from Fun.AnalyFunc import nowTimeForStr # 在 one.py 的第 16 行,声明导入 nowTimeForStr 函数 #one.py 3468 FunnyTimeStr = nowTimeForStr(True,False,True,False) #在 one.py 的第 3468 行,使用了 nowTimeForStr 

    现在光标移动到 3468 行的 nowTimeForStr 上,按下 Ctrl+B,焦点直接跳去了 Fun/AnalyFunc.py 里面 def nowTimeForStr() ,事实上我只是想去到 16 行,在此文件内的导入声明,进行修改而已。。。
    大致上摸了一下 PyCharm 的热键,似乎不带这个操作?(可能不够仔细,恳请提示一下,谢谢!)

    如果用 Ctrl +F,前面 20 多个 nowTimeForStr 调用,那么手也够累的,也费时间,Ctrl+Home,从开始再找,很容易晃两下就回不到开始的地方了。。。。
    谢谢大家解答。

    11 replies    2021-02-17 10:47:18 +08:00
    akiakiseofficial
        1
    akiakiseofficial  
       Feb 15, 2021 via Android   1
    题外话,你只希望修改 import 部分,那在 Ctrl+F 搜索之后直接转到文件头就行了吧,搜索的内容会高亮的。
    mcfog
        2
    mcfog  
       Feb 15, 2021 via Android   1
    试试直接在 3468 焦点上 shift f6 ( refactor ) rename 应该就会连着 import 一起修改,如果效果不对试着搜动作搜一下 rename import alias 之类的关键词
    sunwei0325
        3
    sunwei0325  
       Feb 15, 2021
    我用的是 ideavim 的 # 和 *
    matrix67
        4
    matrix67  
       Feb 15, 2021
    这个明显 ide 跳的地方日常看代码,修改概率更大呀

    你要跳的那个头导入部分很多人都是把它折叠起来,为啥会有修改的需求。一般增删这部分的 metadata 都是让 ide 去完成的,所以我感觉你这个是个 x-y problem,你原始的需求是啥?
    uti6770werty
        5
    uti6770werty  
    OP
       Feb 16, 2021
    @xlui 似乎我没能直接理解意思,Ctrl+F 能直接转? 貌似在过滤器里也不能选择文件头部分? py 文件行数过多,高亮不管用。

    @mcfog 谢谢,最终需求其实也不是直接改,后面细说

    @sunwei0325 。。。。。。

    @matrix67 是的,每个人都有习惯不同吧,我有个很不工程的习惯,有些函数我不会直接在原文件上改,就原地副本了一个新文件后改版本名,然后在文件头里面去 import 我动过函数的那个文件来导入副本动过的函数,这样对自己的思路比较清晰,有时候要切换来回对比,也就有了这个要跳去 16/17 行做注释的动作。。。
    能记住行数,有时候我就直接 CTRL+G 跳过去,有时候思路不清晰,还真记不住行数,跳得不对就浪费几十秒时间去翻屏找函数了。
    matrix67
        6
    matrix67  
       Feb 16, 2021   1
    @uti6770werty #5 你这么说我就懂你的需求了。

    你的需求应该是,debug 或者修改函数的时候,你喜欢 copy 原文件到一个副本,为了对比两个函数不同的效果,需要改 import 文件名。 不过难道你是手工去改 import ? 如果你的函数是被几十个文件引用咋改嘞?


    你这个需求我可以讲下我是咋改的:

    1. 比如有个函数 func
    2. 我会把整个函数,都在原文件里面 copy 一份 func_bak
    3. 之后就在 func 里面改函数,运行,测试等
    4. 为了进行和原函数( func_bak )的对比,在 func 上面 shift+f6 rename 成 func_temp, 这时 ide 会把所有引用这个函数的地方也改成 func_temp
    5. 把 func_temp 函数名改成 func,把 func_bak 改成 func_temp. 所有调用函数都会指向改之前的函数
    6. 所有步骤都不需要动 import,单元测试等也不用动,该跑过的都能跑过
    answerhuang
        7
    answerhuang  
       Feb 16, 2021   1
    1. 选中 nowTimeForStr
    2. Select All Occurrences ( control + command + G )
    3. Esc
    Takamine
        8
    Takamine  
       Feb 16, 2021 via Android
    gg 。
    qazwsxkevin
        9
    qazwsxkevin  
       Feb 16, 2021
    @matrix67 好技能,学习了,以后绝对能用上,谢谢!


    @answerhuang 这个就是原本想要的操作,感谢!!!
    sampeng
        10
    sampeng  
       Feb 17, 2021 via iPhone
    vim 模式
    BingoXuan
        11
    BingoXuan  
       Feb 17, 2021 via Android
    你说的就是 monkeypatch,导入后额外导入一个 monkey patch 模块,自动查找特定目录下的模块进行替换。这样所有东西都不用动。不过用 IDE debug 时候用查找再跳转你需要的函数而不是直接跳转。
    About     Help     Advertise     Blog     API     FAQ     Solana     5484 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 59ms UTC 09:32 PVG 17:32 LAX 02:32 JFK 05:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86